2 import maya.api.OpenMaya
as om
3 import maya.api.OpenMayaRender
as omr
4 import maya.api.OpenMayaUI
as omui
8 The presence of this function tells Maya that the plugin produces, and
9 expects to be passed, objects created using the Maya Python API 2.0.
15 class ObjectSetSceneRender(omr.MSceneRender):
16 def __init__(self, name, setName, clearMask):
17 omr.MSceneRender.__init__(self, name)
18 self.mSetName = setName
19 self.mClearMask = clearMask
21 self.mExcludeFilters = [ ]
23 def objectSetOverride(self):
25 Return filtered list of items to draw
28 list = om.MSelectionList()
29 list.add( self.mSetName )
31 obj = list.getDependNode( 0 )
33 set = om.MFnSet( obj )
34 self.mFilterSet = set.getMembers(
True )
36 return self.mFilterSet
39 def pluginDisplayFilterExclusions(self):
41 The list of displayFilters to exclude
43 return self.mExcludeFilters
45 def clearOperation(self):
46 self.mClearOperation.setMask( self.mClearMask )
48 self.mClearOperation.setClearColor( [ 0.0, 0.2, 0.8, 1.0 ] )
49 self.mClearOperation.setClearColor2( [ 0.5, 0.4, 0.1, 1.0 ] )
50 self.mClearOperation.setClearGradient(
True )
52 return self.mClearOperation
54 class viewObjectSetOverride(omr.MRenderOverride):
55 """Render override which draws three sets of objects in multiple "passes"
56 (MSceneRenders) by using a filtered draw for each pass.
58 Additionaly, as a demonstration of how to filter out specific types of
59 plugin geometry from each MSceneRender "pass":
61 "Render Set 1" excludes nodes of type "apiMesh" by using the displayFilter
62 named "apiMeshFilter", which is registered by the devkit "apiMeshShape"
65 "Render Set 2" excludes nodes of type "footPrint_py" by using the
66 displayFilter named "footPrintFilter_py", which is registered by the devkit
67 "py2FootPrintNode.py" Python plug-in.
69 "Render Set 3" excludes nodes of both the "apiMesh" and "footPrint_py"
74 def __init__(self, name ):
75 omr.MRenderOverride.__init__(self, name)
76 self.mUIName =
"(PY) Multi-pass filtered object-set renderer"
79 render1Name =
"Render Set 1"
80 render2Name =
"Render Set 2"
81 render3Name =
"Render Set 3"
87 presentName =
"Present Target"
90 self.mRenderSet1 = ObjectSetSceneRender( render1Name, set1Name, omr.MClearOperation.kClearAll )
91 exclusions1 = self.mRenderSet1.pluginDisplayFilterExclusions()
92 exclusions1.append(
"apiMeshFilter" )
95 self.mRenderSet2 = ObjectSetSceneRender( render2Name, set2Name, omr.MClearOperation.kClearNone )
96 exclusions2 = self.mRenderSet2.pluginDisplayFilterExclusions()
97 exclusions2.append(
"footPrintFilter_py" )
100 self.mRenderSet3 = ObjectSetSceneRender( render3Name, set3Name, omr.MClearOperation.kClearNone )
101 exclusions3 = self.mRenderSet3.pluginDisplayFilterExclusions()
102 exclusions3.append(
"apiMeshFilter" )
103 exclusions3.append(
"footPrintFilter_py" )
106 self.mPresentTarget = omr.MPresentTarget( presentName )
109 self.mRenderSet1 =
None
110 self.mRenderSet2 =
None
111 self.mRenderSet3 =
None
112 self.mPresentTarget =
None
114 def supportedDrawAPIs(self):
116 return ( omr.MRenderer.kOpenGL | omr.MRenderer.kOpenGLCoreProfile | omr.MRenderer.kDirectX11 )
118 def startOperationIterator(self):
122 def renderOperation(self):
123 match self.mOperation:
125 return self.mRenderSet1
127 return self.mRenderSet2
129 return self.mRenderSet3
131 return self.mPresentTarget
135 def nextRenderOperation(self):
137 return self.mOperation < 4
143 viewObjectSetOverrideInstance =
None
145 def initializePlugin(obj):
149 plugin = om.MFnPlugin(obj,
"Autodesk",
"1.0",
"Any")
152 global viewObjectSetOverrideInstance
153 viewObjectSetOverrideInstance = viewObjectSetOverride(
"py_viewObjectSetOverride")
154 omr.MRenderer.registerOverride( viewObjectSetOverrideInstance )
156 sys.stderr.write(
"registerOverride")
160 def uninitializePlugin(obj):
162 Deregister an override
164 plugin = om.MFnPlugin(obj)
167 global viewObjectSetOverrideInstance
168 if not viewObjectSetOverrideInstance
is None:
169 omr.MRenderer.deregisterOverride( viewObjectSetOverrideInstance )
170 viewOjectSetOverrideInstance =
None
173 sys.stderr.write(
"deregisterOverride")