一、Maya中使用Python的基础知识。
Maya支持在任何使用MEL命令的地方使用Python样式的脚本。通过Python脚本可以访问所有的内置Maya命令(如sphere、Is等)。
在Maya程序里调用Python和调用MEL有很多不同之处,因为它们二者的语言编写方式存在着很大不同。下面就来介绍在Maya里使用Python的-些基础知识。
1.1在Maya里输入Phthon命令
以下是在Maya里调用Python命令的几种方法。
01脚本编辑器。
为了方便同时在Maya中使用MEL和Python脚本,脚本编辑器中有MEL和Python的不同编译器。只要进入MEL编译器,就直接把命令发送到MEL处理器;同样,进入Python编译器,就直接启用Python处理器执行命令。
在返回Python结果前面使用注释#字符来标识。在脚本编辑器中,可以使用自动拼写功能来帮助查找指令。
02命令框与工具架。
当希望执行一个指令的时候,可以通过单击命令框的后缀来选择进入MEL还是Python指令,如下图(左)所示。
如果要把命令放入工具架,那么可以使用鼠标中键拖动MEL脚本或Python脚本,将其移动至工具架上,此时系统会弹-一个对话框,提示保存脚本类型是MEL还是Python,如下图(右)所示。
03 Maya的Python模块。
Python的指令大部分已经绑定在本机的Maya命令中,比如Cmds模块。为了访问这些命令,
必须进入下面的Python编泽器进行脚本编辑:
import maya.cmds
这是允许用户使用的Maya命令。
例如:
maya.cmds.Is()
maya. cmds. sphere( radius=4)
当然也可以把模块用更简短的形式导入Maya,
例如:
import maya.cmds as cmd
cmad.sphere()
导入maya.cmds后,自动保存在userSetup.py文件中,用户可以按自己喜欢来修改它的名
字,例如下面的例子:
import maya.cmds as mc mc. sphere()
或者把Maya命令导入并作为顶层指令使用:
from maya.cmds import
之后就可以直接调用Maya命令:
Is() sphere( radius=4 )
把Maya命令导入并作为顶层指令使用会覆盖掉Python内置和其他模块。
1.2 后缀(命令格式)
Python后缀处理方式和在MEL后缀处理方式也有很大不同。MEL被设计成Shell命令方式的语法。在Python中 的Maya命令的格式语法已经完全符合了Python的执行方式。
01 简单的后缀。
MEL中创建球体命令如下:
sphere -radius 4;
在Python中,半径后缀被改写,而这更像是数据传递:
maya.cmds.sphere( radius=4 )
02 多组数据。
如果一个后缀多个数据的话,那么必须把数据转化成表或数组。下面是一个后缀中有3个数据的例子:
#元组:
maya.cmds.ambientLight( rgb=( 0.2, 0.3, 0.4))
#列表:
maya.cmds.ambientLight( rgb=[0.2, 0.3, 0.4])
03 判定格式(真/假)。
一般的命名后缀必须赋于相关的数值,但是Maya的后缀并不都需要数值,例如Is-sl, 为了保持相同的语法,在Maya中的Python规定要求给不带数值的后缀赋于布尔真假值( True/False )。如果布尔值为假,那么后缀就为空;如果其值为真,则后缀需要被执行。例如:
#列出选择 :
maya.cmds.Is( selection=True )
#不列出选择:
maya.cmds.Is( selection=False )
04 命名多个后缀。
有些后缀使用时需要多个后缀在同一条命令中。例如在MEL中的定义:
Is -type nurbsSurface -type transform;
Python需要使用已经定义过格式类型的后缀,并赋于其列表或数组变量:
maya.cmds.Is( type=["nurbsSurface' 'transform'] )
在上面例子中,后缀带有多个值,并且被多次使用,它的值是列表或数组。数组可以代替列表,这样可以使用由数组组成的列表、列表组成的数组或数组组成的数组。例如,在MEL中的curveOnSurface命令:
curveOnSurface -d3 -uv 00 -uv 0.30.5 -uv 0.5 0.6-uv 0.9 1.0 surface1;
在Python中:
maya cmds.curveOnSuriace( 'surface1',d=3,uv=[(0,0).(0.3,0.5),(0.5,0.6),(0.9, 1,0)])
如果过多地使用后缀,Python则会返回一个重复关键后缀的错误。
05 范围。
Maya命令中有3种类型的范围:时间、索引和浮点。在Python中必 须使用元组指定所有范围。任意元组都可能有一一个或两个值。具有一个值的元组指定为一个值(加括号并后跟逗号) ;多个单值元组使用集表示法指定。
时间范围也支持单位。若要指定单位,必须使用字符串。由于每个值是单独解析的,因此可以混合使用单位。
以下是有效的时间范围:
(1,)(1,10) ("1sec',' 10sec") ("1min:2min')
下表以cutKey命令为例来指定时间范围和索引范围。
06 对Maya某些命令标志的更改。
对Maya命令所做的某些标志更改是必需的,因为Python中的多用途标志的参数必须以列表传递给标志。对于其中必须混合并匹配多用途标志的命令而言,这将导致出现问题。由于Python每个多用途标志的参数均以单独的列表提供,因此无法将这些参数混合使用。已扩展依赖于此的几个命令,以便单个多用途标志可以处理各个多用途标志的作业。
这些命令包括:
●polyAppendVertex :可用于取代point、vertex和hole标志 的新append标志。
●polyAppend :可用于取代point、edge和hole标志 的新append标志。
●polySplit :可以用于取代facepoint和edgepoint标志的新insertpoint标志。
●polyCreateFacet:经过修改后可用于指定洞的现有point标志。
●roundConstantRadius :可替换使用应该混合使用的sidea和sid b的新side标志。
CommandsPython参考文档中记录了所有这些标志的使用。
在所有情况下,这些标志都是向后兼容的。所有旧标志仍保留在原位。
1.3 参数和对象
除了标志,Maya命令还使用参数和对象。参数是命令所需的固定类型的值。例如,move命令使用3个参数表示移动的X、Y和Z值。对象是命令在其上操作的实体(例如,场景中的某个对象或UI元素)。基于当前的选择列表,一个命令针对的对象数量是变化的,并且有时对象是隐式的。
对象和参数将如同在MEL中一样传递给命令,但传递的顺序必须如下所示:
command arguments object flags/named arguments
这不同于MEL, MEL中的排序要求对象显示在参数列表结尾处。但是,Python要求命名参数显示在所有其他参数之后。
1.4 后缀类型对照表
下表为在Maya Python模块中,后缀类型变化的简单对照。
1.5 标准输入( stdin )实现
Python支持从STDIN (标准输入)进行读取。在Python中, 这是通过从sys.stdin进行读取或调用raw_ input来实现的。
Maya会使用其自身的实现来覆盖sys stdin。如果要使用Python自身的标准输入对象,可通过引用sys._ stdin__ 来实现此目的。
示例:
在Script Editor (脚本编辑器)中输入以下内容之一来显示Python STDIN对话框:
●使用raw input
raw_ input()
●使用sys.stdin
import sys
inp = sys. stdin.eadline()
●自定义命令提示
import maya.cmds as cmds
inp = cmds.promptDialog(message= hello')