MEL コマンドを実行します。
string eval(string command)
command は、二重引用符で囲んだコマンド文字列、またはコマンドを表す文字列型変数です。
戻り値は、コマンドを実行した結果を表す文字列です。
eval コマンドは最上位の MEL スコープで 実行されるので、グローバル関数として認識され、プロシージャ内で定義した関数(ローカル関数)としては認識されません。詳細については、グローバル変数とローカル変数を参照してください。
eval("select -cl")
select -cl コマンドを実行し、シーン内のオブジェクトの選択をすべて解除します。この例では戻り値は使用されませんが、コマンドの出力結果が返されます。
string $cmd = "select -cl"; eval($cmd);
1 番目の文は、select -cl というコマンド文字列を文字列型変数 $cmd に代入します。2 番目の文は、$cmd の内容(select -cl コマンド)を実行します。
string $mycommand = "sphere"; eval($mycommand+"-r 5");
1 番目の文は sphere という文字列を変数 $mycommand に代入します。2 番目の文により、「-r 5」が文字列「sphere」の後ろに追加され、「sphere -r 5」というコマンドが実行されます。これによって、半径が 5 グリッドの球が作成されます。
string $a[]; $a = eval("ls -lights"); print($a);
1 番目の文は $a という文字配列を定義します。2 番目の文は MEL コマンド ls -lights を実行し、その出力を配列 $a に割り当てます。3 番目の文は $a の内容をスクリプト エディタ(Script Editor)に次のように表示します。
ambientLightShape1 directionalLightShape1
コマンドの出力結果を表す行が、それぞれ新しい行に表示されます。コマンドの出力結果の各行は配列の要素です。Maya では配列の各要素が新しい行に出力されます。
Maya の scripts ディレクトリに bunk.mel という MEL スクリプト ファイルを作成します。このスクリプト ファイルでは次のプロシージャを定義します。
global proc string bunk() { string $fog; if (rand(2) < 1) $fog = "particle"; else $fog = "sphere"; return $fog; }
また、次のエクスプレッションを作成します。
string $name = bunk(); eval($name); print($name);
エクスプレッションの 1 番目の文は、bunk.mel スクリプト ファイル内の bunk プロシージャを実行します。bunk プロシージャでは、if-else 文中の rand(2) 関数によって 0 ~ 2 の範囲の浮動小数点乱数が生成された後、その乱数の値が 1 と比較されます。
値が 1 未満の場合は、$fog 変数に particle という MEL コマンド文字列が代入されます。値が 1 以上の場合は、$fog 変数に sphere という MEL コマンド文字列が代入されます。
このプロシージャの実行が完了すると、エクスプレッションのコール側プロシージャである bunk() に $fog 変数の値が渡され、その値(MEL コマンド文字列)が $name 変数に代入されます。
eval 関数は、$name の MEL コマンド文字列を実行します。たとえば、particle というコマンドが実行されると、ワークスペースの原点にパーティクルが作成されます。
4 番目の文は、$name の内容(particle など)を表示します。
エクスプレッションはフレームごとに実行され、新しいパーティクルまたは球が作成されます。