如何使用QPixmap捕获maya 3d视图?

时间:2011-12-08 02:00:04

标签: pyqt4 screen-capture maya qpixmap

我为maya制作了一个屏幕截图脚本。 所以,我用QPixmap类处理这个工作。

我这样写剧本。

from PyQt4 import QtCore, QtGui
import sip
import maya.cmds as cmds
import maya.OpenMayaUI as mui

def getMayaWindow():
    ptr = mui.MQtUtil.mainWindow()
    return sip.wrapinstance(long(ptr), QtCore.QObject)

pm = QtGui.QPixmap.grabWindow(getMayaWindow().winId())
pm.save('c:/test.png')

但是,它无法抓取3Dview,因此无法正常工作。

2 个答案:

答案 0 :(得分:1)

有同样的问题。 有Nathan Horne的解决方案可以正常工作。 但是,如果要获取某个M3dView使用的QWidget对象,请按照下列步骤操作:

import maya.OpenMayaUI as apiUI
from PyQt4 import QtGui, QtCore
import sip

view = apiUI.M3dView.active3dView()
widget_ptr = view.widget()
widget = sip.wrapinstance(long(widget_ptr), QtCore.QObject)
pixmap = QtGui.QPixmap.grabWidget(widget)

如您所知,您可以将pixmap保存到文件中或直接将其用于另一个QWidget。 奇怪的是,结果看起来很乱(或至少不太可预测),我建议使用Nathan Horne的解决方案。

答案 1 :(得分:0)

您的脚本适用于我,在OSX上运行,Maya 2012 x64

Output from your script

或者,如果你的目标是屏幕上只是三维视口,你可以尝试使用一个播放器:

cmds.playblast( frame=cmds.currentTime(q=True),
                f="/tmp/test.png", 
                fo=True, fmt="image", viewer=False,
                c="PNG", quality=70 )