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 )