【发布时间】:2015-08-19 08:34:06
【问题描述】:
我正在使用:Maya2014 + pyqt4.8 + python2.7
我正在做一个应用程序,它可以让您加快和简化 Maya 中的项目选择。是一个选择器,用户可以将其附加到场景中的对象。窗口中对象的选择导致场景中对象的分离。但相反我找不到怎么办。
如何捕捉改变场景中对象选择时发生的事件并进一步处理它的程序?
【问题讨论】:
我正在使用:Maya2014 + pyqt4.8 + python2.7
我正在做一个应用程序,它可以让您加快和简化 Maya 中的项目选择。是一个选择器,用户可以将其附加到场景中的对象。窗口中对象的选择导致场景中对象的分离。但相反我找不到怎么办。
如何捕捉改变场景中对象选择时发生的事件并进一步处理它的程序?
【问题讨论】:
我真的建议如果你做的事情很繁重,那么远离 scriptjob。我更喜欢使用 API
def test(*args, **kwargs):
print "Fooo"
import maya.OpenMaya as OpenMaya
idx = OpenMaya.MEventMessage.addEventCallback("SelectionChanged", test)
#when ever you finish doing your stuff
OpenMaya.MMessage.removeCallback(idx)
【讨论】:
您可以为此使用scriptJob 命令。
scriptJob让我们在满足指定条件或触发指定事件时指定代码或执行某些操作。
对于选择更改,您可以使用 event 标志和 "SelectionChanged" 作为参数:
myScriptJobID = scriptJob(event=["SelectionChanged", your_function])
# You can later use this scriptJob's id to modify or delete it like so:
scriptJob(kill=myScriptJobID)
查看docs 了解更多选项。
【讨论】:
直到我找到了这样一个基于 maya api 的解决方案:
self.sJob = cmds.scriptJob(event=['SelectionChanged', self.myFnc])
此机制会创建 Maya 事件,当有更改对象选择时调用我的函数。
也许有更正确的选择。例如获取 identifokator 窗口 Maya 并让您的活动。虽然我认为使用 maya api 也不是一个坏选择。唯一的缺点是关闭窗口的时候需要关注并移除scriptJob,但这是一个可以解决的问题。
【讨论】: