评估依赖关系图后Maya API中的事件

时间:2017-06-24 02:00:20

标签: maya

我正在以交互方式将Maya节点转换为外部应用程序。我已为MNodeMessage::addAttributeChangedCallback()的节点注册了回调。它工作正常,我可以直接在回调中转换节点。但是,它无法识别脚本表达式引起的更改。

我已经测试MNodeMessage::addNodeDirtyPlugCallback()正确识别这些更改。在回调中,我只需标记需要更新的节点,因为我需要等到依赖图已被评估,才能获得正确的值。

我可以在MEventMessage::addEventCallback("idle")上运行标记脏节点的转换,这适用于GUI。但是,当使用脚本更改节点时,它会失败(转换不会按时触发)。

我注意到在强制处理maya.utils.processIdleEvents()的空闲消息时它会起作用,但这会破坏回调的目的。

一旦评估了依赖图,是否会触发可靠的回调?

请注意,我已对MDGMessage::addForceUpdateCallback进行了测试,但无法正常工作。

1 个答案:

答案 0 :(得分:0)

您应该尝试MCommandMessageMUserEventMessage课程。

import maya.OpenMaya as om

def anyFunc(someData):
    # something
    pass

# Registering an event
om.MUserEventMessage.registerUserEvent('anyEvent')

# Setting a size of event
om.MUserEventMessage.setUserEventSize('anyEvent', 4)

# Telling Maya to run a function
id = om.MUserEventMessage.addUserEventCallback('anyEvent', anyFunc)

# Making the event happen
om.MUserEventMessage.postUserEvent('anyEvent')

# Removing the callback function when done
om.MUserEventMessage.removeCallback(id)