Python 和 MEL 之间的通信
 
 
 

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 通信”

从 Python 中调用 MEL 命令

  1. “脚本编辑器”(Script Editor)中选择一个“Python”选项卡。
  2. 导入 MEL 模块
    import maya.mel
    

    maya.mel 模块用于在 Python 中对 MEL 表达式求值。

  3. 通过键入以下内容调用 MEL 命令:
    maya.mel.eval("sphere -radius 3;")
    

    这样将在原点处创建一个半径为三的球体,就好像使用了 Python 命令。

  4. “脚本编辑器”(Script Editor)中选择一个“MEL”选项卡
  5. 通过键入以下内容声明“MEL”选项卡中的变量:
    global float $MyMELVariable=22.7;
    

    从 Python 中只可以使用全局 MEL 程序、变量和脚本。

  6. 选择一个“Python”选项卡。
  7. 通过键入以下内容将 MEL 变量的值传递到 Python:
    TransferMELvar = maya.mel.eval("$temp=$MyMELVariable")
    

    在 MEL 和 Python 之间传递变量时,函数将返回语句的值。MEL 语法不允许将变量用作命令字符串来返回变量的值。在 MEL 中为变量指定一个值时,该值将返回到脚本编辑器。在 eval() 语句中,可以将全局 MEL 变量的值指定给临时变量。

  8. 使用 Python 命令输出已传递的 MEL 变量的值:
    print TransferMELvar;
    

从 MEL 中调用 Python 命令

  1. “脚本编辑器”(Script Editor)中选择一个“MEL”选项卡。

    “MEL”选项卡中键入的命令将在 MEL 中执行。

  2. 通过键入以下内容调用 Python 命令:
    python "cmds.sphere()";
    

    这样将在原点处创建一个球体,就好像已在“Python”选项卡中键入命令。

  3. “脚本编辑器”(Script Editor)中选择一个“Python”选项卡
  4. 通过键入以下内容声明“Python”选项卡中的变量:
    MyPythonVariable=22.7
    
  5. “脚本编辑器”(Script Editor)中选择一个“MEL”选项卡。
  6. 通过键入以下内容将 Python 变量的值传递到 MEL:
    float $TransferVarPy = `python "MyPythonVariable"`;
    

    当返回值通常返回到“脚本编辑器”(Script Editor)历史窗口时,在 MEL 中使用求值反向引号以使用指定命令的返回值。

  7. 在 MEL 中输出已传递的变量值:
    print $TransferVarPy;
    
    提示

    使用不可见的用户界面元素也可以完成值在 Python 和 Maya 之间的传递。使用两种脚本语言均可编辑和查询用户界面元素的内容。