不使用MPxLocator插件在OpenGL Python Maya API中绘图
我想在Maya的Python接口中做一些简单的事情:
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()
我只是想在Maya里画一条线,不想为了显示它而去创建一个MPxLocator或者其他复杂的东西。
1 个回答
4
所以我发现我需要在视图中添加一个回调,才能让它正常绘制:
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)
然后要移除这个回调:
OpenMayaUI.MUiMessage.removeCallback(callBack)
view = OpenMayaUI.M3dView.active3dView()
view.refresh(True, True)
希望这对某些人有帮助!