1   
  2   
  3   
  4   
  5   
  6   
  7   
  8   
  9   
 10   
 11   
 12   
 13   
 14   
 15   
 16   
 17   
 18   
 19   
 20   
 21   
 22   
 23   
 24   
 25   
 26   
 27  import sys 
 28  import math 
 29  import maya.OpenMaya as OpenMaya 
 30  import maya.OpenMayaMPx as OpenMayaMPx 
 31  import maya.OpenMayaUI as OpenMayaUI 
 32  import maya.OpenMayaRender as OpenMayaRender 
 33   
 34  glRenderer = OpenMayaRender.MHardwareRenderer.theRenderer() 
 35  glFT = glRenderer.glFunctionTable() 
 36   
 37  kPluginCmdName = "customGLView" 
 38   
 39  kInitFlag = "-in" 
 40  kInitFlagLong = "-init" 
 41   
 42  kResultsFlag = "-r" 
 43  kResultsFlagLong = "-results" 
 44   
 45  kClearFlag = "-cl" 
 46  kClearFlagLong = "-clear" 
 47   
 48  kToleranceFlag = "-tol" 
 49  kToleranceFlagLong = "-tolerance" 
 50   
 53                  OpenMayaMPx.MPx3dModelView.__init__(self) 
 54   
 55                  self.fOldCamera = OpenMaya.MDagPath() 
 56                  self.fCameraList = OpenMaya.MDagPathArray() 
 57                  self.fCurrentPass = 0 
 58                  self.fDrawManips = True 
 59                  self.fOldDisplayStyle = OpenMayaUI.M3dView.kWireFrame 
 60                  self.fLightTest = False 
 61                  self.fListList = OpenMaya.MDagPathArray() 
 62                  self.tol = 10.0 
 63   
 64                  self.setMultipleDrawEnable(True) 
  65   
 67                  return self.fCameraList.length() + 1 
  68   
 70                  setMultipleDrawEnable(True) 
 71                  self.fCameraList.clear() 
 72   
 73                  for i in range(cameraList.length()): 
 74                          self.fCameraList.append(cameraList[i]) 
 75   
 76                  self.refresh() 
  77   
 79                  self.fCameraList.clear() 
 80                  self.refresh() 
  81   
 83                  cameraPath = OpenMaya.MDagPath() 
 84                  self.getCamera(cameraPath) 
 85   
 86                  cameraPath.pop() 
 87   
 88                  hudName = "spNarrowPolyViewer: " + cameraPath.partialPathName() 
 89                  return hudName 
  90   
 92                  self.setViewSelected(True) 
 93                  return self.setObjectsToView(list) 
  94   
 96                  return self.setViewSelected(False) 
  97   
 99                  self.fCurrentPass = 0 
100                  self.fDrawManips = False 
101   
102                  self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayEverything, False) 
103   
104                  self.setDrawAdornments(False) 
105                  self.setDisplayHUD(False) 
106                  self.setDisplayAxis(False) 
107                  self.setDisplayAxisAtOrigin(False) 
108                  self.setDisplayCameraAnnotation(False) 
109                  self.setViewSelected(True) 
110   
111                  self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayGrid, True) 
112   
113                  ''' 
114   
115                  dagPath = OpenMaya.MDagPath() 
116                  try: 
117                          oldCamera = OpenMaya.MDagPath() 
118                          self.getCamera(oldCamera) 
119   
120                          self.fOldCamera = oldCamera 
121   
122                          #if self.isColorIndexMode(): 
123                          #       self.setColorIndexMode(False) 
124   
125                          displayHUD(False) 
126   
127                          sList = OpenMaya.MSelectionList() 
128                          OpenMaya.MGlobal.getActiveSelectionList(sList) 
129   
130                          sList.getDagPath(0, dagPath) 
131                  except: 
132                          # sys.stderr.write("ERROR: spNarrowPolyViewer.preMultipleDraw b\n") 
133                          pass 
134   
135                  try: 
136                          itMeshPolygon = OpenMaya.MItMeshPolygon(dagPath, OpenMaya.cvar.MObject_kNullObj) 
137   
138                          if None == itMeshPolygon: 
139                                  return; 
140   
141                          self.beginGL() 
142                          while not itMeshPolygon.isDone(): 
143                                  points = OpenMaya.MPointArray() 
144                                  itMeshPolygon.getPoints(points, OpenMaya.MSpace.kWorld) 
145                                  length = points.length() 
146   
147                                  if length == 3: 
148                                          for i in range(length): 
149                                                  p = points[i] 
150                                                  p1 = points[(i+1)%length] 
151                                                  p2 = points[(i+2)%length] 
152   
153                                                  v1 = OpenMaya.MVector(p1 - p) 
154                                                  v2 = OpenMaya.MVector(p2 - p) 
155   
156                                                  angle = v1.angle(v2) * 180.0 / math.pi 
157   
158                                                  if math.fabs(angle - self.tol) < 0.0001 or angle < self.tol: 
159                                                          glFT.glBegin( OpenMayaRender.MGL_POLYGON ) 
160                                                          glFT.glVertex3f(points[0].x, points[0].y, points[0].z) 
161                                                          glFT.glVertex3f(points[1].x, points[1].y, points[1].z) 
162                                                          glFT.glVertex3f(points[2].x, points[2].y, points[2].z) 
163   
164                                                          glFT.glNormal3f(points[0].x, points[0].y, points[0].z) 
165                                                          glFT.glNormal3f(points[1].x, points[1].y, points[1].z) 
166                                                          glFT.glNormal3f(points[2].x, points[2].y, points[2].z) 
167   
168                                                          glFT.glTexCoord3f(points[0].x, points[0].y, points[0].z) 
169                                                          glFT.glTexCoord3f(points[1].x, points[1].y, points[1].z) 
170                                                          glFT.glTexCoord3f(points[2].x, points[2].y, points[2].z) 
171                                                          glFT.glEnd() 
172   
173                                  itMeshPolygon.next() 
174                          self.endGL() 
175                  except: 
176                          #sys.stderr.write("ERROR: spNarrowPolyViewer.preMultipleDraw c\n") 
177                          pass 
178                  ''' 
 179   
181                  try: 
182                           
183                          self.fDrawManips = False 
184                           
185                  except: 
186                          sys.stderr.write("ERROR: spNarrowPolyViewer.postMultipleDraw\n") 
187                          raise 
 188   
190                  self.fCurrentPass = index 
191                  ''' 
192                  try: 
193                          self.setDrawAdornments(False) 
194                          self.setDisplayHUD(False) 
195                          self.setDisplayAxis(False) 
196                          self.setDisplayAxisAtOrigin(False) 
197                          self.setDisplayCameraAnnotation(False) 
198                          self.setViewSelected(True) 
199   
200                          dagPath = OpenMaya.MDagPath() 
201   
202                          if self.fCurrentPass == 0: 
203                                  self.getCamera(dagPath) 
204                          else: 
205                                  nCameras = self.fCameraList.length() 
206                                  if self.fCurrentPass <= nCameras: 
207                                          dagPath = self.fCameraList[self.fCurrentPass-1] 
208                                  else: 
209                                          sys.stderr.write("ERROR: ...too many passes specified\n") 
210                                          return 
211   
212                          self.setCameraInDraw(dagPath) 
213   
214                          self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayEverything, False) 
215   
216                          if dagPath == self.fOldCamera: 
217                                  self.fDrawManips = False 
218                                  self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayGrid, True) 
219   
220                                  self.setFogEnabled(False) 
221   
222                                  self.setBackgroundFogEnabled(False) 
223   
224                                  self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayLights, False) 
225                                  self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayCameras, False) 
226                                  self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayIkHandles, False) 
227                                  self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayDimensions, False) 
228                                  self.setObjectDisplay(OpenMayaUI.M3dView.kDisplaySelectHandles, False) 
229   
230                                  textPos = OpenMaya.MPoint(0.0, 0.0, 0.0) 
231                                  str = "Main View" 
232                                  self.drawText(str, textPos, OpenMayaUI.M3dView.kLeft) 
233                          else: 
234                                  self.fDrawManips = False 
235                                  self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayGrid, True) 
236   
237                                  self.setFogEnabled(False) 
238   
239                                  self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayLights, False) 
240                                  self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayCameras, False) 
241                                  self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayIkHandles, False) 
242                                  self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayDimensions, False) 
243                                  self.setObjectDisplay(OpenMayaUI.M3dView.kDisplaySelectHandles, False) 
244                  except: 
245                          sys.stderr.write("ERROR: spNarrowPolyViewer.preMultipleDrawPass\n") 
246                          raise 
247   
248                  # note do not have light test in here 
249   
250                  # self.setLightingMode(OpenMayaUI.kLightDefault) 
251   
252                  if ((self.fCurrentPass % 2) == 0): 
253                          self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayNurbsSurfaces, True ); 
254                          self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayNurbsCurves, True ); 
255   
256                  #self.updateViewingParameters() 
257                  ''' 
 258   
259 -        def postMultipleDrawPass(self, index): 
 260                  self.setObjectDisplay(OpenMayaUI.M3dView.kDisplayEverything, False) 
 261   
266   
268                  return self.fCameraList.length() + 1 
 269   
 272   
273   
274   
275   
278                  OpenMayaMPx.MPxModelEditorCommand.__init__(self) 
279                  self.fCameraList = OpenMaya.MDagPathArray() 
 280   
291   
293                  try: 
294                          user3dModelView = self.modelView() 
295   
296                          if user3dModelView.viewType() == kPluginCmdName: 
297                                  argData = self._parser() 
298   
299                                  if argData.isFlagSet(kInitFlag): 
300                                          self.initTests(user3dModelView) 
301                                  elif argData.isFlagSet(kResultsFlag): 
302                                          self.testResults(user3dModelView) 
303                                  elif argData.isFlagSet(kClearFlag): 
304                                          self.clearResults(user3dModelView) 
305                                  elif argData.isFlagSet(kToleranceFlag): 
306                                          tol = argData.flagArgumentDouble(kToleranceFlag, 0) 
307                                          user3dModelView.tol = tol 
308                                          user3dModelView.refresh(True, True) 
309                                  else: 
310                                          return OpenMaya.kUnknownParameter 
311                  except: 
312                          sys.stderr.write( "ERROR: in doEditFlags for model editor command: %s" % kPluginCmdName ) 
 313   
315                  clearResults(self, view) 
316   
317                   
318                   
319                   
320                  cameraPath = OpenMaya.MDagPath() 
321                  dagIterator = OpenMaya.MItDag(OpenMaya.MItDag.kDepthFirst, OpenMaya.MFn.kCamera) 
322   
323                  while not dagIterator.isDone(): 
324                          try: 
325                                  dagIterator.getPath(cameraPath) 
326                                  camera = OpenMaya.MFnCamera(cameraPath) 
327                          except: 
328                                  continue 
329   
330                          OpenMaya.MGlobal.displayInfo(camera.fullPathName()) 
331                          self.fCameraList.append(cameraPath) 
332   
333                          dagIterator.next() 
334   
335                  try: 
336                          view.setCameraList(self.fCameraList) 
337                  except: 
338                          OpenMaya.MGlobal.displayError("Could not set list of cameras\n") 
339                          raise 
340   
341                  view.refresh() 
 342   
344                  print "fCameraLIst.length() = %d " % (self.fCameraList.length(), ) 
345                  length = self.fCameraList.length() 
 346   
 350   
351   
352   
355   
358   
359   
361      mplugin = OpenMayaMPx.MFnPlugin(mpluginObj) 
362      mplugin.registerModelEditorCommand( kPluginCmdName, cmdCreator, viewerCreator) 
 363   
364   
365   
367      mplugin = OpenMayaMPx.MFnPlugin(mpluginObj) 
368      mplugin.deregisterModelEditorCommand( kPluginCmdName ) 
 369       
370   
371 -def test(customCamera=False): 
 372          import maya 
373          import slumMaya 
374   
375   
376          window  = maya.cmds.window() 
377          form    = maya.cmds.formLayout() 
378          editor  = maya.cmds.customGLView() 
379   
380          maya.cmds.formLayout(form,edit=True,attachForm=(editor, "top",          0)) 
381          maya.cmds.formLayout(form,edit=True,attachForm=(editor, "bottom",       0)) 
382          maya.cmds.formLayout(form,edit=True,attachForm=(editor, "right",        0)) 
383          maya.cmds.formLayout(form,edit=True,attachForm=(editor, "left",         0)) 
384   
385          if customCamera: 
386                  camera = maya.cmds.camera(centerOfInterest=2.450351, position=(1.535314,1.135712,1.535314), rotation=(-27.612504,45,0), worldUp=(-0.1290301,0.3488592,-0.1290301)) 
387                  maya.cmds.customGLView(editor,edit=True,camera=camera[0]) 
388                  maya.cmds.currentTime(10.0,edit=True) 
389                  maya.cmds.customGLView(editor,edit=True,i=True) 
390                  maya.cmds.refresh() 
391                  maya.cmds.customGLView(editor,edit=True,r=True) 
392   
393          maya.cmds.showWindow(window) 
 394