1 from __future__
import division
58 from builtins
import next
59 from builtins
import range
62 import maya.OpenMaya
as OpenMaya
63 import maya.OpenMayaMPx
as OpenMayaMPx
64 import maya.OpenMayaUI
as OpenMayaUI
65 import maya.OpenMayaRender
as OpenMayaRender
67 glRenderer = OpenMayaRender.MHardwareRenderer.theRenderer()
68 glFT = glRenderer.glFunctionTable()
70 kPluginCmdName =
"spNarrowPolyViewer"
73 kInitFlagLong =
"-init"
76 kResultsFlagLong =
"-results"
79 kClearFlagLong =
"-clear"
81 kToleranceFlag =
"-tol"
82 kToleranceFlagLong =
"-tolerance"
84 class narrowPolyViewer(OpenMayaMPx.MPx3dModelView):
86 OpenMayaMPx.MPx3dModelView.__init__(self)
91 self.fDrawManips =
True
92 self.fOldDisplayStyle = OpenMayaUI.M3dView.kWireFrame
93 self.fLightTest =
False
97 self.setMultipleDrawEnable(
True)
99 def multipleDrawPassCount(self):
100 return self.fCameraList.length() + 1
102 def setCameraList(self, cameraList):
103 setMultipleDrawEnable(
True)
104 self.fCameraList.clear()
106 for i
in range(cameraList.length()):
107 self.fCameraList.append(cameraList[i])
111 def removeAllCameras(self):
112 self.fCameraList.clear()
115 def getCameraHUDName(self):
117 self.getCamera(cameraPath)
121 hudName =
"spNarrowPolyViewer: " + cameraPath.partialPathName()
124 def setIsolateSelect(self, list):
125 self.setViewSelected(
True)
126 return self.setObjectsToView(list)
128 def setIsolateSelectOff(self):
129 return self.setViewSelected(
False)
131 def preMultipleDraw(self):
132 self.fCurrentPass = 0
133 self.fDrawManips =
False
139 self.getCamera(oldCamera)
141 self.fOldCamera = oldCamera
148 sList.getDagPath(0, dagPath)
156 if None == itMeshPolygon:
161 while not itMeshPolygon.isDone():
163 itMeshPolygon.getPoints(points, OpenMaya.MSpace.kWorld)
164 length = points.length()
167 for i
in range(length):
169 p1 = points[(i+1)%length]
170 p2 = points[(i+2)%length]
175 angle = v1.angle(v2) * 180.0 / math.pi
177 if math.fabs(angle - self.tol) < 0.0001
or angle < self.tol:
178 glFT.glBegin( OpenMayaRender.MGL_POLYGON )
179 glFT.glVertex3f(points[0].x, points[0].y, points[0].z)
180 glFT.glVertex3f(points[1].x, points[1].y, points[1].z)
181 glFT.glVertex3f(points[2].x, points[2].y, points[2].z)
183 glFT.glNormal3f(points[0].x, points[0].y, points[0].z)
184 glFT.glNormal3f(points[1].x, points[1].y, points[1].z)
185 glFT.glNormal3f(points[2].x, points[2].y, points[2].z)
187 glFT.glTexCoord3f(points[0].x, points[0].y, points[0].z)
188 glFT.glTexCoord3f(points[1].x, points[1].y, points[1].z)
189 glFT.glTexCoord3f(points[2].x, points[2].y, points[2].z)
199 def postMultipleDraw(self):
201 self.setCamera(self.fOldCamera)
202 self.fDrawManips =
True
203 self.updateViewingParameters()
205 sys.stderr.write(
"ERROR: spNarrowPolyViewer.postMultipleDraw\n")
208 def preMultipleDrawPass(self, index):
209 self.fCurrentPass = index
212 self.setDisplayAxis(
False)
213 self.setDisplayAxisAtOrigin(
False)
214 self.setDisplayCameraAnnotation(
False)
218 if self.fCurrentPass == 0:
219 self.getCamera(dagPath)
221 nCameras = self.fCameraList.length()
222 if self.fCurrentPass <= nCameras:
223 dagPath = self.fCameraList[self.fCurrentPass-1]
225 sys.stderr.write(
"ERROR: ...too many passes specified\n")
228 self.setCameraInDraw(dagPath)
230 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayEverything,
True)
232 if dagPath == self.fOldCamera:
233 self.fDrawManips =
True
234 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayGrid,
True)
236 self.setFogEnabled(
True)
238 self.setBackgroundFogEnabled(
False)
240 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayLights,
True)
241 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayCameras,
True)
242 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayIkHandles,
True)
243 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayDimensions,
True)
244 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplaySelectHandles,
True)
248 self.drawText(str, textPos, OpenMayaUI.M3dView.kLeft)
250 self.fDrawManips =
False
251 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayGrid,
False)
253 self.setFogEnabled(
True)
255 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayLights,
False)
256 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayCameras,
False)
257 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayIkHandles,
False)
258 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayDimensions,
False)
259 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplaySelectHandles,
False)
261 sys.stderr.write(
"ERROR: spNarrowPolyViewer.preMultipleDrawPass\n")
268 if ((self.fCurrentPass % 2) == 0):
269 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayNurbsSurfaces,
True );
270 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayNurbsCurves,
True );
272 self.updateViewingParameters()
274 def postMultipleDrawPass(self, index):
275 self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayEverything,
True)
277 def okForMultipleDraw(self, dagPath):
278 if not self.fDrawManips
and dagPath.hasFn(OpenMaya.MFn.kManipulator3D):
282 def multipleDrawPassCount(self):
283 return self.fCameraList.length() + 1
286 return "spNarrowPolyViewer";
291 class narrowPolyViewerCmd(OpenMayaMPx.MPxModelEditorCommand):
293 OpenMayaMPx.MPxModelEditorCommand.__init__(self)
296 def appendSyntax(self):
298 theSyntax = self._syntax()
299 theSyntax.addFlag(kInitFlag, kInitFlagLong)
300 theSyntax.addFlag(kResultsFlag, kResultsFlagLong)
301 theSyntax.addFlag(kClearFlag, kClearFlagLong)
302 theSyntax.addFlag(kToleranceFlag, kToleranceFlagLong, OpenMaya.MSyntax.kDouble)
305 sys.stderr.write(
"ERROR: creating syntax for model editor command: %s" % kPluginCmdName )
307 def doEditFlags(self):
309 user3dModelView = self.modelView()
311 if user3dModelView.viewType() == kPluginCmdName:
312 argData = self._parser()
314 if argData.isFlagSet(kInitFlag):
315 self.initTests(user3dModelView)
316 elif argData.isFlagSet(kResultsFlag):
317 self.testResults(user3dModelView)
318 elif argData.isFlagSet(kClearFlag):
319 self.clearResults(user3dModelView)
320 elif argData.isFlagSet(kToleranceFlag):
321 tol = argData.flagArgumentDouble(kToleranceFlag, 0)
322 user3dModelView.tol = tol
323 user3dModelView.refresh(
True,
True)
325 return OpenMaya.kUnknownParameter
327 sys.stderr.write(
"ERROR: in doEditFlags for model editor command: %s" % kPluginCmdName )
329 def initTests(self, view):
330 clearResults(self, view)
336 dagIterator =
OpenMaya.MItDag(OpenMaya.MItDag.kDepthFirst, OpenMaya.MFn.kCamera)
338 while not dagIterator.isDone():
340 dagIterator.getPath(cameraPath)
346 self.fCameraList.append(cameraPath)
351 view.setCameraList(self.fCameraList)
358 def testResults(self, view):
359 print(
"fCameraLIst.length() = %d " % (self.fCameraList.length(), ))
360 length = self.fCameraList.length()
362 def clearResults(self, view):
363 view.removeAllCameras()
364 self.fCameraList.clear()
369 return OpenMayaMPx.asMPxPtr( narrowPolyViewerCmd() )
372 return OpenMayaMPx.asMPxPtr( narrowPolyViewer() )
375 def initializePlugin(mobject):
376 mplugin = OpenMayaMPx.MFnPlugin(mobject)
378 mplugin.registerModelEditorCommand( kPluginCmdName, cmdCreator, viewerCreator)
380 sys.stderr.write(
"Failed to register model editor command: %s" % kPluginCmdName )
384 def uninitializePlugin(mobject):
385 mplugin = OpenMayaMPx.MFnPlugin(mobject)
387 mplugin.deregisterModelEditorCommand( kPluginCmdName )
389 sys.stderr.write(
"Failed to deregister model editor command: %s" % kPluginCmdName )