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