to help out, here's an empty shell node (as above--and really does
nothing, but pretty much just copied from the docs). this failes on
the creation of the correct MFnMesh for the colorSet....
##########################
import math, sys
import maya.OpenMaya as OpenMaya
import maya.OpenMayaAnim as OpenMayaAnim
import maya.OpenMayaMPx as OpenMayaMPx
kPluginNodeTypeName = "spTestNode"
testNodeId = OpenMaya.MTypeId(0x00129) # random bad number
#==================================================
# Node definition
class testNode(OpenMayaMPx.MPxNode):
# class variables
inputGeometry = OpenMaya.MObject()
outputGeometry = OpenMaya.MObject()
#==================================================
# constructor
def __init__(self):
OpenMayaMPx.MPxNode.__init__(self)
#==================================================
# compute
def compute ( self, plug, dataBlock ):
if plug == self.outputGeometry:
self.doCalculation( plug, dataBlock )
dataBlock.setClean(plug)
else:
return OpenMaya.kUnknownParameter
#==================================================
# doCalculation
def doCalculation( self, plug, dataBlock ):
inMeshHnd = dataBlock.inputValue( testNode.inputGeometry )
inMeshData = inMeshHnd.asMesh()
outMeshHnd = dataBlock.outputValue( testNode.outputGeometry )
meshDataFn = OpenMaya.MFnMeshData()
newMeshData = meshDataFn.create()
inMeshFn = OpenMaya.MFnMesh( inMeshData )
inMeshFn.copy( inMeshData, newMeshData )
colorSetNameString = "myNewColorSet"
inMeshFn.createColorSetWithName( colorSetNameString )
outMeshHnd.setMObject( newMeshData )
#==================================================
# creator
def nodeCreator():
return OpenMayaMPx.asMPxPtr( testNode() )
#==================================================
# initializer
def nodeInitializer():
tAttr = OpenMaya.MFnTypedAttribute()
#----------------------------------------------
# DEFINE ATTRS
testNode.inputGeometry = tAttr.create( "inputGeometry", "in",
OpenMaya.MFnData.kMesh )
testNode.outputGeometry = tAttr.create( "outputGeometry", "out",
OpenMaya.MFnData.kMesh )
tAttr.setStorable( False )
#-----------------------------------------
# ADD ATTRS
try:
testNode.addAttribute( testNode.outputGeometry )
except:
sys.stderr.write( "Failed to create %s of %s node\n" %
('outputGeometry', kPluginNodeTypeName ) )
try:
testNode.addAttribute( testNode.inputGeometry )
testNode.attributeAffects( testNode.inputGeometry,
testNode.outputGeometry )
except:
sys.stderr.write( "Failed to create %s of %s node\n" %
('inputGeometry', kPluginNodeTypeName ) )
#==================================================
# initialize the script plug-in
def initializePlugin(mobject):
mplugin = OpenMayaMPx.MFnPlugin(mobject, "us", "0.0.1", "Any")
try:
mplugin.registerNode( kPluginNodeTypeName, testNodeId, nodeCreator,
nodeInitializer )
except:
sys.stderr.write( "Failed to register node: %s\n" %
kPluginNodeTypeName )
# uninitialize the script plug-in
def uninitializePlugin(mobject):
mplugin = OpenMayaMPx.MFnPlugin( mobject )
try:
mplugin.deregisterNode( testNodeId )
except:
sys.stderr.write( "Failed to unregister node: %s\n" %
kPluginNodeTypeName )
##########################
and here's some MEL to create the node:
//file -f -new;
//unloadPlugin spTestNode;
file -f -new;
loadPlugin "<yourPathHere>/spTestNode.py";
file -f -new;
string $s[] = `polySphere`;
string $tm = `createNode spTestNode`;
connectAttr -f polySphere1.output spTestNode1.inputGeometry;
connectAttr -f spTestNode1.outputGeometry pSphereShape1.inMesh;