1 import maya.api.OpenMaya 
as om
 
    2 import maya.api.OpenMayaAnim 
as oma
 
    3 import maya.api.OpenMayaUI 
as omui
 
    4 import maya.api.OpenMayaRender 
as omr
 
    6 import maya.cmds 
as cmds
 
   16 def iconFunc( drawMgr, userData ):
 
   17     drawMgr.beginDrawable()
 
   19     path = mel.eval(
'getenv("MAYA_LOCATION")') + 
"/icons/mayaico.png" 
   20     drawMgr.icon( om.MPoint(0.0, 0.0, 3.0), path, 3.14 )
 
   26 def textFunc( drawMgr, userData ):
 
   27     drawMgr.beginDrawable()
 
   29     drawMgr.text( om.MPoint(200.1, 200.2, 0.3), 
"left", omr.MUIDrawManager.kLeft, [200,200])
 
   30     drawMgr.setColor( om.MColor( (1.0, 0.0, 0.0, 1.0) ) )
 
   31     drawMgr.text( om.MPoint(200.1, 150.2, 0.3), 
"center", omr.MUIDrawManager.kCenter, [200,200])
 
   32     drawMgr.setColor( om.MColor( (0.0, 1.0, 0.0, 1.0) ) )
 
   33     drawMgr.text( om.MPoint(200.1, 200.2, 0.3), 
"right", omr.MUIDrawManager.kRight, [200,200])
 
   37     drawMgr.setFontSize( omr.MUIDrawManager.kSmallFontSize )
 
   38     drawMgr.setColor( om.MColor( (0.0, 0.0, 1.0, 1.0) ) )
 
   39     drawMgr.text( om.MPoint(700.1, 50.2, 0.3), 
"small", omr.MUIDrawManager.kLeft, [200,200], om.MColor((0., 1., 1., 1.)), 
False )
 
   46 def rectFunc( drawMgr, userData ):
 
   47     drawMgr.beginDrawable()
 
   49     drawMgr.setColor( om.MColor( (1.0, 0.0, 1.0, 1.0) ) )
 
   50     drawMgr.rect2d( om.MPoint(50, 150, 0.3), om.MVector(0.0,1.0,0.0), 100, 300, 
False )
 
   52     drawMgr.setColor( om.MColor( (0.0, 1.0, 1.0, 1.0) ) )
 
   53     drawMgr.rect2d( om.MPoint(450.1, 500.2, 0.3), om.MVector(-0.5,0.866025,0.0), 100, 300, 
True )
 
   59 def arcFunc( drawMgr, userData ):
 
   60     drawMgr.beginDrawable()
 
   62     drawMgr.setColor( om.MColor( (1.0, 1.0, 1.0, 1.0) ) )
 
   63     drawMgr.arc2d( om.MPoint(750.1, 500.2, 0.3), om.MVector(0.866025, 0.5, 0.0), om.MVector(-0.5,0.866025,0.0), 100, 
False )
 
   65     drawMgr.setColor( om.MColor( (1.0, 1.0, 0.5, 1.0) ) )
 
   66     drawMgr.arc2d( om.MPoint(750.1, 500.2, 0.3), om.MVector(-0.866025, -0.5, 0.0), om.MVector(0.5,-0.866025,0.0), 100, 
True )
 
   73 def circleFunc( drawMgr, userData ):
 
   74     drawMgr.beginDrawable()
 
   76     drawMgr.setColor( om.MColor( (0.5, 1.0, 1.0, 1.0) ) )
 
   77     drawMgr.circle2d( om.MPoint(500.1, 200.2, 0.3), 75, 
False )
 
   78     drawMgr.setColor( om.MColor( (0.5, 1.0, 0.5, 1.0) ) )
 
   79     drawMgr.circle2d( om.MPoint(675.1, 675.2, 0.3), 50, 
True )
 
   84 def otherFunc( drawMgr, userData ):
 
   92     cmds.file(force=1,new=1)
 
   93     myCyl = cmds.polyCylinder()
 
   94     cmds.setAttr( 
"pCylinder1.s",1, 3.3522764559816802, 1, type=
"double3"  )
 
   96     cmds.playbackOptions(min=0, ast=0, max=30, aet=30)
 
   98     cmds.setAttr( 
'pCylinder1.tz', 12 )
 
   99     cmds.setAttr( 
'pCylinder1.rx', 30 )
 
  100     cmds.setKeyframe( [
'pCylinder1.tz',
'pCylinder1.rx'])
 
  103     cmds.setAttr( 
'pCylinder1.tz', 0 )
 
  104     cmds.setAttr( 
'pCylinder1.rx', 0 )
 
  105     cmds.setKeyframe( [
'pCylinder1.tz',
'pCylinder1.rx'])
 
  108     cmds.setAttr( 
'pCylinder1.tz', -12 )
 
  109     cmds.setAttr( 
'pCylinder1.rx', -30 )
 
  110     cmds.setKeyframe( [
'pCylinder1.tz',
'pCylinder1.rx'])
 
  112 def createGraphEditor():
 
  115     geName = 
'myGraphEditorGraphEd';
 
  116     if( cmds.scriptedPanel(
'myGraphEditor', exists=1) ):
 
  117         cmds.deleteUI(
'myGraphEditor')
 
  119     geWindow = cmds.window(width=1200,height=800)
 
  120     gePane = cmds.paneLayout(parent=geWindow)
 
  121     cmds.scriptedPanel(
'myGraphEditor',type=
'graphEditor', parent=gePane,tearOff=
False)
 
  123     cmds.showWindow(geWindow)
 
  124     return [geName, geWindow]
 
  126 def maya_useNewAPI():
 
  129 def initializePlugin( mobject ):
 
  132         this method is called when the plug-in is loaded into Maya.  It  
  133         registers all of the services that this plug-in provides with  
  137         mobject - a handle to the plug-in object (use MFnPlugin to access it) 
  140     [geName, geWindow] = createGraphEditor()
 
  141     geCanvas = omui.MPanelCanvas(geName)
 
  143     myCanvas = [geCanvas, geName, geWindow]
 
  144     geCanvas.setAutoRefresh( 
False )
 
  174     layers = [ omui.MPanelCanvas.kGraphEditorBackground+55
 
  175              , omui.MPanelCanvas.kGraphEditorGrid+55
 
  176              , omui.MPanelCanvas.kGraphEditorAxisLabels+55
 
  177              , omui.MPanelCanvas.kGraphEditorCurves+55
 
  178              , omui.MPanelCanvas.kGraphEditorCurveNames+55
 
  179              , omui.MPanelCanvas.kGraphEditorTimeMarker+55
 
  180              , omui.MPanelCanvas.kGraphEditorTimeMarker+55
 
  181              , omui.MPanelCanvas.kGraphEditorRetimeToolText+55
 
  184     props = omui.MDrawProperties()
 
  185     props.color = om.MColor( [0.2, 0.8, 0.6])
 
  186     props.lineWidth = 0.5
 
  187     props.lineStyle = omr.MUIDrawManager.kDotted
 
  188     props.pointSize = 12.0
 
  192     half_diags = [300-30*n 
for n 
in range(0,8)]
 
  196     reds = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0]
 
  197     greens = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0]
 
  198     blues = [0.0, 0.0, 1.0, 1.0, 0.25, 0.25, 0.75, 0.75]
 
  203     starts = [6*n 
for n 
in range(0,8)]
 
  217     for r,g,b,h 
in zip(reds, greens, blues, half_diags):
 
  218         xArray += [cx-h, cx, cx+h, cx+h, cx, cx-h]
 
  219         yArray += [cy, cy-h, cy, cy, cy+h, cy]
 
  220         cArray += [ [r*.25, g*.25, b, a], [r*.50, g*.50, b, a], [r*.75, g*.75, b, a], [r*.75, g*.75, b, a],  [r, g, b, a],  [r*.25, g*.25, b, a]]
 
  222     floatId = geCanvas.createFloatVertexBuffer( xArray, yArray, cArray )
 
  226     for s,l 
in zip(starts, layers):
 
  227         p = geCanvas.createPrimitive( omr.MGeometry.kTriangles, floatId, s, 6, props )
 
  228         geCanvas.addPrimitive( p, l )
 
  234     layers = [ omui.MPanelCanvas.kGraphEditorCurves+55
 
  235              , omui.MPanelCanvas.kGraphEditorCurves+55
 
  236              , omui.MPanelCanvas.kGraphEditorAxisLabels+55
 
  237              , omui.MPanelCanvas.kGraphEditorAxisLabels+55
 
  238              , omui.MPanelCanvas.kGraphEditorCurveNames+55
 
  239              , omui.MPanelCanvas.kGraphEditorTimeMarker+55
 
  241     patterns = [omr.MUIDrawManager.kDotted, omr.MUIDrawManager.kShortDotted, omr.MUIDrawManager.kDashed, omr.MUIDrawManager.kShortDashed, omr.MUIDrawManager.kSolid, omr.MUIDrawManager.kDotted]
 
  245     half_sides = half_diags = [300-30*n 
for n 
in range(0,6)]
 
  249     reds = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0]
 
  250     greens = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0]
 
  251     blues = [0.5, 0.5, 1.0, 1.0, 0.25, 0.25]
 
  256     starts = [5*n 
for n 
in range(0,6)]
 
  268     for r,g,b,h 
in zip(reds, greens, blues, half_sides):
 
  269         xArray += [cx-h, cx+h, cx+h, cx-h, cx-h]
 
  270         yArray += [cy-h, cy-h, cy+h, cy+h, cy-h]
 
  271         cArray += [ [r*.40, g*.40, b, a], [r*.50, g*.50, b, a], [r*.60, g*.60, b, a], [r*.75, g*.75, b, a],  [r, g, b, a]]
 
  273     floatId = geCanvas.createFloatVertexBuffer( xArray, yArray, cArray )
 
  277     for s,l,p 
in zip(starts, layers, patterns):
 
  279         id = geCanvas.createPrimitive( omr.MGeometry.kLineStrip, floatId, s, 5, props )
 
  280         geCanvas.addPrimitive( id, l )
 
  301     layers = [ omui.MPanelCanvas.kGraphEditorAxisLabels+55
 
  302              , omui.MPanelCanvas.kGraphEditorCurves+55
 
  303              , omui.MPanelCanvas.kGraphEditorCurveNames+55
 
  304              , omui.MPanelCanvas.kGraphEditorTimeMarker+55
 
  307     props = omui.MDrawProperties()
 
  308     props.color = om.MColor( [0.2, 0.8, 0.6])
 
  309     props.lineWidth = 0.5
 
  310     props.lineStyle = omr.MUIDrawManager.kDotted
 
  311     props.pointSize = 12.0
 
  315     half_diags_t = [6-n 
for n 
in range(0,4)]
 
  316     half_diags_y = [40, 36, 20, 18]
 
  320     reds = [1.0, 0.0, 1.0, 0.0]
 
  321     greens = [0.0, 1.0, 0.0, 1.0]
 
  322     blues = [0.25, 0.25, 0.75, 0.75]
 
  327     starts = [6*n 
for n 
in range(0,4)]
 
  331     cxArray = [6, 6, 16, 16]
 
  340     for cx, r,g,b,ht, hy 
in zip(cxArray, reds, greens, blues, half_diags_t, half_diags_y):
 
  341         tArray += [om.MTime(t) 
for t 
in [cx-ht, cx, cx+ht, cx+ht, cx, cx-ht]]
 
  342         yArray += [0, -hy, 0, 0, hy, 0]
 
  343         cArray += [ [r*.25, g*.25, b, a], [r*.50, g*.50, b, a], [r*.75, g*.75, b, a], [r*.75, g*.75, b, a],  [r, g, b, a],  [r*.25, g*.25, b, a]]
 
  345     timeId = geCanvas.createTimeVertexBuffer( tArray, yArray, cArray )
 
  349     for s,l 
in zip(starts, layers):
 
  350         p = geCanvas.createPrimitive( omr.MGeometry.kTriangles, timeId, s, 6, props )
 
  351         geCanvas.addPrimitive( p, l )
 
  359     tArray =  [om.MTime(t) 
for t 
in [0,30,30,0,0]]
 
  360     yArray = [30,30,-30,-30,30]
 
  361     cArray = [[r*.2,1.0,1.0,1.0] 
for r 
in range(1,6)]
 
  363     timeId = geCanvas.createTimeVertexBuffer( tArray, yArray, cArray )
 
  365     props = omui.MDrawProperties()
 
  366     props.color = om.MColor( [0.2, 0.8, 0.6])
 
  367     props.lineWidth = 0.5
 
  368     props.lineStyle = omr.MUIDrawManager.kDashed
 
  369     props.pointSize = 12.0
 
  371     primId = geCanvas.createPrimitive( omr.MGeometry.kLineStrip, timeId, 0, 5, props )
 
  373     geCanvas.addPrimitive( primId, omui.MPanelCanvas.kGraphEditorCurveNames+56 )
 
  377     geCanvas.registerDrawUICallback( omui.MPanelCanvas.kGraphEditorBackground+56, otherFunc )
 
  379     geCanvas.registerDrawUICallback( omui.MPanelCanvas.kGraphEditorGrid+56, iconFunc )
 
  381     geCanvas.registerDrawUICallback( omui.MPanelCanvas.kGraphEditorAxisLabels+56, textFunc )
 
  383     geCanvas.registerDrawUICallback( omui.MPanelCanvas.kGraphEditorCurves+56, rectFunc )
 
  385     geCanvas.registerDrawUICallback( omui.MPanelCanvas.kGraphEditorCurveNames+54, arcFunc )
 
  387     geCanvas.registerDrawUICallback( omui.MPanelCanvas.kGraphEditorTimeMarker+54, circleFunc )
 
  389     geCanvas.registerDrawUICallback( omui.MPanelCanvas.kGraphEditorRetimeToolText+56, otherFunc )
 
  391     geCanvas.setAutoRefresh( 
True )
 
  393     print geCanvas.isValid()
 
  396 def uninitializePlugin( mobject ):
 
  399         this method is called when the plug-in is unloaded from Maya. It  
  400         deregisters all of the services that it was providing. 
  403         mobject - a handle to the plug-in object (use MFnPlugin to access it) 
  406     [geCanvas, geName, geWindow] = myCanvas
 
  407     cmds.deleteUI(geWindow)
 
  408     print geCanvas.isValid()