Multinodes

From DreamsteepWiki

Jump to: navigation, search





import math, sys



import maya.OpenMaya as OpenMaya

import maya.OpenMayaMPx as OpenMayaMPx



kPluginNodeTypeName = "mynode"

kPluginNodeId = OpenMaya.MTypeId(0x87005)



kkPluginNodeTypeName = "mynoded"
kkPluginNodeId = OpenMaya.MTypeId(0x87007)




# Node definition

class circle(OpenMayaMPx.MPxNode):

	# class variables

	aInput = OpenMaya.MObject()

	aScale = OpenMaya.MObject()

	aFrames = OpenMaya.MObject()


	aSOutput = OpenMaya.MObject()

	aCOutput = OpenMaya.MObject()



	aSNAP      = OpenMaya.MObject()
	aCRPOutput = OpenMaya.MObject()



	def __init__(self):

		OpenMayaMPx.MPxNode.__init__(self)





	def compute(self, plug, data):

		# Check that the requested recompute is one of the output values

		if (plug == circle.aSOutput or plug == circle.aCOutput):

			# Read the input values

			inputData = data.inputValue(circle.aInput)

			scaleData = data.inputValue(circle.aScale)

			framesData = data.inputValue(circle.aFrames)



			# Compute the output values

			currentFrame = inputData.asFloat()

			scaleFactor  = scaleData.asFloat()

			framesPerCircle = framesData.asFloat()

			angle = 6.2831853 * (currentFrame/framesPerCircle)

			sinResult = math.sin(angle) * scaleFactor

			cosResult = math.cos(angle) * scaleFactor



			# Store them on the output plugs

			sinHandle = data.outputValue(circle.aSOutput)

			cosHandle = data.outputValue(circle.aCOutput)

			sinHandle.setFloat(sinResult)

			cosHandle.setFloat(cosResult)

			data.setClean(plug)

		else:

			return OpenMaya.MStatus.kUnknownParameter



		return OpenMaya.MStatus.kSuccess



# Node definition

class circled(OpenMayaMPx.MPxNode):
	# class variables
	aInputd = OpenMaya.MObject()
	aScaled = OpenMaya.MObject()
	aFramesd = OpenMaya.MObject()
	aSOutputd = OpenMaya.MObject()
	aCOutputd = OpenMaya.MObject()
	aSNAPd      = OpenMaya.MObject()
	aCRPOutputd = OpenMaya.MObject()

	def __init__(self):

		OpenMayaMPx.MPxNode.__init__(self)





	def compute(self, plug, data):

		return OpenMaya.MStatus.kSuccess


# creator

def nodeCreator():

	return OpenMayaMPx.asMPxPtr( circle() )


def nodedCreator():

	return OpenMayaMPx.asMPxPtr( circled() )



def nodedInitializer():
	nAttrd = OpenMaya.MFnNumericAttribute()

	# Setup the input attributes
	circled.aInputd = nAttrd.create("input", "in", OpenMaya.MFnNumericData.kFloat, 0.0)
	nAttrd.setStorable(True)
	circled.aScaled = nAttrd.create("scale", "sc", OpenMaya.MFnNumericData.kFloat, 10.0)
	nAttrd.setStorable(True)
	circled.aFramesd = nAttrd.create("frames", "fr", OpenMaya.MFnNumericData.kFloat, 48.0)
	nAttrd.setStorable(True)
	circled.aSNAPd = nAttrd.create("snapper", "snp", OpenMaya.MFnNumericData.kFloat, 333.0)
	nAttrd.setStorable(True)
	# Setup the output attributes
	circled.aSOutputd = nAttrd.create("sineOutput", "so", OpenMaya.MFnNumericData.kFloat, 0.0)
	nAttrd.setWritable(True)
	nAttrd.setStorable(True)
	circled.aCOutputd = nAttrd.create("cosineOutput", "co", OpenMaya.MFnNumericData.kFloat, 0.0,)
	nAttrd.setWritable(True)
	nAttrd.setStorable(True)
	circled.aCRPOutputd = nAttrd.create("crapper", "crp", OpenMaya.MFnNumericData.kFloat, 0.0,)
	nAttrd.setWritable(True)
	nAttrd.setStorable(True)
	# Add the attributes to the node
	circled.addAttribute(circled.aInputd)
	circled.addAttribute(circled.aScaled)
	circled.addAttribute(circled.aFramesd)
	circled.addAttribute(circled.aSOutputd)
	circled.addAttribute(circled.aCOutputd)
	circled.addAttribute(circled.aCRPOutputd)
	circled.addAttribute(circled.aSNAPd)



 	# Set the attribute dependencies
	circled.attributeAffects(circled.aInputd, circled.aSOutputd)
	circled.attributeAffects(circled.aInputd, circled.aCOutputd)
	circled.attributeAffects(circled.aScaled, circled.aSOutputd)
	circled.attributeAffects(circled.aScaled, circled.aCOutputd)
	circled.attributeAffects(circled.aFramesd, circled.aSOutputd)
	circled.attributeAffects(circled.aFramesd, circled.aCOutputd)
	##
	circled.attributeAffects(circled.aSNAPd, circled.aCRPOutputd)
	circled.attributeAffects(circled.aSNAPd, circled.aCRPOutputd)

# initializer

def nodeInitializer():

	nAttr = OpenMaya.MFnNumericAttribute()

	# Setup the input attributes
	circle.aInput = nAttr.create("input", "in", OpenMaya.MFnNumericData.kFloat, 0.0)
	nAttr.setStorable(True)
	circle.aScale = nAttr.create("scale", "sc", OpenMaya.MFnNumericData.kFloat, 10.0)
	nAttr.setStorable(True)
	circle.aFrames = nAttr.create("frames", "fr", OpenMaya.MFnNumericData.kFloat, 48.0)
	nAttr.setStorable(True)
	circle.aSNAP = nAttr.create("snapper", "snp", OpenMaya.MFnNumericData.kFloat, 333.0)
	nAttr.setStorable(True)
	# Setup the output attributes
	circle.aSOutput = nAttr.create("sineOutput", "so", OpenMaya.MFnNumericData.kFloat, 0.0)
	nAttr.setWritable(True)
	nAttr.setStorable(True)
	circle.aCOutput = nAttr.create("cosineOutput", "co", OpenMaya.MFnNumericData.kFloat, 0.0,)
	nAttr.setWritable(True)
	nAttr.setStorable(True)
	circle.aCRPOutput = nAttr.create("crapper", "crp", OpenMaya.MFnNumericData.kFloat, 0.0,)
	nAttr.setWritable(True)
	nAttr.setStorable(True)
	# Add the attributes to the node
	circle.addAttribute(circle.aInput)
	circle.addAttribute(circle.aScale)
	circle.addAttribute(circle.aFrames)
	circle.addAttribute(circle.aSOutput)
	circle.addAttribute(circle.aCOutput)
##
	circle.addAttribute(circle.aCRPOutput)
	circle.addAttribute(circle.aSNAP)



 	# Set the attribute dependencies
	circle.attributeAffects(circle.aInput, circle.aSOutput)
	circle.attributeAffects(circle.aInput, circle.aCOutput)
	circle.attributeAffects(circle.aScale, circle.aSOutput)
	circle.attributeAffects(circle.aScale, circle.aCOutput)
	circle.attributeAffects(circle.aFrames, circle.aSOutput)
	circle.attributeAffects(circle.aFrames, circle.aCOutput)
	##
	circle.attributeAffects(circle.aSNAP, circle.aCRPOutput)
	circle.attributeAffects(circle.aSNAP, circle.aCRPOutput)

# initialize the script plug-in

def initializePlugin(mobject):

	mplugin = OpenMayaMPx.MFnPlugin(mobject, "perihelion_vfx", "1.0", "Any")

	try:

		mplugin.registerNode( kPluginNodeTypeName,  kPluginNodeId, nodeCreator, nodeInitializer )

		mplugin.registerNode( kkPluginNodeTypeName, kkPluginNodeId, nodedCreator, nodedInitializer )
	except:

		sys.stderr.write( "Failed to register node: %s" % kPluginNodeTypeName )
		sys.stderr.write( "Failed to register node: %s" % kkPluginNodeTypeName )

		raise





# uninitialize the script plug-in

def uninitializePlugin(mobject):

	mplugin = OpenMayaMPx.MFnPlugin(mobject)

	try:

		mplugin.deregisterNode( kPluginNodeId )
		mplugin.deregisterNode( kkPluginNodeId )

	except:

		sys.stderr.write( "Failed to deregister node: %s" % kPluginNodeTypeName )
		sys.stderr.write( "Failed to deregister node: %s" % kkPluginNodeTypeName )
		raise




Personal tools