不使用MPxLocator插件在OpenGL Python Maya API中绘图

0 投票
1 回答
3145 浏览
提问于 2025-04-18 07:19

我想在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)

希望这对某些人有帮助!

撰写回答