83 import maya.OpenMaya 
as OpenMaya
 
   84 import maya.OpenMayaMPx 
as OpenMayaMPx
 
   86 kPluginNodeTypeName = 
"spCircle" 
   91 class circle(OpenMayaMPx.MPxNode):
 
  101         OpenMayaMPx.MPxNode.__init__(self)
 
  104     def compute(self, plug, data):
 
  106         if (plug == circle.aSOutput 
or plug == circle.aCOutput):
 
  108             inputData = data.inputValue(circle.aInput)
 
  109             scaleData = data.inputValue(circle.aScale)
 
  110             framesData = data.inputValue(circle.aFrames)
 
  113             currentFrame = inputData.asFloat()
 
  114             scaleFactor  = scaleData.asFloat()
 
  115             framesPerCircle = framesData.asFloat()
 
  116             angle = 6.2831853 * (currentFrame/framesPerCircle)
 
  117             sinResult = math.sin(angle) * scaleFactor
 
  118             cosResult = math.cos(angle) * scaleFactor
 
  121             sinHandle = data.outputValue(circle.aSOutput)
 
  122             cosHandle = data.outputValue(circle.aCOutput)
 
  123             sinHandle.setFloat(sinResult)
 
  124             cosHandle.setFloat(cosResult)
 
  127             return OpenMaya.kUnknownParameter
 
  134     return OpenMayaMPx.asMPxPtr( circle() )
 
  138 def nodeInitializer():
 
  142     circle.aInput = nAttr.create(
"input", 
"in", OpenMaya.MFnNumericData.kFloat, 0.0)
 
  143     nAttr.setStorable(
True)
 
  145     circle.aScale = nAttr.create(
"scale", 
"sc", OpenMaya.MFnNumericData.kFloat, 10.0)
 
  146     nAttr.setStorable(
True)
 
  148     circle.aFrames = nAttr.create(
"frames", 
"fr", OpenMaya.MFnNumericData.kFloat, 48.0)
 
  149     nAttr.setStorable(
True)
 
  152     circle.aSOutput = nAttr.create(
"sineOutput", 
"so", OpenMaya.MFnNumericData.kFloat, 0.0)
 
  153     nAttr.setWritable(
False)
 
  154     nAttr.setStorable(
False)
 
  156     circle.aCOutput = nAttr.create(
"cosineOutput", 
"co", OpenMaya.MFnNumericData.kFloat, 0.0,)
 
  157     nAttr.setWritable(
False)
 
  158     nAttr.setStorable(
False)
 
  161     circle.addAttribute(circle.aInput)
 
  162     circle.addAttribute(circle.aScale)
 
  163     circle.addAttribute(circle.aFrames)
 
  164     circle.addAttribute(circle.aSOutput)
 
  165     circle.addAttribute(circle.aCOutput)
 
  168     circle.attributeAffects(circle.aInput, circle.aSOutput)
 
  169     circle.attributeAffects(circle.aInput, circle.aCOutput)
 
  170     circle.attributeAffects(circle.aScale, circle.aSOutput)
 
  171     circle.attributeAffects(circle.aScale, circle.aCOutput)
 
  172     circle.attributeAffects(circle.aFrames, circle.aSOutput)
 
  173     circle.attributeAffects(circle.aFrames, circle.aCOutput)
 
  177 def initializePlugin(mobject):
 
  178     mplugin = OpenMayaMPx.MFnPlugin(mobject, 
"Autodesk", 
"1.0", 
"Any")
 
  180         mplugin.registerNode( kPluginNodeTypeName, kPluginNodeId, nodeCreator, nodeInitializer )
 
  182         sys.stderr.write( 
"Failed to register node: %s" % kPluginNodeTypeName )
 
  187 def uninitializePlugin(mobject):
 
  188     mplugin = OpenMayaMPx.MFnPlugin(mobject)
 
  190         mplugin.deregisterNode( kPluginNodeId )
 
  192         sys.stderr.write( 
"Failed to deregister node: %s" % kPluginNodeTypeName )