eval
 
 
 

MEL コマンドを実行します。

string eval(string command)

command は、二重引用符で囲んだコマンド文字列、またはコマンドを表す文字列型変数です。

戻り値は、コマンドを実行した結果を表す文字列です。

注:eval コマンドは最上位の MEL スコープで 実行されるので、グローバル関数として認識され、プロシージャ内で定義した関数(ローカル関数)としては認識されません。詳細については、 グローバル変数とローカル変数を参照してください。

例 1

eval("select -cl")

select -cl コマンドを実行し、シーン内のオブジェクトの選択をすべて解除します。この例では戻り値は使用されませんが、コマンドの出力結果が返されます。

例 2

string $cmd = "select -cl";
eval($cmd);

1 番目の文は、select -cl というコマンド文字列を文字列型変数 $cmd に代入します。2 番目の文は、$cmd の内容(select -cl コマンド)を実行します。

例 3

string $mycommand = "sphere";
eval($mycommand+"-r 5");

1 番目の文は sphere という文字列を変数 $mycommand に代入します。2 番目の文により、「-r 5」が文字列「sphere」の後ろに追加され、「sphere -r 5」というコマンドが実行されます。これによって、半径が 5 グリッドの球体が作成されます。

例 4

string $a[];
$a = eval("ls -lights");
print($a);

1 番目の文は $a という文字配列を定義します。2 番目の文は MEL コマンド ls -lights を実行し、その出力を配列 $a に割り当てます。3 番目の文は $a の内容を スクリプト エディタ(Script Editor)に次のように表示します。

ambientLightShape1
directionalLightShape1

コマンドの出力結果を表す行が、それぞれ新しい行に表示されます。コマンドの出力結果の各行は配列の要素です。Maya では配列の各要素が新しい行に出力されます。

例 5

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 など)を表示します。

エクスプレッションはフレームごとに実行され、新しいパーティクルまたは球体が作成されます。