今回はサンプルとして、こんなウィンドウを作ります。
プロシージャに飛ばすための[Close]ボタンを無くしました。
さらに checkBox では分かりにくいので intSlider で値の変化がしっかり保存されているかを確認し易くします。
重要なのは scriptJob をうまく活用することです。
global proc optVarTestWindow.close()
{
global int $gIntSliderValue;
// 設定の保存
optionVar -iv optVarTestWindow_intSliderValue $gIntSliderValue;
}
global proc optVarTest2()
{
if(`window -ex "optVarTestWindow"`) deleteUI "optVarTestWindow";/* for debug. */
window "optVarTestWindow";
columnLayout;
intSliderGrp -f 1 -l "value" "optVarTestWindow_intSlider";
//------------------------------------------------------------------------------
// スライダーの値を保存する変数
global int $gIntSliderValue;
// スライダーにコマンド追加
intSliderGrp -e
-cc ("$gIntSliderValue=`intSliderGrp -q -v optVarTestWindow_intSlider`")
"optVarTestWindow_intSlider";
// スライダーの値の復帰
if(`optionVar -ex optVarTestWindow_intSliderValue`)
{
$gIntSliderValue =`optionVar -q optVarTestWindow_intSliderValue`;
intSliderGrp -e -v $gIntSliderValue "optVarTestWindow_intSlider";
}
//------------------------------------------------------------------------------
// スクリプトジョブ
scriptJob -pro -ro true -uid "optVarTestWindow" "optVarTestWindow.close";
showWindow "optVarTestWindow";
}
scriptJob がツールウィンドウの削除を監視し、削除された瞬間optionVarを実行するプロシージャに飛ばします。
ここで注意しなければいけないのは、ウィンドウが削除されているのでコントローラの値を query出来ないということ。
なので、値を記憶しておくグローバル変数を使用。
そして、intSlider の changeCommandにはグローバル変数に値を代入するコードを仕込んでおきます。
毎回、optionVarを実行してディスクにアクセスするよりもメモリにアクセスした方が精神衛生上良いのではないかな?
ちょっとスコープが怪しい感じになっていますが、うまく動いているので気にしないでおきましょう。
ただ、ツールを開いた状態で mayaが終了されるとプリファレンスに記録できないんですよねぇ・・・。
ここで注意しなければいけないのは、ウィンドウが削除されているのでコントローラの値を query出来ないということ。
なので、値を記憶しておくグローバル変数を使用。
そして、intSlider の changeCommandにはグローバル変数に値を代入するコードを仕込んでおきます。
毎回、optionVarを実行してディスクにアクセスするよりもメモリにアクセスした方が精神衛生上良いのではないかな?
ちょっとスコープが怪しい感じになっていますが、うまく動いているので気にしないでおきましょう。
ただ、ツールを開いた状態で mayaが終了されるとプリファレンスに記録できないんですよねぇ・・・。

0 件のコメント:
コメントを投稿