Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math, sys
- import maya.OpenMaya as OpenMaya
- import maya.OpenMayaMPx as OpenMayaMPx
- kPluginNodeTypeName = "MathNode"
- mathNodeId = OpenMaya.MTypeId(0x87107)
- # Node definition
- class mathNode(OpenMayaMPx.MPxNode):
- # class variables
- input = OpenMaya.MObject()
- oper = OpenMaya.MObject()
- scale = OpenMaya.MObject()
- output = OpenMaya.MObject()
- radgrad=OpenMaya.MObject()
- def __init__(self):
- OpenMayaMPx.MPxNode.__init__(self)
- def compute(self,plug,dataBlock):
- if ( plug == mathNode.output ):
- dataHandle = dataBlock.inputValue( mathNode.input )
- dataOpHandle=dataBlock.inputValue(mathNode.oper)
- dataRGHandle=dataBlock.inputValue(mathNode.radgrad)
- dataSclHandle=dataBlock.inputValue(mathNode.scale)
- operShort=dataOpHandle.asShort()
- rgShort=dataRGHandle.asShort()
- inputFloat = dataHandle.asFloat()
- scaleFloat = dataSclHandle.asFloat()
- result=0.0
- outputHandle = dataBlock.outputValue( mathNode.output )
- if (operShort==0):
- result = math.sin( inputFloat ) * scaleFloat
- outputHandle.setFloat( result )
- elif(operShort==1):
- result = math.cos( inputFloat ) * scaleFloat
- outputHandle.setFloat( result )
- elif(operShort==2):
- result = math.tan( inputFloat ) * scaleFloat
- outputHandle.setFloat( result )
- elif(operShort==3):
- if(inputFloat > 1):
- inputFloat=1
- if(inputFloat < -1):
- inputFloat=-1
- result = math.asin( inputFloat ) * scaleFloat
- if(rgShort==0):
- outputHandle.setFloat( result )
- else:
- outputHandle.setFloat( math.degrees(result))
- elif(operShort==4):
- if(inputFloat>1):
- inputFloat=1
- if(inputFloat<-1):
- inputFloat=-1
- result = math.acos( inputFloat ) * scaleFloat
- if(rgShort==0):
- outputHandle.setFloat( result )
- else:
- outputHandle.setFloat( math.degrees(result))
- elif(operShort==5):
- result = math.atan( inputFloat ) * scaleFloat
- if(rgShort==0):
- outputHandle.setFloat( result )
- else:
- outputHandle.setFloat( math.degrees(result))
- dataBlock.setClean( plug )
- return OpenMaya.kUnknownParameter
- # creator
- def nodeCreator():
- return OpenMayaMPx.asMPxPtr( mathNode() )
- # initializer
- def nodeInitializer():
- # input
- nAttr = OpenMaya.MFnNumericAttribute()
- mathNode.input = nAttr.create( "input", "in", OpenMaya.MFnNumericData.kFloat, 0.0 )
- nAttr.setStorable(1)
- nAttr.setKeyable(1)
- nAttr.setWritable(1)
- # enum attribute operator
- enumAttr=OpenMaya.MFnEnumAttribute()
- mathNode.oper=enumAttr.create("operator","op", 0)
- attrF=enumAttr.addField("sin",0)
- attrF=enumAttr.addField("cos",1)
- attrF=enumAttr.addField("tan",2)
- attrF=enumAttr.addField("arcsin",3)
- attrF=enumAttr.addField("arccos",4)
- attrF=enumAttr.addField("arctan",5)
- enumAttr.setStorable(1)
- enumAttr.setKeyable(0)
- enumAttr.setWritable(1)
- #radiant to deg and vice versa attribute
- radgradAttr=OpenMaya.MFnEnumAttribute()
- mathNode.radgrad=radgradAttr.create("angleType","at",0)
- rgF=radgradAttr.addField("rad",0)
- rgF=radgradAttr.addField("grad",1)
- radgradAttr.setStorable(1)
- radgradAttr.setKeyable(0)
- radgradAttr.setWritable(1)
- #scale attribute
- sAttr=OpenMaya.MFnNumericAttribute()
- mathNode.scale= sAttr.create( "scale", "scl", OpenMaya.MFnNumericData.kFloat, 1.0 )
- sAttr.setStorable(1)
- sAttr.setKeyable(1)
- sAttr.setWritable(1)
- # output
- nAttr = OpenMaya.MFnNumericAttribute()
- mathNode.output = nAttr.create( "output", "out", OpenMaya.MFnNumericData.kFloat, 0.0 )
- nAttr.setStorable(0)
- nAttr.setWritable(0)
- # add attributes
- mathNode.addAttribute( mathNode.input )
- mathNode.addAttribute( mathNode.oper )
- mathNode.addAttribute(mathNode.radgrad)
- mathNode.addAttribute(mathNode.scale)
- mathNode.addAttribute( mathNode.output )
- # dependency graph
- mathNode.attributeAffects( mathNode.input, mathNode.output )
- mathNode.attributeAffects( mathNode.oper, mathNode.output )
- mathNode.attributeAffects(mathNode.radgrad,mathNode.output)
- mathNode.attributeAffects( mathNode.scale, mathNode.output )
- # initialize the script plug-in
- def initializePlugin(mobject):
- mplugin = OpenMayaMPx.MFnPlugin(mobject,"Antonio Sacco","0.5")
- try:
- mplugin.registerNode( kPluginNodeTypeName, mathNodeId, nodeCreator, nodeInitializer )
- except:
- sys.stderr.write( "Failed to register node: %s" % kPluginNodeTypeName )
- raise
- # uninitialize the script plug-in
- def uninitializePlugin(mobject):
- mplugin = OpenMayaMPx.MFnPlugin(mobject)
- try:
- mplugin.deregisterNode( mathNodeId )
- except:
- sys.stderr.write( "Failed to deregister node: %s" % kPluginNodeTypeName )
- raise
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement