2017-10-12 7 views
1

Mayaのレンダーレイヤータブを変更するスクリプトがあります。ユーザーがレンダリングタブの状態や、Mayaの組み込みインターフェースを使って他のものを変更した場合、フローティングUIを動的に更新する方法があるかどうかは疑問でした。例えば、ユーザが組み込みのインタフェースでレンダリングレイヤを変更した場合、スクリプト化されたタブのレンダーレイヤは更新されます。残りのMayaの設定を変更してMayaのpython GUIアップデートを行う方法はありますか?

答えて

1

これは実行可能ですが、自明ではありません。

scriptJobを使用して、変更を監視し、それに応じてGUIを更新します。

一部の変更は直接公開されます。たとえば、playbackRangeChangedイベントに反応するscriptJobを使用して再生範囲を変更するユーザーに反応できます。上記のリンクされているドキュメントページには、リッスンできる変更イベントのリストが含まれています。

属性の変更を監視している場合は、特定の属性が変更されたとき(UIなどで)attributeChange scriptJob型を使用してスクリプトを実行できます。変更の

import maya.cmds as cmds 

def test(): 
    print "focal length:", cmds.getAttr('perspShape.focalLength') 

cmds.scriptJob(ac = ("perspShape.focalLength", test)) 

他の種類(それらの大部分)予め定義されたイベントとしては使用できません:パースビューカメラの焦点距離の変更はいつでも、例えば、これは、メッセージを印刷します。 condition commandを使用して独自のイベントを作成することもできますが、変更を検出するコードを記述する必要があります。多くの人が、Mayaがアイドル状態のときに実行され、変更を探すscriptjobを使用して物事を簡素化します。これはうまくいきますが、複雑なスクリプトではMayaの処理速度が低下する可能性があるため、注意深く記述する必要があります。ユーザーがUIとやり取りしていないときはいつでも実行されます。

関連する問題