eval

 
 
 

执行 MEL 命令。

字符串 eval(字符串命令)

命令是以引号括起的命令字符串或包含命令的字符串变量。

返回值包含执行命令返回的命令输出。

注意

eval 命令在 MEL 范围的顶层执行。因此,它可以识别全局变量,但不会识别在程序内定义的变量(局部变量)。有关详细信息,请参见全局变量和局部变量

示例 1

eval("select -cl")

执行命令 select -cl,取消选择场景中的所有对象。尽管本示例中未使用返回值,但它仍包含命令输出。

示例 2

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

第一个语句将命令字符串 select -cl 指定到字符串变量 $cmd。第二个语句执行 $cmd 的内容,即命令 select -cl

示例 3

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

第一个语句将字符串 sphere 指定给变量 $mycommand。第二个语句将 -r 5 附加到字符串 sphere,并执行完整命令 sphere -r 5。这将创建半径为 5 个栅格单位的球体。

示例 4

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

第一个语句定义名为 $a 的字符串数组。第二个语句执行 MEL 命令 ls -lights,然后将命令输出指定到数组 $a。第三个语句将 $a 的内容显示到“脚本编辑器”(Script Editor),如下所示:

ambientLightShape1
directionalLightShape1

每行命令输出将显示在新行中。每行命令输出都是一个数组元素。Maya 格式数组在新行上输出每个数组元素。

示例 5

假定已经在 Maya 脚本目录中创建了名为 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);

第一个表达式语句在 bunk.mel 脚本文件中执行 bunk() 程序。在 bunk 程序中,if-else 语句生成介于 0 和 2 之间的随机浮点值,然后将该值与 1 比较。

如果值小于 1,该语句会将 MEL 命令字符串 particle 指定到 $fog。如果该值大于 1,$fog 将接收命令字符串 sphere

该程序将完成执行并将 $fog 的值返回给调用程序,即表达式中的 bunk()。这会将命令字符串指定给变量 $name。

eval 函数将执行存储在 $name 中的命令字符串。例如,该语句可能会执行 particle,在工作区的原点创建粒子。

第四个语句显示 $name 的内容,例如,particle

表达式将执行每个帧,并创建一个新粒子或球体。