ユーザ インタフェース スクリプトが複雑になるほど、構文エラーを起こしやすくなります。ユーザ インタフェース スクリプトが部分的に実行されてエラーで停止した場合は、ウィンドウ自体は存在しますが、表示されません。問題を修正して再度スクリプトを実行するには、ウィンドウに新しい名前を付けるか、非表示ウィンドウを削除する必要があります。
次のセクションでは、条件文を使用して、ウィンドウのネーミング コンフリクトを解決します。条件文を使用すれば、変数の値やシーン内のオブジェクトの状態に従って、一連のコードを実行することができます。
window testwindow; fake_command; showWindow;
エラーがスクリプト エディタ(Script Editor)に出力されます。
// エラー: 2 行目: プロシージャ "fake_command;" が見つかりません。// (// Error: line 2: Cannot find procedure "fake_command;".//)
window testwindow; showWindow;
エラーがスクリプト エディタ(Script Editor)に出力されます。
// エラー: 1 行目: オブジェクトが固有の名前ではありません: testwindow// (// Error: line 1: Object's name is not unique: testwindow //)
deleteUI testwindow;
window -exists testwindow;
次の結果がスクリプト エディタ(Script Editor)に出力されます。
window コマンドの exists フラグは、ウィンドウが存在するかどうかによって、0 または 1 のどちらかを返すようにコマンドを変更します。
deleteUI non_existing_window; sphere;
エラーがスクリプト エディタ(Script Editor)に出力されます。
// エラー: 1 行目: オブジェクトが見つかりません: non_existing_window (// 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 の速度を遅くする可能性があります。
このセクションでは、名前の付いたウィンドウの作成、削除、およびその存在チェックの方法について学習しました。次のセクションでは、より複雑なウィンドウのプロシージャに取り組みます。