46 import maya.OpenMaya
as OpenMaya
47 import maya.OpenMayaUI
as OpenMayaUI
48 import maya.OpenMayaMPx
as OpenMayaMPx
50 moveManipId = OpenMaya.MTypeId(0x87009)
51 contextCmdName =
"spMoveManipCtxCmd"
52 nodeName =
"spMoveManip"
54 class moveManip(OpenMayaMPx.MPxManipContainer):
55 fDistanceManip = OpenMaya.MDagPath()
56 fFreePointManip = OpenMaya.MDagPath()
59 OpenMayaMPx.MPxManipContainer.__init__(self)
61 def createChildren(self):
62 self.fDistanceManip = self.addDistanceManip(
"distanceManip",
"distance")
63 distanceManipFn = OpenMayaUI.MFnDistanceManip(self.fDistanceManip)
64 startPoint = OpenMaya.MPoint(0.0, 0.0, 0.0)
65 direction = OpenMaya.MVector(0.0, 1.0, 0.0)
66 distanceManipFn.setStartPoint(startPoint)
67 distanceManipFn.setDirection(direction)
68 self.fFreePointManip = self.addFreePointTriadManip(
"pointManip",
"freePoint")
70 def connectToDependNode(self, node):
71 nodeFn = OpenMaya.MFnDependencyNode(node)
74 syPlug = nodeFn.findPlug(
"scaleY")
75 tPlug = nodeFn.findPlug(
"translate")
76 distanceManipFn = OpenMayaUI.MFnDistanceManip(self.fDistanceManip)
77 distanceManipFn.connectToDistancePlug(syPlug)
78 freePointManipFn = OpenMayaUI.MFnFreePointTriadManip(self.fFreePointManip)
79 freePointManipFn.connectToPointPlug(tPlug)
80 OpenMayaMPx.MPxManipContainer.finishAddingManips(self)
81 OpenMayaMPx.MPxManipContainer.connectToDependNode(self,node)
83 sys.stderr.write(
"Error finding and connecting plugs\n" )
86 def moveManipCreator():
87 return OpenMayaMPx.asMPxPtr( moveManip() )
89 def moveManipInitialize():
90 OpenMayaMPx.MPxManipContainer.initialize()
92 class moveManipContext(OpenMayaMPx.MPxSelectionContext):
94 OpenMayaMPx.MPxSelectionContext.__init__(self)
96 def toolOnSetup(self,event):
97 updateManipulators(self)
98 OpenMaya.MModelMessage.addCallback(OpenMaya.MModelMessage.kActiveListModified, updateManipulators, self)
100 def updateManipulators(clientData):
101 clientData.deleteManipulators()
102 selectionList = OpenMaya.MSelectionList()
104 OpenMaya.MGlobal.getActiveSelectionList(selectionList)
105 selectionIter = OpenMaya.MItSelectionList(selectionList, OpenMaya.MFn.kInvalid)
106 while not selectionIter.isDone():
107 dependNode = OpenMaya.MObject()
108 selectionIter.getDependNode(dependNode)
109 if dependNode.isNull()
or not dependNode.hasFn(OpenMaya.MFn.kDependencyNode):
110 print "depend node is null"
113 dependNodeFn = OpenMaya.MFnDependencyNode(dependNode)
114 rPlug = dependNodeFn.findPlug(
"translate",
False)
115 sPlug = dependNodeFn.findPlug(
"scaleY",
False)
116 if rPlug.isNull()
or sPlug.isNull():
117 print "translate and/or scale plugs are null"
121 manipObject = OpenMaya.MObject()
122 manipulator = OpenMayaMPx.MPxManipContainer.newManipulator(nodeName, manipObject)
123 if manipulator
is not None:
124 clientData.addManipulator(manipObject)
125 manipulator.connectToDependNode(dependNode)
128 class moveManipCtxCmd(OpenMayaMPx.MPxContextCommand):
130 OpenMayaMPx.MPxContextCommand.__init__(self)
133 return OpenMayaMPx.asMPxPtr( moveManipContext() )
136 def contextCmdCreator():
137 return OpenMayaMPx.asMPxPtr( moveManipCtxCmd() )
141 def initializePlugin(mobject):
142 mplugin = OpenMayaMPx.MFnPlugin(mobject)
145 mplugin.registerContextCommand( contextCmdName, contextCmdCreator )
147 print "Failed to register context command: %s" % contextCmdName
151 mplugin.registerNode(nodeName, moveManipId, moveManipCreator, moveManipInitialize, OpenMayaMPx.MPxNode.kManipContainer)
153 print "Failed to register node: %s" % nodeName
157 def uninitializePlugin(mobject):
158 mplugin = OpenMayaMPx.MFnPlugin(mobject)
160 mplugin.deregisterContextCommand(contextCmdName)
162 print "Failed to deregister context command: %s" % contextCmdName
166 mplugin.deregisterNode(moveManipId)
168 print "Failed to deregister node: %s" % nodeName