Previously asked here.
I’m looking to subclass Maya’s default joint and hand it a few extra attributes, but I can’t find any suitable class nor example of how to go about it.
I managed to put together a transform like this…
myTransform.py
from maya import OpenMaya
from maya import OpenMayaMPx
class MyNode(OpenMayaMPx.MPxTransform):
name = "myNode"
id = OpenMaya.MTypeId(0x87014)
matrixId = OpenMaya.MTypeId(0x87015)
@classmethod
def create(cls):
return OpenMayaMPx.asMPxPtr(cls())
@classmethod
def init(cls):
numFn = OpenMaya.MFnNumericAttribute()
cls.myAttr = numFn.create(
"myAttr", "mya", OpenMaya.MFnNumericData.kDouble, 0.0
)
numFn.setKeyable(True)
numFn.setAffectsWorldSpace(True)
cls.addAttribute(cls.myAttr)
@classmethod
def matrix(cls):
class _(OpenMayaMPx.MPxTransformationMatrix):
pass
return OpenMayaMPx.asMPxPtr(_())
def initializePlugin(mobject):
mplugin = OpenMayaMPx.MFnPlugin(mobject)
mplugin.registerTransform(
MyNode.name,
MyNode.id,
MyNode.create,
MyNode.init,
MyNode.matrix,
MyNode.matrixId
)
def uninitializePlugin(mobject):
mplugin = OpenMayaMPx.MFnPlugin(mobject)
mplugin.deregisterNode(MyNode.id)
But how does one make a new joint type? I could settle for a re-implementation of a new joint, starting from MPxTransform as that’s what it looks to be originally subclassed from.