I noticed the deform function doesn't call when you edit the deformer membership of a custom deformer in Maya 2018 but it does in 2016. Is there something new that has to be done? you can test it with Chad Vernon's python implementation of the blendNode ( http://www.chadvernon.com/blog/resources/maya-api-programming/deformers/)
I adjusted the code so that it works with the newer versions of Maya. Removing points from the deformer membership in this plugin works as expected in 2016 but not in 2018. # ------------------------------------------------------------------------------------------- # import maya.OpenMayaMPx as OpenMayaMPx import maya.OpenMaya as OpenMaya import maya.cmds as cmds if OpenMaya.MGlobal.apiVersion() < 201600: envelope = OpenMayaMPx.cvar.MPxDeformerNode_envelope inputGeom = OpenMayaMPx.cvar.MPxDeformerNode_inputGeom outputGeom = OpenMayaMPx.cvar.MPxDeformerNode_outputGeom else: inputGeom = OpenMayaMPx.cvar.MPxGeometryFilter_inputGeom envelope = OpenMayaMPx.cvar.MPxGeometryFilter_envelope outputGeom = OpenMayaMPx.cvar.MPxGeometryFilter_outputGeom class BlendNode(OpenMayaMPx.MPxDeformerNode): kPluginNodeId = OpenMaya.MTypeId(0x00000002) aBlendMesh = OpenMaya.MObject() aBlendWeight = OpenMaya.MObject() def __init__(self): OpenMayaMPx.MPxDeformerNode.__init__(self) def deform(self, data, itGeo, localToWorldMatrix, mIndex): env = data.inputValue(envelope).asFloat() blendWeight = data.inputValue(BlendNode.aBlendWeight).asFloat() blendWeight *= env oBlendMesh = data.inputValue(BlendNode.aBlendMesh).asMesh() if oBlendMesh.isNull(): return fnBlendMesh = OpenMaya.MFnMesh(oBlendMesh) blendPoints = OpenMaya.MPointArray() fnBlendMesh.getPoints(blendPoints) while not itGeo.isDone(): pt = itGeo.position() w = self.weightValue(data, mIndex, itGeo.index()) pt = pt + (blendPoints[itGeo.index()] - pt) * blendWeight * w itGeo.setPosition(pt) itGeo.next() def creator(): return OpenMayaMPx.asMPxPtr(BlendNode()) def initialize(): tAttr = OpenMaya.MFnTypedAttribute() nAttr = OpenMaya.MFnNumericAttribute() BlendNode.aBlendMesh = tAttr.create('blendMesh', 'bm', OpenMaya.MFnData.kMesh) BlendNode.addAttribute( BlendNode.aBlendMesh ) BlendNode.attributeAffects(BlendNode.aBlendMesh, outputGeom) BlendNode.aBlendWeight = nAttr.create('blendWeight', 'bw', OpenMaya.MFnNumericData.kFloat) nAttr.setKeyable(True) BlendNode.addAttribute(BlendNode.aBlendWeight) BlendNode.attributeAffects(BlendNode.aBlendWeight, outputGeom) # Make deformer weights paintable cmds.makePaintable('blendNode', 'weights', attrType='multiFloat', shapeMode='deformer') def initializePlugin(obj): plugin = OpenMayaMPx.MFnPlugin(obj, 'Chad Vernon', '1.0', 'Any') try: plugin.registerNode('blendNode', BlendNode.kPluginNodeId, creator, initialize, OpenMayaMPx.MPxNode.kDeformerNode) except: raise RuntimeError, 'Failed to register node' def uninitializePlugin(obj): plugin = OpenMayaMPx.MFnPlugin(obj) try: plugin.deregisterNode(BlendNode.kPluginNodeId) except: raise RuntimeError, 'Failed to deregister node' # ------------------------------------------------------------------------------------------- # -- You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group. To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/eb8fd475-ad1e-43f2-84e0-17f7f833b33a%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.