ユーザ インタフェース スクリプトが複雑になるほど、構文エラーを起こしやすくなります。ユーザ インタフェース スクリプトが部分的に実行されてエラーで停止した場合は、ウィンドウ自体は存在しますが、表示されません。問題を修正して再度スクリプトを実行するには、ウィンドウに新しい名前を付けるか、非表示ウィンドウを削除する必要があります。
次のセクションでは、条件文を使用して、ウィンドウのネーミング コンフリクトを解決します。条件文を使用すれば、変数の値やシーン内のオブジェクトの状態に従って、一連のコードを実行することができます。
window testwindow; fake_command; showWindow;
// Error: line 2: Cannot find procedure "fake_command;". //
window testwindow; showWindow;
// Error: line 1: Object's name is not unique: testwindow //
deleteUI testwindow;
window -exists testwindow;
// Result: 0 //
window コマンドの exists フラグは、ウィンドウが存在するかどうかによって、0 または 1 を返すようにコマンドを変更します。
deleteUI non_existing_window; sphere;
// Error: line 1: Object not found: non_existing_window
既存のユーザ インタフェースが存在する場合のみ削除できるようにするには、条件文を使用します。
window testwindow; fake_command; showWindow;
if (`window -exists testwindow`==1) { deleteUI testwindow; } window -resizeToFitChildren 1 testwindow; columnLayout; text -label "This window deleted the other one"; showWindow;
つまり、if 文と評価は、ウィンドウが存在するかどうかの照会結果が「1」(ウィンドウが存在する)の場合のみ、ウィンドウが削除されることを意味します。そうでなければ、波カッコ内のコードは無視されます。
ユーザ インタフェースのコントロールを参照するには、コントロールの名前が必要です。各ユーザ インタフェース要素に手動で名前を指定する代わりに、固有のデフォルト名を生成するコマンドを使用して、その名前を変数として格納することができます。
すべてのユーザ インタフェース コマンドは、作成時にフル ネームとパスを返します。戻り値を変数として格納しておけば、スクリプトのそれ以降のポイントでそれを参照できます。
window -resizeToFitChildren 1 pick_me_window; columnLayout; $button_one=`button -label "Click Me!" -command "deleteUI $button_two"`; $button_two=`button -label "NO!, Click Me!!" -command "deleteUI $button_one"`; $button_close=`button -label "Close" -command "deleteUI pick_me_window"`; showWindow;
ここでも再度評価にバックチックを使用していますが、この場合は 3 つの変数($button_one、$button_two、$button_close)を作成し、ボタン コマンドを呼び出すごとにこれに結果を入れています。
いずれかの「Click Me!」ボタンをクリックすると、ボタン コントロールの名前を引数(button_one または button_two)として格納している変数を使用して deleteUI コマンドを呼び出し、他のボタンを削除します。
ユーザ インタフェース ウィンドウを作成したときには、固有の名前を手動で割り当てました。これはユーザ インタフェースの複数のコピーは開けないということを確認するのには良い方法でしょう。より複雑なユーザ インタフェースでは、同じユーザ インタフェースの複数のコピーがあると、お互いに干渉したり、Maya の速度を遅くする可能性があります。
このセクションでは、名前の付いたウィンドウの作成、削除、およびその存在チェックの方法について学習しました。次のセクションでは、より複雑なウィンドウのプロシージャに取り組みます。