Reputation: 277
I'm trying to do something simple like this in the maya python api:
import maya.OpenMayaUI as OpenMayaUI
import maya.OpenMayaRender as OpenMayaRender
#Get active camera.
view = OpenMayaUI.M3dView.active3dView()
glFT = OpenMayaRender.MHardwareRenderer.theRenderer().glFunctionTable()
view.beginGL()
glFT.glBegin(OpenMayaRender.MGL_LINES)
glFT.glVertex3f(0.0, 0.0, 0.0)
glFT.glVertex3f(0.0, 1.0, 0.0)
glFT.glEnd()
view.endGL()
I just want to draw a line in maya without having to build a MPxLocator or what have you to display it.
Upvotes: 0
Views: 3296
Reputation: 277
So I found I needed to actually add callback to the view to get it to draw:
import maya.OpenMayaUI as OpenMayaUI
import maya.OpenMayaRender as OpenMayaRender
import maya.cmds as cmds
def setCamera(*args):
view = OpenMayaUI.M3dView.active3dView()
# Get a renderer, then a function table
glRenderer = OpenMayaRender.MHardwareRenderer.theRenderer()
glFT = glRenderer.glFunctionTable()
view.beginGL()
glFT.glPushAttrib(OpenMayaRender.MGL_LINE_BIT)
glFT.glLineWidth(5.0)
glFT.glBegin(OpenMayaRender.MGL_LINES)
glFT.glColor3f(1.0, 0.0, 0.0)
glFT.glVertex3f(0.0, 0.0, 0.0)
glFT.glVertex3f(3.0, 0.0, 0.0)
glFT.glColor3f(0.0, 1.0, 0.0)
glFT.glVertex3f(0.0, 0.0, 0.0)
glFT.glVertex3f(0.0, 3.0, 0.0)
glFT.glColor3f(0.0, 0.0, 1.0)
glFT.glVertex3f(0.0, 0.0, 0.0)
glFT.glVertex3f(0.0, 0.0, 3.0)
glFT.glEnd()
glFT.glPopAttrib()
view.endGL()
if __name__ == '__main__':
panel = cmds.getPanel(withFocus=True)
callBack = OpenMayaUI.MUiMessage.add3dViewPostRenderMsgCallback(
panel, setCamera)
view = OpenMayaUI.M3dView.active3dView()
view.refresh(True, True)
And then to remove the callback:
OpenMayaUI.MUiMessage.removeCallback(callBack)
view = OpenMayaUI.M3dView.active3dView()
view.refresh(True, True)
Hope that helps someone!
Upvotes: 4