Maya におけるウインドウやメニューなどの GUI は、 MEL スクリプトによって作られています。
ですから MEL スクリプトを使えば、 GUI のカスタマイズ・独自メニューの作成ができるようになります。
これから、 MEL コマンドや自作のプロシージャを操作するオリジナル GUI を作ってゆきましょう。
今回、作成するスクリプトは簡単ものなので、プロシージャ宣言をしません。
スクリプト エディタ で読み込むとすぐに実行できるように、
コマンドをそのまま並べて作ってゆきます。
以下のスクリプトは、スクリプト エディタ のメニュー ファイル → ソーススクリプト で読み込んで実行してください。
ウインドウを作成するには window コマンドを使用します。
ただし、ウインドウを実際に表示するためには、
window コマンドに -visible true をつけて実行するか、
window コマンドの後で showWindow コマンドを実行します。
window -title "window1";
showWindow;
window -title "window1";
showWindow;
ウインドウにボタンなどを配置してゆくには、レイアウトコマンドが必要です。
レイアウトコマンドとは、
コントロールと呼ばれるウインドウ上の部品(ボタンやスライダなど)を、
どのような方法で並べるかを決めるためのものです。
レイアウトコマンドには他にも様々な種類がありますが、
上から順番に並べてゆくだけなら、
以下のように columnLayout を使用します。
window -title "window2";
columnLayout;
button;
showWindow;
window -title "window2";
columnLayout;
button;
showWindow;
ボタンが押された時などに、 特定のコマンドを実行させるためには -command フラグを使用します。
window -title "window3";
columnLayout;
button -label "sphere" -command "sphere";
showWindow;
window -title "window3";
columnLayout;
button -label "sphere" -command "sphere";
showWindow;
MEL によって作成される GUI のウインドウ・部品には、すべて名前がついています。
上で実行したコマンドでは名前を使っていませんが、
後の章で学習する様々な GUI を作成するときには、名前が必要になります。
自分で名前をつける場合は、GUI のコマンドの一番右にその名前をつけて実行します。
たとえば、ボタンを作成するときに myButton という名前をつけたければ、
以下のように実行します。
button myButton;
名前をつけないで、GUI 関係のコマンドを実行すると Maya が名前をつけてくれます。
たとえば、以下のコマンドを 1 つづつ実行すると、
// 結果: の右に表示されているような名前がついて、ウインドウやボタンが作成されます。
window;
// 結果: window1 //
columnLayout;
// 結果: window1|columnLayout1 //
button;
// 結果: window1|columnLayout1|button1 //
showWindow;
ここで、
window1|columnLayout1
という名前は、 window1 の子として columnLayout1
が作られていることをあらわします。
逆に言うと、 columnLayout1 の親が window1 であるということになります。
(window1 と columnLayout1 の間にある | は
パイプと呼ばれる記号です)
ボタンの名前は、 window1|columnLayout1|button1 なので、
window1 の子が columnLayout1、
columnLayout1の子が button1
であることを表します。
このように、GUI の部品の名前は、
どのウインドウの、どのレイアウト中の部品なのかということを意味しています。
GUI の名前は、基本的に違う名前をつける必要があります。
しかし、ボタンなどの GUI の部品が、異なるウインドウやレイアウトの中にあれば、
同じ名前をつけてもかまいません。
以下のコマンドでは、2 つのウインドウを作成し、
2 つのボタンに同じ名前 myButton をつけています。
window;
// 結果: window1 //
columnLayout;
// 結果: window1|columnLayout2 //
button myButton;
// 結果: window1|columnLayout2|myButton //
showWindow;
window;
// 結果: window2 //
columnLayout;
// 結果: window2|columnLayout3 //
button myButton;
// 結果: window2|columnLayout3|myButton //
showWindow;