2019年7月22日月曜日

自作ツールでGUIの状態をプリファレンスへ保存する※基本

自作のツールを作ると、checkBoxや~Fieldの値を次回起動時に復帰させたくなることがあります。
例として、こんなウィンドウを作ってみます。


この Flag の checkBox のオン・オフ状態を記憶させます。
そこで必要なコマンドが optionVar です。
このコマンドが mayaのプリファレンスファイルへ記録や読み出しを実行します。



サンプルコード

global proc optVarTest.savePreference()
{
    optionVar -iv optVarTestWindow_checkBoxValue `checkBox -q -v "optVarTestWindow_checkBox"`;
    deleteUI "optVarTestWindow";
    
}


global proc optVarTest()
{
    if(`window -ex "optVarTestWindow"`) deleteUI "optVarTestWindow";
    
    window "optVarTestWindow";
        columnLayout -rs 4;
            checkBox -l "Flag" "optVarTestWindow_checkBox";
            button -l "Close" -w 128 -h 22 "optVarTestWindow_closeBtn";
            
    
    // コマンド追加
    button -e -c "optVarTest.savePreference" "optVarTestWindow_closeBtn";
    
    // チェックボックスの値の復帰
    if(`optionVar -ex optVarTestWindow_checkBoxValue`)
    {
        checkBox -e -v `optionVar -q optVarTestWindow_checkBoxValue` "optVarTestWindow_checkBox";
        
    }
    
    showWindow "optVarTestWindow";
    
}

ウィンドウ作成時にプリファレンスに値が保存されていたらチェックボックスの値を復帰します。
そして、[Close]ボタンにプリファレンスへ保存するコマンドを追加して保存を実行するようにしています。

別のプロシージャで deleteUI を実行するため、ウィンドウ名は固有名にする必要があります。

ただ、このサンプルでは、[Close]ボタンを押さないとプリファレンスに保存されません。

checkBox の -changeCommand へプリファレンスに保存するコマンドを登録しても良いのですが、チェックを切り替えるたびにプリファレンスファイルへアクセスしてしまうので、あまり気持ちの良いものではない気がします。maya全体の設定を破壊しかねないので・・・。

なので、右上の[X]でウィンドウを閉じるとプリファレンスの保存が行われないのです。

まぁ、ほとんどのmayaツールの下の方に、[Create][Apply][Cancel]みたいなボタンがくっ付いているのは、プリファレンス保存をさせるか、させないかを分けているのかもしれないですね。
ウィンドウを閉じる[X]は[Cancel]と同じになるので。

0 件のコメント:

コメントを投稿