59 import maya.OpenMaya
as OpenMaya
60 import maya.OpenMayaMPx
as OpenMayaMPx
61 import maya.OpenMayaUI
as OpenMayaUI
62 import maya.OpenMayaRender
as OpenMayaRender
64 glRenderer = OpenMayaRender.MHardwareRenderer.theRenderer()
65 glFT = glRenderer.glFunctionTable()
67 kPluginCmdName =
"spNarrowPolyViewer"
70 kInitFlagLong =
"-init"
73 kResultsFlagLong =
"-results"
76 kClearFlagLong =
"-clear"
78 kToleranceFlag =
"-tol"
79 kToleranceFlagLong =
"-tolerance"
81 class narrowPolyViewer(OpenMayaMPx.MPx3dModelView):
83 OpenMayaMPx.MPx3dModelView.__init__(self)
88 self.fDrawManips =
True
89 self.fOldDisplayStyle = OpenMayaUI.M3dView.kWireFrame
90 self.fLightTest =
False
94 self.setMultipleDrawEnable(
True)
96 def multipleDrawPassCount(self):
97 return self.fCameraList.length() + 1
99 def setCameraList(self, cameraList):
100 setMultipleDrawEnable(
True)
101 self.fCameraList.clear()
103 for i
in range(cameraList.length()):
104 self.fCameraList.append(cameraList[i])
108 def removeAllCameras(self):
109 self.fCameraList.clear()
112 def getCameraHUDName(self):
114 self.getCamera(cameraPath)
118 hudName =
"spNarrowPolyViewer: " + cameraPath.partialPathName()
121 def setIsolateSelect(self, list):
122 self.setViewSelected(
True)
123 return self.setObjectsToView(list)
125 def setIsolateSelectOff(self):
126 return self.setViewSelected(
False)
128 def preMultipleDraw(self):
129 self.fCurrentPass = 0
130 self.fDrawManips =
False
136 self.getCamera(oldCamera)
138 self.fOldCamera = oldCamera
145 sList.getDagPath(0, dagPath)
153 if None == itMeshPolygon:
158 while not itMeshPolygon.isDone():
160 itMeshPolygon.getPoints(points, OpenMaya.MSpace.kWorld)
161 length = points.length()
164 for i
in range(length):
166 p1 = points[(i+1)%length]
167 p2 = points[(i+2)%length]
172 angle = v1.angle(v2) * 180.0 / math.pi
174 if math.fabs(angle - self.tol) < 0.0001
or angle < self.tol:
175 glFT.glBegin( OpenMayaRender.MGL_POLYGON )
176 glFT.glVertex3f(points[0].x, points[0].y, points[0].z)
177 glFT.glVertex3f(points[1].x, points[1].y, points[1].z)
178 glFT.glVertex3f(points[2].x, points[2].y, points[2].z)
180 glFT.glNormal3f(points[0].x, points[0].y, points[0].z)
181 glFT.glNormal3f(points[1].x, points[1].y, points[1].z)
182 glFT.glNormal3f(points[2].x, points[2].y, points[2].z)
184 glFT.glTexCoord3f(points[0].x, points[0].y, points[0].z)
185 glFT.glTexCoord3f(points[1].x, points[1].y, points[1].z)
186 glFT.glTexCoord3f(points[2].x, points[2].y, points[2].z)
196 def postMultipleDraw(self):
198 self.setCamera(self.fOldCamera)
199 self.fDrawManips =
True
200 self.updateViewingParameters()
202 sys.stderr.write(
"ERROR: spNarrowPolyViewer.postMultipleDraw\n")
205 def preMultipleDrawPass(self, index):
206 self.fCurrentPass = index
209 self.setDisplayAxis(
False)
210 self.setDisplayAxisAtOrigin(
False)
211 self.setDisplayCameraAnnotation(
False)
215 if self.fCurrentPass == 0:
216 self.getCamera(dagPath)
218 nCameras = self.fCameraList.length()
219 if self.fCurrentPass <= nCameras:
220 dagPath = self.fCameraList[self.fCurrentPass-1]
222 sys.stderr.write(
"ERROR: ...too many passes specified\n")
225 self.setCameraInDraw(dagPath)
227 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayEverything,
True)
229 if dagPath == self.fOldCamera:
230 self.fDrawManips =
True
231 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayGrid,
True)
233 self.setFogEnabled(
True)
235 self.setBackgroundFogEnabled(
False)
237 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayLights,
True)
238 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayCameras,
True)
239 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayIkHandles,
True)
240 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayDimensions,
True)
241 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplaySelectHandles,
True)
245 self.drawText(str, textPos, OpenMayaUI.M3dView.kLeft)
247 self.fDrawManips =
False
248 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayGrid,
False)
250 self.setFogEnabled(
True)
252 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayLights,
False)
253 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayCameras,
False)
254 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayIkHandles,
False)
255 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayDimensions,
False)
256 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplaySelectHandles,
False)
258 sys.stderr.write(
"ERROR: spNarrowPolyViewer.preMultipleDrawPass\n")
265 if ((self.fCurrentPass % 2) == 0):
266 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayNurbsSurfaces,
True );
267 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayNurbsCurves,
True );
269 self.updateViewingParameters()
271 def postMultipleDrawPass(self, index):
272 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayEverything,
True)
274 def okForMultipleDraw(self, dagPath):
275 if not self.fDrawManips
and dagPath.hasFn(OpenMaya.MFn.kManipulator3D):
279 def multipleDrawPassCount(self):
280 return self.fCameraList.length() + 1
283 return "spNarrowPolyViewer";
288 class narrowPolyViewerCmd(OpenMayaMPx.MPxModelEditorCommand):
290 OpenMayaMPx.MPxModelEditorCommand.__init__(self)
293 def appendSyntax(self):
295 theSyntax = self._syntax()
296 theSyntax.addFlag(kInitFlag, kInitFlagLong)
297 theSyntax.addFlag(kResultsFlag, kResultsFlagLong)
298 theSyntax.addFlag(kClearFlag, kClearFlagLong)
299 theSyntax.addFlag(kToleranceFlag, kToleranceFlagLong, OpenMaya.MSyntax.kDouble)
302 sys.stderr.write(
"ERROR: creating syntax for model editor command: %s" % kPluginCmdName )
304 def doEditFlags(self):
306 user3dModelView = self.modelView()
308 if user3dModelView.viewType() == kPluginCmdName:
309 argData = self._parser()
311 if argData.isFlagSet(kInitFlag):
312 self.initTests(user3dModelView)
313 elif argData.isFlagSet(kResultsFlag):
314 self.testResults(user3dModelView)
315 elif argData.isFlagSet(kClearFlag):
316 self.clearResults(user3dModelView)
317 elif argData.isFlagSet(kToleranceFlag):
318 tol = argData.flagArgumentDouble(kToleranceFlag, 0)
319 user3dModelView.tol = tol
320 user3dModelView.refresh(
True,
True)
322 return OpenMaya.kUnknownParameter
324 sys.stderr.write(
"ERROR: in doEditFlags for model editor command: %s" % kPluginCmdName )
326 def initTests(self, view):
327 clearResults(self, view)
333 dagIterator =
OpenMaya.MItDag(OpenMaya.MItDag.kDepthFirst, OpenMaya.MFn.kCamera)
335 while not dagIterator.isDone():
337 dagIterator.getPath(cameraPath)
343 self.fCameraList.append(cameraPath)
348 view.setCameraList(self.fCameraList)
355 def testResults(self, view):
356 print "fCameraLIst.length() = %d " % (self.fCameraList.length(), )
357 length = self.fCameraList.length()
359 def clearResults(self, view):
360 view.removeAllCameras()
361 self.fCameraList.clear()
366 return OpenMayaMPx.asMPxPtr( narrowPolyViewerCmd() )
369 return OpenMayaMPx.asMPxPtr( narrowPolyViewer() )
372 def initializePlugin(mobject):
373 mplugin = OpenMayaMPx.MFnPlugin(mobject)
375 mplugin.registerModelEditorCommand( kPluginCmdName, cmdCreator, viewerCreator)
377 sys.stderr.write(
"Failed to register model editor command: %s" % kPluginCmdName )
381 def uninitializePlugin(mobject):
382 mplugin = OpenMayaMPx.MFnPlugin(mobject)
384 mplugin.deregisterModelEditorCommand( kPluginCmdName )
386 sys.stderr.write(
"Failed to deregister model editor command: %s" % kPluginCmdName )