runTimeCommand -command "sphere -name myName" mySphere;
import maya.cmds as cmds cmds.mySphere()
同样,可以使用以下语法创建 Python 运行时命令,并从 Python 中调用这些命令:
import maya.cmds as cmds def mySphere(): cmds.sphere(name='myName') cmds.runTimeCommand('MyBall', command='mySphere()') cmds.MyBall()
有关详细信息,请参见从 Python 调用 MEL。
maya.cmds.scale(3, 3, 3, r=True, p=('0cm', '0.5cm', '0cm'))
import maya.cmds as cmds def defaultButtonPush(*args): print 'Default was pushed.' cmds.window( width=150 ) cmds.columnLayout( adjustableColumn=True ) cmds.button( label='Default', command=defaultButtonPush ) cmds.button( label='Left', align='left' ) cmds.button( label='Center', align='center' ) cmds.button( label='Right', align='right' ) cmds.showWindow()
select -r surface1.cv["*"][0];
在 Python 中,使用不带引号的 * 指定值的范围。对于上面的示例,在 Python 中则为:
cmds.select( 'surface1.cv[*][0]' , r=True)
存在两种方式,MEL 和 Python 在返回和回显结果方面会有差异。一个是与正确的脚本执行相关的,而另一个是表面问题。本节将讨论回显结果和返回结果,有时会混淆它们。
本节主要对熟悉 MEL 但不熟悉 Python 的人员有帮助。
MEL 在执行脚本时会返回最后执行的语句的结果(如果有)。将值指定给变量和返回结果的过程调用的语句属于返回结果的语句类型。例如,以下代码块将有一个结果,MEL 会将该结果回显到脚本编辑器和命令行消息区域:
if ( $foo == 1 ) $bar = 42; else $bar = 7;
相比之下,在 Python 中指定值的语句不返回结果,尽管 Python 执行该指定。
使用 Python 的语法,只需引用一个变量即可返回其值。MEL 的语法不允许只是编写变量的名称作为一条完整的语句。
在 Python 中可以将上述 MEL 代码片段编写为以下内容。最后一行 (bar) 会返回结果。
if foo == 1: bar = 42 else bar = 7 bar
如果需要在一种语言的上下文中使用在另一种语言中计算的值,那么了解该差异是很重要的。例如,如果希望在 MEL 中使用 Python 值,只需执行以下命令:
$myMELvariable = python ("myPythonVariable");
反之,如果希望在 Python 中使用 MEL 变量,则需要执行类似以下的命令:
import maya.mel myPythonVariable = maya.mel.eval ('global $myMELvariable; $temp=$myMELvariable;' )
可以这样做是因为赋值语句会返回一个结果,该语句是脚本中传递到 eval 命令的最后一条语句。