我正在以交互方式将Maya节点转换为外部应用程序。我已为MNodeMessage::addAttributeChangedCallback()
的节点注册了回调。它工作正常,我可以直接在回调中转换节点。但是,它无法识别脚本表达式引起的更改。
我已经测试MNodeMessage::addNodeDirtyPlugCallback()
正确识别这些更改。在回调中,我只需标记需要更新的节点,因为我需要等到依赖图已被评估,才能获得正确的值。
我可以在MEventMessage::addEventCallback("idle")
上运行标记脏节点的转换,这适用于GUI。但是,当使用脚本更改节点时,它会失败(转换不会按时触发)。
我注意到在强制处理maya.utils.processIdleEvents()
的空闲消息时它会起作用,但这会破坏回调的目的。
一旦评估了依赖图,是否会触发可靠的回调?
请注意,我已对MDGMessage::addForceUpdateCallback
进行了测试,但无法正常工作。
答案 0 :(得分:0)
您应该尝试MCommandMessage
或MUserEventMessage
课程。
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)