80 import maya.OpenMaya
as OpenMaya
81 import maya.OpenMayaMPx
as OpenMayaMPx
83 kPluginNodeTypeName =
"spCircle"
84 kPluginNodeId = OpenMaya.MTypeId(0x87005)
88 class circle(OpenMayaMPx.MPxNode):
90 aInput = OpenMaya.MObject()
91 aScale = OpenMaya.MObject()
92 aFrames = OpenMaya.MObject()
93 aSOutput = OpenMaya.MObject()
94 aCOutput = OpenMaya.MObject()
98 OpenMayaMPx.MPxNode.__init__(self)
101 def compute(self, plug, data):
103 if (plug == circle.aSOutput
or plug == circle.aCOutput):
105 inputData = data.inputValue(circle.aInput)
106 scaleData = data.inputValue(circle.aScale)
107 framesData = data.inputValue(circle.aFrames)
110 currentFrame = inputData.asFloat()
111 scaleFactor = scaleData.asFloat()
112 framesPerCircle = framesData.asFloat()
113 angle = 6.2831853 * (currentFrame/framesPerCircle)
114 sinResult = math.sin(angle) * scaleFactor
115 cosResult = math.cos(angle) * scaleFactor
118 sinHandle = data.outputValue(circle.aSOutput)
119 cosHandle = data.outputValue(circle.aCOutput)
120 sinHandle.setFloat(sinResult)
121 cosHandle.setFloat(cosResult)
124 return OpenMaya.kUnknownParameter
131 return OpenMayaMPx.asMPxPtr( circle() )
135 def nodeInitializer():
136 nAttr = OpenMaya.MFnNumericAttribute()
139 circle.aInput = nAttr.create(
"input",
"in", OpenMaya.MFnNumericData.kFloat, 0.0)
140 nAttr.setStorable(
True)
142 circle.aScale = nAttr.create(
"scale",
"sc", OpenMaya.MFnNumericData.kFloat, 10.0)
143 nAttr.setStorable(
True)
145 circle.aFrames = nAttr.create(
"frames",
"fr", OpenMaya.MFnNumericData.kFloat, 48.0)
146 nAttr.setStorable(
True)
149 circle.aSOutput = nAttr.create(
"sineOutput",
"so", OpenMaya.MFnNumericData.kFloat, 0.0)
150 nAttr.setWritable(
False)
151 nAttr.setStorable(
False)
153 circle.aCOutput = nAttr.create(
"cosineOutput",
"co", OpenMaya.MFnNumericData.kFloat, 0.0,)
154 nAttr.setWritable(
False)
155 nAttr.setStorable(
False)
158 circle.addAttribute(circle.aInput)
159 circle.addAttribute(circle.aScale)
160 circle.addAttribute(circle.aFrames)
161 circle.addAttribute(circle.aSOutput)
162 circle.addAttribute(circle.aCOutput)
165 circle.attributeAffects(circle.aInput, circle.aSOutput)
166 circle.attributeAffects(circle.aInput, circle.aCOutput)
167 circle.attributeAffects(circle.aScale, circle.aSOutput)
168 circle.attributeAffects(circle.aScale, circle.aCOutput)
169 circle.attributeAffects(circle.aFrames, circle.aSOutput)
170 circle.attributeAffects(circle.aFrames, circle.aCOutput)
174 def initializePlugin(mobject):
175 mplugin = OpenMayaMPx.MFnPlugin(mobject,
"Autodesk",
"1.0",
"Any")
177 mplugin.registerNode( kPluginNodeTypeName, kPluginNodeId, nodeCreator, nodeInitializer )
179 sys.stderr.write(
"Failed to register node: %s" % kPluginNodeTypeName )
184 def uninitializePlugin(mobject):
185 mplugin = OpenMayaMPx.MFnPlugin(mobject)
187 mplugin.deregisterNode( kPluginNodeId )
189 sys.stderr.write(
"Failed to deregister node: %s" % kPluginNodeTypeName )