【问题标题】:How to get from Maya event of a change highlight objects in the scene?如何从 Maya 事件中获取场景中高亮对象的变化?
【发布时间】:2015-08-19 08:34:06
【问题描述】:

我正在使用:Maya2014 + pyqt4.8 + python2.7

我正在做一个应用程序,它可以让您加快和简化 Maya 中的项目选择。是一个选择器,用户可以将其附加到场景中的对象。窗口中对象的选择导致场景中对象的分离。但相反我找不到怎么办。

如何捕捉改变场景中对象选择时发生的事件并进一步处理它的程序?

【问题讨论】:

    标签: python events pyqt4 maya


    【解决方案1】:

    我真的建议如果你做的事情很繁重,那么远离 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)
    

    【讨论】:

    • 我只能说你需要非常小心地使用 API 路由。它不受管理,如果管理不当,可能会导致 Maya 崩溃。这就是我在这种情况下不推荐 API 的原因。 ScriptJob 更受管理,在这种情况下,您应该会发现使用它几乎不会影响性能。
    【解决方案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 了解更多选项。

    【讨论】:

      【解决方案3】:

      直到我找到了这样一个基于 maya api 的解决方案:

      self.sJob = cmds.scriptJob(event=['SelectionChanged', self.myFnc])
      

      此机制会创建 Maya 事件,当有更改对象选择时调用我的函数。

      也许有更正确的选择。例如获取 identifokator 窗口 Maya 并让您的活动。虽然我认为使用 maya api 也不是一个坏选择。唯一的缺点是关闭窗口的时候需要关注并移除scriptJob,但这是一个可以解决的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-25
        • 2020-06-02
        • 2018-12-05
        • 1970-01-01
        • 2016-01-09
        • 2017-12-30
        • 1970-01-01
        • 2012-04-07
        相关资源
        最近更新 更多