今のところ、ウィンドウのユーザ インタフェースはまったく動作せず、スライダを動かしてもチェック ボックスをクリックしても反応がありません。このセクションでは、ユーザ インタフェースを前に使用した makeRoll プロシージャにリンクする方法について学習します。
次の手順では、ユーザ インタフェース スクリプトを修正します。
ユーザ インタフェース スクリプトの完成版は、Mel_UI_Final.mel という名前で、GettingStarted プロジェクト ディレクトリの mel サブディレクトリ内にあります。
makeRoll プロシージャは、現在選択しているオブジェクトに作用するようになっていません。ここでは、textField コントロールが現在選択しているオブジェクトを表示するように、スクリプトを修正しましょう。
現在選択しているオブジェクトの名前を返すには、ls コマンド(list)を selection に付けて使用します。Maya では複数のオブジェクトを選択できるので、ls コマンドからの戻り値は、たとえ 1 つのオブジェクトしか選択されていなくても、文字列ではなく文字列配列になります。配列とは、同じデータ型の複数の項目を 1 つの変数に格納するために使用する、値を順序付けて入れたリストです。makeRoll プロシージャ文字列配列を引数にできないため、 ls -selection の戻り値を修正する必要があります。
この次のセクションでは、新規 tempMEL タブを作成して、学習するテスト コマンドを配置します。
select -allDagObjects;
$all_selected_objects =`ls -selection`;
print $all_selected_objects;
roll_Cube pPlane1
変数 $all_selected_objects は文字列配列です。つまり、変数内に複数の文字列が格納されています。配列内の値を要素と呼びます。
配列のインデックスを使用して配列から 1 つの値を抽出し、選択項目を減らします。
$first_selected_object=$all_selected_objects[0];
select $first_selected_object;
配列の要素にアクセスするには、配列から抽出する要素のインデックス番号角カッコに入れます。配列のインデックス番号は 0 から開始します。
$all_selected_objects=`ls -selection`;
$first_selected_object=$all_selected_objects[0];
select $first_selected_object;
$first_selected_object
$obj_name_text = `textField -editable 0 -width 400 -text $first_selected_object`;
テキスト フィールドには現在選択されているオブジェクトが表示されるようになりました。
オブジェクトを選択せずに、修正したユーザ インタフェース作成用スクリプトを実行しようとすると、文字列配列 $all_selected_objects に要素が存在しないため、エラーが発生します。
チェック ボックスもボタンと同様にコマンド フラグを使用できます。チェック ボックスはボタンよりも機能的なので、コマンド フラグが異なります。チェック ボックスは次の 3 つのコマンド フラグを使用できます。changeCommand、onCommand、offCommand
checkBox コマンドに edit フラグを付けて使用すれば、ユーザ インタフェースでチェックボックスの状態を変更できます。
checkBox -edit -value 0 $box_sim_checkbox;
実行前にオンであった Box Simulation チェック ボックスがオフになりました。このコマンドの値を 1 にして再度実行すると、チェックボックスはオンになります。
これは、edit フラグをコマンドに付けてコマンド フラグの引数として使用して、値の変更を可能にする方法を示しています。
次に、onCommand フラグと offCommand フラグを使用して 2 つのチェックボックスが同期するように設定しましょう。つまり、一方のチェック ボックスの状態を変更すると、片方のチェック ボックスの状態がその反対の状態になるようにします。
$box_sim_checkbox = `checkBox -value 1 -label "Box Simulation" -onCommand "checkBox -edit -value 0 $sphere_sim_checkbox;" -offCommand "checkBox -edit -value 1 $sphere_sim_checkbox;"`; $sphere_sim_checkbox = `checkBox -value 0 -label "Sphere Simulation" -onCommand "checkBox -edit -value 0 $box_sim_checkbox;" -offCommand "checkBox -edit -value 1 $box_sim_checkbox;"`;
makeRoll プロシージャを実行するには引数が必要です。プロシージャをウィンドウにリンクするには、ユーザ インタフェースのコントロールから引数の値を取得し、この引数を使用して makeRoll プロシージャを実行します。
コントロールの値を取得するには、照会フラグを使用する必要があります。照会フラグを使用して、コマンドがシーン内の引数の値を返すようにすることができます。
print ("The diameter is: " + `floatSliderGrp -query -value $diameter_float`);
The diameter is: 10.01
ボタンのコマンド フラグを変更し、makeRoll コマンドをユーザ インタフェースで指定した値と同じ引数の値で呼び出します。
-command "makeRoll \ `textField -query -text $obj_name_text` \ `intSliderGrp -query -value $ground_int` \ `checkBox -query -value $box_sim_checkbox` \ `floatSliderGrp -query -value $diameter_float`;"`;
ユーザ インタフェースのすべての引数がユーザ インタフェース要素を照会することにより定義されます。行末にバックスラッシュを付けると、コマンド フラグの引数を複数行にまたがって記述できます。
ユーザ インタフェース スクリプトの完成版は、Mel_UI_Final.mel という名前で GettingStarted プロジェクト ディレクトリ(GettingStarted/mel)にあります。