概要
MayaでWindowを生成する時に毎回同じ様な文書を書くのは
少し面倒だなーって思ったので、
ファンクション化してみました。
Pythonにしたら楽では?等ございますが、
MayaLTで使う場合だとMelの必要があるので、
今回はMelで作成しています。
Melコード
WindowControl.mel
//---------------------------------------------------------------------------
//機能呼び出し用
//---------------------------------------------------------------------------
global proc string WindowControl()
{
return "WindowControl";
}
//---------------------------------------------------------------------------
//ベースWindow作成
//---------------------------------------------------------------------------
global proc string WindowControl.Create(string $InputWindowName,int $WindowWidth,int $WindowHeight)
{
if ( (`window -ex $InputWindowName`) == true )
{
deleteUI $InputWindowName;
}
if( (`windowPref -ex $InputWindowName`) == true )
{
windowPref -remove $InputWindowName;
}
string $windowName = `window -title $InputWindowName
-minimizeButton off //最小化無効
-maximizeButton off //最大化無効
-widthHeight $WindowWidth $WindowHeight //サイズ指定
$InputWindowName`;
return $windowName;
}
使い方
下記の様な感じで使用を想定。
追加処理部分に自分が入れたいButton等を追加するイメージです。
WindowControl();
$WindowName = WindowControl.Create("何らかのUI",300,300);
//追加処理
//追加処理
showWindow $WindowName;
解説
・WindowControlを空読み込みする。
これは特にやらなくても良い部分ではありますが、
個人的に他で使用する時に下記の様にできた方が直感的にわかりやすそうだと感じたので、この様に呼び出してます。
イメージとしてはメソッドっぽい感じです。
global proc 何かしらのUIを生成する機能()
{
WindowControl();//機能読み込み
$WindowName = WindowControl.Create("何らかのUI",300,300);//ウィンドウ生成
showWindow $WindowName;//ウィンドウ表示
}
・WindowControl.Create部分
if ( (`window -ex $InputWindowName`) == true )
{
deleteUI $InputWindowName;
}
window -exであるかどうか確認して、ある場合は削除します。
これがないと生成するたびに新しいWindowが生成されてしまうので、
Window生成する時は必須ですね。
if( (`windowPref -ex $InputWindowName`) == true )
{
windowPref -remove $InputWindowName;
}
Mayaに保存されているWindowの情報にこのWindowがあれば削除する処理を入れてます。
ちょっとこの辺りは他に詳しい方に伺いたいのですが、
size等の設定をしても一度生成したサイズの保存状態が優先され、
意図した挙動にならない為、追加してます。
おわりに
正直毎回書いても良いのでは?っと思う部分もありますが、
共通化した事で、一括で設定を変更したり、
共通でワークスペースにくっつける様にしたりとメリットはあると思います。
もしよろしければお使いください!