2019年7月8日月曜日

uiTemplateを使ってみる

uiResを使用していると、ラベル用文字列を取得するためだけに結構な長さの文字数を使用することになります。
ラベルを設定できるコントローラ、特にスライダー系などでは大量のフラグが有るものばかりなので、同じコントローラを複数配置した場合、レイアウトの微調整をするときのカーソル移動とかが、かなり面倒になってしまいます。
例えば、こんなウィンドウの場合


これを表示するためのスクリプトはこんな感じ。
global proc uiResTestWindow()
{
    _loadUiRes("uiResTestWindow");
    
    string $window=`window`;
    
    columnLayout -rs 2;
        floatSliderGrp -l (uiRes("m_uiResTestWindow.kFloatFieldGrpLabel1")) -f 1 -cw4 56 40 120 60 -min 0 -max 100 -el "";
        floatSliderGrp -l (uiRes("m_uiResTestWindow.kFloatFieldGrpLabel2")) -f 1 -cw4 56 40 120 60 -min 0 -max 100 -el "";
        floatSliderGrp -l (uiRes("m_uiResTestWindow.kFloatFieldGrpLabel3")) -f 1 -cw4 56 40 120 60 -min 0 -max 100 -el "";
        floatSliderGrp -l (uiRes("m_uiResTestWindow.kFloatFieldGrpLabel4")) -f 1 -cw4 56 40 120 60 -min 0 -max 100 -el "";
        button -l (uiRes("m_uiResTestWindow.kButtonLabel1")) -h 22 -w 64;
        button -l (uiRes("m_uiResTestWindow.kButtonLabel2")) -h 22 -w 64;
        button -l (uiRes("m_uiResTestWindow.kButtonLabel3")) -h 22 -w 64;
        button -l (uiRes("m_uiResTestWindow.kButtonLabel4")) -h 22 -w 64;
    showWindow $window;
    
}

_loadUiRes() は、ここを参考に。

1行がかなり長くなってしまっている感じです。
秀丸には矩形選択がありますが、フラグの微調整は結構面倒です。
そこで、uiTemplateを使うとフラグの修正が楽になります。


global proc uiResTestWindow()
{
    _loadUiRes("uiResTestWindow");
    
    //------------------------------------------------------------------------------
    // uiTemplate 作成
    if( `uiTemplate -exists "uiResTestTemplate"`) deleteUI -uit "uiResTestTemplate"; /* for debug. */
    if(!`uiTemplate -exists "uiResTestTemplate"`)
    {
        uiTemplate "uiResTestTemplate";
        
        floatSliderGrp -dt "uiResTestTemplate" -f 1 -min 0 -max 100 -cw4 56 40 120 60 -el "" -pre 2;
        button -dt "uiResTestTemplate" -h 22 -w 64;
        
    }
    
    
    //------------------------------------------------------------------------------
    string $window=`window`;
    
    // uiTemplate 設定
    setUITemplate -pst "uiResTestTemplate";
    
    columnLayout -rs 2;
        floatSliderGrp -l (uiRes("m_uiResTestWindow.kFloatFieldGrpLabel1"));
        floatSliderGrp -l (uiRes("m_uiResTestWindow.kFloatFieldGrpLabel2"));
        floatSliderGrp -l (uiRes("m_uiResTestWindow.kFloatFieldGrpLabel3"));
        floatSliderGrp -l (uiRes("m_uiResTestWindow.kFloatFieldGrpLabel4"));
        button -l (uiRes("m_uiResTestWindow.kButtonLabel1"));
        button -l (uiRes("m_uiResTestWindow.kButtonLabel2"));
        button -l (uiRes("m_uiResTestWindow.kButtonLabel3")) -h 18 -w 128;
        button -l (uiRes("m_uiResTestWindow.kButtonLabel4"));
    
    // uiTemplate解除
    setUITemplate -ppt;
    
    showWindow $window;
    
}

スクリプト作成中は uiTemplateを頻繁に書き換えるのですが、uiTemplateは一度作成するとmayaを再起動するまで変更できなくなってしまいます。
なので、作成前にdeleteUIで削除しています。リリースでは不要な行なので最終的には除去。

テンプレートを使用するときには setUITemplate -pst でテンプレートを設定。
使用後には setUITemplate -ppt; でテンプレートを元に戻しておかないと、ほかのツールにも、ここで設定しているテンプレートが使われてしまうことになり、レイアウトが崩れてしまうかもしれないので、要注意です。


この[test3]ボタンのように uiTemplateは気軽にオーバーライドできるので、特別なコントローラにしたい場合でも気軽に変更できます。

0 件のコメント:

コメントを投稿