Maya 中的 Python 和 MEL 各自都具有内置命令,以进行相互间的通信。Python 和 MEL 之间通过调用另一种语言中的命令,然后对上次执行命令的结果求值,从而进行通信。
Python 使用 eval() 命令与 MEL 通信。与本课程中的其他 Python 命令不同,eval() 函数不属于 Maya 命令模块 (maya.cmds)。eval() 函数属于 maya.mel 模块。eval() 函数可通过将命令当作字符串发送来调用 MEL 脚本或执行 MEL 命令。使用分号分隔命令可在字符串中调用多个 MEL 命令。Python eval() 函数在 eval 括号中返回上次执行的 MEL 脚本或命令的结果。
MEL 使用 python 命令与 Python 通信。python 命令接受字符串作为其唯一的参数。字符串将发送到 Python 以进行求值,然后结果会返回到 MEL。由于 Python 的类型系统更具描述性,因而对于返回到 MEL 的某些 Python 命令结果,其数据类型会发生修改。有关类型转化的详细信息,请参见《Maya 用户手册》中的“MEL/Python 通信”。
import maya.mel
maya.mel.eval("sphere -radius 3;")
global float $MyMELVariable=22.7;
TransferMELvar = maya.mel.eval("$temp=$MyMELVariable")
在 MEL 和 Python 之间传递变量时,函数将返回语句的值。MEL 语法不允许将变量用作命令字符串来返回变量的值。在 MEL 中为变量指定一个值时,该值将返回到脚本编辑器。在 eval() 语句中,可以将全局 MEL 变量的值指定给临时变量。
print TransferMELvar;
python "cmds.sphere()";
MyPythonVariable=22.7
float $TransferVarPy = `python "MyPythonVariable"`;
当返回值通常返回到“脚本编辑器”(Script Editor)历史窗口时,在 MEL 中使用求值反向引号以使用指定命令的返回值。
print $TransferVarPy;