我正在使用:Maya2014 + pyqt4.8 + python2.7
我正在做一个应用程序,它允许您加速和简化Maya中项目的选择。是一个选择器,用户可以将其附加到场景中的对象。在窗口中选择对象会导致场景中的对象分离。但恰恰相反,我找不到怎么做。
如何捕捉更改场景中对象选择并进一步处理其程序时发生的事件?
答案 0 :(得分:7)
我真的建议如果你做的很重,然后远离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)
答案 1 :(得分:2)
您可以使用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了解更多选项。
答案 2 :(得分:0)
直到我找到基于maya api的解决方案:
self.sJob = cmds.scriptJob(event=['SelectionChanged', self.myFnc])
此机制创建Maya事件,该事件在存在更改对象选择时调用我的函数。
也许有更正确的选择。例如,获取识别器窗口maya,它会使您的事件发生。虽然我认为使用maya api也不是一个糟糕的选择。唯一的缺点是你必须在关闭窗口时关注并删除scriptJob,但这是一个可以解决的问题。