三、MEL与Python之间的重要差异
3.1 更改
在Python中可以访问使用MEL runTimeCommand命令创建的MEL命令。例如:
在MEL选项卡中:
runTimeCommand -command "sphere -name myName mySphere;
在Python选项卡中:
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.MyBal()
3.2 其他差异
01 在Python中不 支持eval和evalDeferred Maya命令。但是,请注意下列事项。
●Python有一个用于对Python表达式求值的内置eval函数。
●Python具 有用于对MEL表达式求值的maya.mel.eval。
●在Python中,evalDeferred已由maya.utils executeDeferred()取代。
02 MEL具有它自己的警告和错误消息报告机制,该机制已与Maya消息报告集成。这包括命令行上的颜色反馈。Python附 带系统模块,这些模块提供警告和错误报告功能;但是,这些模块未集成到Maya中,并且在命令行中不提供颜色反馈。
必须将Python中的单位指定为带引号的字符串;例如:
maya.cmds. scale(3, 3, 3, r=True, p=('0cm, '0.5cm'; '0cm))
03 Python脚本中的命令标志参数采用一个包含Python脚本的字符串( 就像MEL等效项一样)或一个Python可调用对象(如函数)。
例如:
import maya.cmds as cmds
def defaultButtonPush(*args):
print 'Default was pushed. '
cmds. window( width= 150 )
cmds. columnl ayout( adjustableColumn=True )
cmds. button( label= Default', command=defaultButtonPush )
cmds. buttion( label='Left', align-=lft')
cmds. button( label= Center, align= 'center')
cmds. button( label= Right', align= right' )
cmds. showWindow()
04 MEL使用不同于Python的语法来指定值的范围。在MEL中,使用“★物来指定值的范围,而不使用,例如:
select -r surface1c**][O];
在Python中,使用不带引号的*指定值的范围。对于上面的示例,在Python中则为:cmds. select( 'surface 1.cv[ "][O]', r=True)
3.3返回和回显结果
存在两种方式,MEL和Python在返回和回显结果方面会有差异。一个是与正确的脚本执行相关的,而另一个是表面问题。本节将讨论回显结果和返回结果,有时会混淆它们。
本节主要对熟悉MEL但不熟悉Python的人员有帮助。
3.3.1 返回结果
MEL在执行脚本时会返回最后执行的语句的结果(如果有)。将值指定给变量和返回结果的过程调用的语句属于返回结果的语句类型。例如,以下代码块将有一个结果,MEL会将该结果回显到脚本编辑器和命令行消息区域:
if($foo== 1 ) $bar= 42; else $bar= 7;
相比之下,在Python中指定值的语句不返回结果,尽管Python执行该指定。
使用Python的语法,只需引用一个变量即可返回其值。MEL的语法不允许只是编写变量的名称作为一条完整的语句。
在Python中可以将上述MEL代码片段编写为以下内容。最后一-行(bar)会返回结果。
iffoo== 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;' )
可以这样做是因为赋值语句会返回个结果,该语句是脚本中传递到eva|命令的最后一条语句。
在Python中只能访问全局范围的MEL变量。
3.3.2回显结果
MEL会回显由脚本的最后一条语句返回的结果( 如果有),而不管脚本中有多少行。Python仅回显单条语句的结果。
热门课程
专业讲师指导 快速摆脱技能困惑相关文章
多种教程 总有一个适合自己专业问题咨询
你担心的问题,火星帮你解答在3ds MAX中创建建筑物或店铺模型时,像门窗、橱窗这类细节,通常会用传统贴图来呈现。但传统贴图有个大问题:当场景中的相机视......
作为一名游戏开发者应深知管理海量素材时命名规范的重要性。它就像给文件贴上清晰易懂的“身份证”,能让整个工作流程更加顺畅。今天,......
《鬼灭之刃》最终章《无限城篇》三部曲首部曲正式定档2025年7月18日,官方同步释出5分钟定档预告。作为漫画终极篇章,本篇将呈......
2025年春天的这则教育公告,像投入湖心的石子,在游戏从业者与教育界激起层层涟漪。当游戏艺术设计专业赫然出现在教育部本科专业目......
自从去年9月,腾讯旗下子公司“腾娱互动”为火星时代的同学们举办专场宣讲会以来,已经有数名学姐学长,先后成功入职腾娱互动及其旗下......
招过那么多新招过那么多新人,专业还是火星的学生人,专业还是火星的学生强
在火星时代,向来都有传帮带的传统。什么意思呢?大概就是这么一个流程:学姐学长毕业顺利入职——发展稳定——被公司委以重任——代表......