2017-06-24 13 views
1

私はMayaノードを対話的に外部アプリケーションに変換しています。 MNodeMessage::addAttributeChangedCallback()というノードのコールバックを登録しました。それは正常に動作し、私はコールバックで直接ノードを変換することができます。ただし、スクリプト式による変更は認識されません。依存関係グラフが評価された後のMaya APIのイベント

私はMNodeMessage::addNodeDirtyPlugCallback()がこれらの変更を正しく認識していることをテストしました。コールバックでは、依存グラフが評価されるまで待つ必要があるため、適切な値を得るために、更新が必要なノードにマークを付けるだけです。

MEventMessage::addEventCallback("idle")にマークされたダーティノードの翻訳を実行できます。これはGUIで動作します。ただし、スクリプトを使用してノードが変更された場合、変換は失敗します(変換は時間通りに開始されません)。

私は、アイドルメッセージの処理を強制的にmaya.utils.processIdleEvents()とすると動作することに気付きましたが、それはコールバックの目的を破ります。

一度依存性グラフが評価されるとトリガーされる信頼できるコールバックはありますか?

注:私はMDGMessage::addForceUpdateCallbackをテストしましたが、期待どおりに動作しません。

答えて

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) 
+0

少し詳しく教えてください。 –

+0

私は前に 'MCommandMessage1'をチェックしましたが、この行はドキュメントからです:'実際のコマンドが実行されたときだけ呼び出され、スクリプトが実行されないときは呼び出されます。 'MUserEventMessage'に関して、あなたはこの例でどのように使用すべきでしょうか? –

+0

あなたの努力に感謝しますが、私はそれがここでどのように役立つかはわかりません。私はそのようなイベントを登録する方法を知っています。問題は、グラフが完全に評価された時期がわからないことです。私は、カスタムイベントを投稿することがそれを助ける方法を見ていない。 –

関連する問題