61 import maya.OpenMaya
as OpenMaya
62 import maya.OpenMayaUI
as OpenMayaUI
63 import maya.OpenMayaMPx
as OpenMayaMPx
66 contextCmdName =
"spMoveManipCtxCmd"
67 nodeName =
"spMoveManip"
69 class moveManip(OpenMayaMPx.MPxManipContainer):
74 OpenMayaMPx.MPxManipContainer.__init__(self)
76 def createChildren(self):
77 self.fDistanceManip = self.addDistanceManip(
"distanceManip",
"distance")
81 distanceManipFn.setStartPoint(startPoint)
82 distanceManipFn.setDirection(direction)
83 self.fFreePointManip = self.addFreePointTriadManip(
"pointManip",
"freePoint")
85 def connectToDependNode(self, node):
89 syPlug = nodeFn.findPlug(
"scaleY")
90 tPlug = nodeFn.findPlug(
"translate")
92 distanceManipFn.connectToDistancePlug(syPlug)
94 freePointManipFn.connectToPointPlug(tPlug)
95 OpenMayaMPx.MPxManipContainer.finishAddingManips(self)
96 OpenMayaMPx.MPxManipContainer.connectToDependNode(self,node)
98 sys.stderr.write(
"Error finding and connecting plugs\n" )
101 def moveManipCreator():
102 return OpenMayaMPx.asMPxPtr( moveManip() )
104 def moveManipInitialize():
105 OpenMayaMPx.MPxManipContainer.initialize()
107 class moveManipContext(OpenMayaMPx.MPxSelectionContext):
109 OpenMayaMPx.MPxSelectionContext.__init__(self)
110 self.updateManipulatorsCallbackID =
None
112 def toolOnSetup(self,event):
113 updateManipulators(self)
116 def toolOffCleanup(self):
117 self.deleteManipulators()
119 if self.updateManipulatorsCallbackID !=
None:
122 sys.stderr.write(
"Cleanup called before setup.\n" )
123 super(moveManipContext, self).toolOffCleanup()
125 def updateManipulators(clientData):
126 clientData.deleteManipulators()
131 while not selectionIter.isDone():
133 selectionIter.getDependNode(dependNode)
134 if dependNode.isNull()
or not dependNode.hasFn(OpenMaya.MFn.kDependencyNode):
135 print "depend node is null"
139 rPlug = dependNodeFn.findPlug(
"translate",
False)
140 sPlug = dependNodeFn.findPlug(
"scaleY",
False)
141 if rPlug.isNull()
or sPlug.isNull():
142 print "translate and/or scale plugs are null"
147 manipulator = OpenMayaMPx.MPxManipContainer.newManipulator(nodeName, manipObject)
148 if manipulator
is not None:
149 clientData.addManipulator(manipObject)
150 manipulator.connectToDependNode(dependNode)
153 class moveManipCtxCmd(OpenMayaMPx.MPxContextCommand):
155 OpenMayaMPx.MPxContextCommand.__init__(self)
158 return OpenMayaMPx.asMPxPtr( moveManipContext() )
161 def contextCmdCreator():
162 return OpenMayaMPx.asMPxPtr( moveManipCtxCmd() )
166 def initializePlugin(mobject):
167 mplugin = OpenMayaMPx.MFnPlugin(mobject)
170 mplugin.registerContextCommand( contextCmdName, contextCmdCreator )
172 print "Failed to register context command: %s" % contextCmdName
176 mplugin.registerNode(nodeName, moveManipId, moveManipCreator, moveManipInitialize, OpenMayaMPx.MPxNode.kManipContainer)
178 print "Failed to register node: %s" % nodeName
182 def uninitializePlugin(mobject):
183 mplugin = OpenMayaMPx.MFnPlugin(mobject)
185 mplugin.deregisterContextCommand(contextCmdName)
187 print "Failed to deregister context command: %s" % contextCmdName
191 mplugin.deregisterNode(moveManipId)
193 print "Failed to deregister node: %s" % nodeName