我想将图形编辑器的部分添加到我制作的菜单中,该部分显示曲线和曲线的名称。有没有人有任何建议,我怎么能做到这一点?如何使用Python在Maya中创建新的图形编辑器?
UPDATE
我试图得到类似上图中的东西。 在图形和大纲图上添加。 我已经成功地找到了大纲(cmds.outlinerPanel)的代码,但我不那么肯定的图形:\
我使用Maya 2014
我想将图形编辑器的部分添加到我制作的菜单中,该部分显示曲线和曲线的名称。有没有人有任何建议,我怎么能做到这一点?如何使用Python在Maya中创建新的图形编辑器?
我试图得到类似上图中的东西。 在图形和大纲图上添加。 我已经成功地找到了大纲(cmds.outlinerPanel)的代码,但我不那么肯定的图形:\
我使用Maya 2014
确定。使用玛雅CMDS创建一个图形编辑器面板超级简单的例子:
import maya.cmds as cmds
cmds.window()
cmds.frameLayout()
cmds.animCurveEditor()
cmds.showWindow()
但是,对于未来,如果你想添加任何玛雅小部件,不可用作为玛雅命令,你可以使用PySide的能力来做到这一点。这是一个例子。这是代码,我稍微从内森·霍恩的真棒后修饰上embedding Maya UI widgets on Qt UI和PySide/Shiboken:
import maya.cmds as cmds
import maya.OpenMayaUI as apiUI
from PySide import QtCore, QtGui
import shiboken
def wrapinstance(ptr, base=None):
"""
Utility to convert a pointer to a Qt class instance (PySide/PyQt compatible)
:param ptr: Pointer to QObject in memory
:type ptr: long or Swig instance
:param base: (Optional) Base class to wrap with (Defaults to QObject, which should handle anything)
:type base: QtGui.QWidget
:return: QWidget or subclass instance
:rtype: QtGui.QWidget
"""
if not globals().has_key('QtCore') or not globals().has_key('QtGui'):
return None
if ptr is None:
return None
ptr = long(ptr) # Ensure type
if globals().has_key('shiboken'):
if base is None:
qObj = shiboken.wrapInstance(long(ptr), QtCore.QObject)
metaObj = qObj.metaObject()
cls = metaObj.className()
superCls = metaObj.superClass().className()
if hasattr(QtGui, cls):
base = getattr(QtGui, cls)
elif hasattr(QtGui, superCls):
base = getattr(QtGui, superCls)
else:
base = QtGui.QWidget
return shiboken.wrapInstance(long(ptr), base)
elif globals().has_key('sip'):
base = QtCore.QObject
return sip.wrapinstance(long(ptr), base)
else:
return None
def getMayaWindow():
ptr = apiUI.MQtUtil.mainWindow()
return wrapinstance(long(ptr), QtCore.QObject)
def toQtObject(mayaName):
'''
Given the name of a Maya UI element of any type,
return the corresponding QWidget or QAction.
If the object does not exist, returns None
'''
ptr = apiUI.MQtUtil.findControl(mayaName)
if ptr is None:
ptr = apiUI.MQtUtil.findLayout(mayaName)
if ptr is None:
ptr = apiUI.MQtUtil.findMenuItem(mayaName)
if ptr is not None:
return wrapinstance(long(ptr), QtCore.QObject)
class MayaSubWindow(QtGui.QMainWindow):
def __init__(self, parent=getMayaWindow()):
super(MayaSubWindow, self).__init__(parent)
qtObj = toQtObject(cmds.animCurveEditor())
#Fill the window, could use qtObj.setParent
#and then add it to a layout.
self.setCentralWidget(qtObj)
myWindow = MayaSubWindow()
myWindow.show()
即使这是一个看似很长一段代码,你可以安全地添加wrapinstance()
,getMayaWindow()
和toQtObject()
对再利用的实用程序模块。
希望是有用的。
这太棒了!正是我在找什么。 我发现了cmd行animCurveEditor,但我从未将它包含在窗口中,所以我只是假定它是用于编辑预先存在的图形编辑器。 这很好,谢谢! – 2014-11-23 12:02:21
您使用的是哪个版本的Maya? – kartikg3 2014-11-21 17:03:40
另外,你可以发布你想要添加什么的屏幕截图吗? – kartikg3 2014-11-21 17:09:30
好吧,当然是:) – 2014-11-22 20:49:50