Как я могу захватить Maya 3D View с помощью QPixmap? - PullRequest
0 голосов
/ 08 декабря 2011

Я делаю сценарий захвата экрана для 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')

но он не может захватить 3D-изображение, поэтому он не может работать.

Ответы [ 2 ]

1 голос
/ 23 февраля 2012

Была такая же проблема.Существует решение от Натана Хорна , которое отлично работает.Однако, если вы хотите получить объект QWidget, который использует определенный M3dView, выполните следующие действия:

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)

Как вы знаете, вы можете затем сохранить растровое изображение в файл или использовать его непосредственно для другого QWidget.Как ни странно, результат кажется беспорядочным (или, по крайней мере, менее предсказуемым), и я рекомендую использовать решение Натана Хорна.

0 голосов
/ 11 декабря 2011

Ваш скрипт работает нормально для меня, работает на OSX, Maya 2012 x64

Output from your script

В качестве альтернативы, если ваша цель состоит в том, чтобы сделать скриншот только для 3D-окна просмотра, вы можете попробовать использовать playblast:

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