2015年9月5日土曜日

Maya UVTextureEditorをカスタマイズする。



会社で、以前勤めていた方が、UV TextureEditorをカスタマイズしたmelを作成されてました。
先日、このmelの修整依頼をいただき、中身を解析したところ、割と面白かったので、
Tipsをこちらでも紹介しようと思います。

要は、MayaのデフォルトのUVTextureEditorにカスタマイズしたレイアウトをねじ込む…というものです。
では、僕がやってみた手順を順番に紹介したいと思います。

まず、UVTextureEditorはMayaのランタイムコマンドで、以下で生成できます。
(scriptEditorの履歴からもわかります。)

TextureViewWindow;

で、この生成されたウインドウにレイアウトをねじ込みたいわけですが、
ここでほしい情報は、
1)このウインドウの名前
2)中に入っている各々レイアウト構造の名前
です。

生成したTextureWindowのパネル名は、以下コマンドで求めることができます。

string $texWinName[] = `getPanel -sty polyTexturePlacementPanel`;
(これはMayaユーザーガイドに載ってます)

ここで取得したTextureWindowの親レイアウトをフルパス取得すれば、1)と2)が解決したも同然なので、

string $texWinParent = `textureWindow -q -p $texWinName[0]`;

…で、親レイアウトを求めてみました。
すると、帰ってきた文字列が…

polyTexturePlacementPanel1Window|TearOffPane|polyTexturePlacementPanel1|formLayout109
※1

なるほどー。
TextureWindowはformLayoutに入っているのですな。
前任の方は、ここにformLayoutを横付けして、レイアウトにカスタマイズ領域を確保してました。
今回の要望は、Maya2011以降のバージョンだと、レイアウトの幅が太くなってしまって、使いにくい、細くしてほしいということだったので、ここのところを改造します。

細くしてほしい…とは言っても、人によって好みもありますから(笑)、paneLayoutで、幅を可変にします。

※1で求めた、
polyTexturePlacementPanel1Window|TearOffPane|polyTexturePlacementPanel1|formLayout109
から、
polyTexturePlacementPanel1Window|TearOffPane|polyTexturePlacementPanel1
…の部分に、paneLayoutをねじ込みます。

string $texPanel = `formLayout -q -p $texWinParent`;
string $HOS_paneLayout = `paneLayout -p $texPanel -configuration "vertical2" -ps 1 20 100`;
   columnLayout -p $HOS_paneLayout -adj 1;
      button -w 80;
      intSliderGrp -w 80;
      button -w 80;
      button -w 80;

   setParent..;
※2

で、※1で求めたtextureWindowの親を、※2のpaneLayoutに入れてあげればできるはず。。

formLayout -e -p $HOS_paneLayout $texWinParent;


できた!
あとは、※2でとりあえず入れ込んだcolumnLayout部分を必要に応じてカスタマイズしてあげればOKですね!


ソース全容です。
----------------------
proc test(){
   string $texWinName[] = `getPanel -sty polyTexturePlacementPanel`;
   if(size($texWinName)>0){
      for ($panel in $texWinName){
         string $parentList = `textureWindow -q -p $panel`;
         string $win[] = stringToStringArray($parentList,"|");
         if(`window -q -ex $win[0]`)deleteUI $win[0];
      }
   }
   TextureViewWindow;
   clear $texWinName;
   $texWinName = `getPanel -sty polyTexturePlacementPanel`;
   string $texWinParent = `textureWindow -q -p $texWinName[0]`;
   string $texPanel = `formLayout -q -p $texWinParent`;
   string $HOS_paneLayout = `paneLayout -p $texPanel -configuration "vertical2" -ps 1 20 100`;
      columnLayout -p $HOS_paneLayout -adj 1;
         button -w 80;
         intSliderGrp -w 80;
         button -w 80;
         button -w 80;
      setParent..;
   formLayout -e -p $HOS_paneLayout $texWinParent;
}

test;
----------------------