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を使うとフラグの修正が楽になります。
そこで、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 件のコメント:
コメントを投稿