70 import maya.OpenMaya
as OpenMaya
71 import maya.OpenMayaMPx
as OpenMayaMPx
74 kPluginCmdName=
"spMotionTrace"
77 kStartLongFlag =
"-startFrame"
79 kEndLongFlag =
"-endFrame"
81 kByLongFlag =
"-byFrame"
84 class motionTrace(OpenMayaMPx.MPxCommand):
86 OpenMayaMPx.MPxCommand.__init__(self)
95 This method is called from script when this command is called.
96 It should set up any class data necessary for redo/undo,
97 parse any given arguments, and then call redoIt.
99 argData = OpenMaya.MArgDatabase(self.syntax(), args)
101 if argData.isFlagSet(kStartFlag):
102 self.__start = argData.flagArgumentInt(kStartFlag, 0)
103 if argData.isFlagSet(kEndFlag):
104 self.__end = argData.flagArgumentInt(kEndFlag, 0)
105 if argData.isFlagSet(kByFlag):
106 self.__by = argData.flagArgumentInt(kByFlag, 0)
113 This method performs the action of the command.
114 This method iterates over all selected items and
115 prints out connected plug and dependency node type
118 picked = OpenMaya.MObjectArray()
119 dependNode = OpenMaya.MObject()
122 slist = OpenMaya.MSelectionList()
123 OpenMaya.MGlobal.getActiveSelectionList(slist)
124 iter = OpenMaya.MItSelectionList(slist)
128 while not iter.isDone():
130 iter.getDependNode(dependNode)
131 picked.append(dependNode)
135 pointArrays = [ OpenMaya.MPointArray()
for i
in range(picked.length()) ]
138 while (time <= self.__end):
139 timeval = OpenMaya.MTime(time)
140 OpenMaya.MGlobal.viewFrame(timeval)
143 for i
in range(picked.length()):
145 dependNode = picked[i]
148 fnDependNode = OpenMaya.MFnDependencyNode(dependNode)
151 txAttr = fnDependNode.attribute(
"translateX")
152 txPlug = OpenMaya.MPlug(dependNode, txAttr)
153 tx = txPlug.asDouble()
155 tyAttr = fnDependNode.attribute(
"translateY")
156 tyPlug = OpenMaya.MPlug(dependNode, tyAttr)
157 ty = tyPlug.asDouble()
159 tzAttr = fnDependNode.attribute(
"translateZ")
160 tzPlug = OpenMaya.MPlug(dependNode, tzAttr)
161 tz = tzPlug.asDouble()
163 print "adding", tx, ty, tz,
"\n"
164 pointArrays[i].append(OpenMaya.MPoint(tx, ty, tz))
169 for i
in range(picked.length()):
170 self.__jMakeCurve(pointArrays[i])
173 def __jMakeCurve(self, cvs):
175 Make a degree 1 curve from the given CVs.
177 Note that in Python, a double underscore in front of a member name
178 make the method "private" to the class through name-mangling
181 knots = OpenMaya.MDoubleArray()
183 for i
in range(cvs.length()):
187 nullObj = OpenMaya.MObject()
188 curveFn = OpenMaya.MFnNurbsCurve()
189 curveFn.create(cvs, knots, deg, OpenMaya.MFnNurbsCurve.kOpen,
False,
False, nullObj)
194 return OpenMayaMPx.asMPxPtr(motionTrace())
199 syntax = OpenMaya.MSyntax()
200 syntax.addFlag(kStartFlag, kStartLongFlag, OpenMaya.MSyntax.kLong)
201 syntax.addFlag(kEndFlag, kEndLongFlag, OpenMaya.MSyntax.kLong)
202 syntax.addFlag(kByFlag, kByLongFlag, OpenMaya.MSyntax.kLong)
207 def initializePlugin(mobject):
208 mplugin = OpenMayaMPx.MFnPlugin(mobject,
"Autodesk",
"1.0",
"Any")
210 mplugin.registerCommand(kPluginCmdName, cmdCreator, syntaxCreator)
212 sys.stderr.write(
"Failed to register command: %s\n" % kPluginCmdName)
217 def uninitializePlugin(mobject):
218 mplugin = OpenMayaMPx.MFnPlugin(mobject)
220 mplugin.deregisterCommand(kPluginCmdName)
222 sys.stderr.write(
"Failed to unregister command: %s\n" % kPluginCmdName)