当前位置:首页 >教程首页 > Maya >Maya中Python脚本的使用(一)

Maya中Python脚本的使用(一)

发布时间:2019-08-22 17:43:25

一、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,如下图(右)所示。

Maya中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命令为例来指定时间范围和索引范围。

Maya中Python脚本的使用(一)

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模块中,后缀类型变化的简单对照。

Maya中Python脚本的使用(一)

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')

学员作品赏析
  • 2101期学员李思庭作品

    2101期学员李思庭作品

  • 2104期学员林雪茹作品

    2104期学员林雪茹作品

  • 2107期学员赵凌作品

    2107期学员赵凌作品

  • 2107期学员赵燃作品

    2107期学员赵燃作品

  • 2106期学员徐正浩作品

    2106期学员徐正浩作品

  • 2106期学员弓莉作品

    2106期学员弓莉作品

  • 2105期学员白羽新作品

    2105期学员白羽新作品

  • 2107期学员王佳蕊作品

    2107期学员王佳蕊作品

专业问题咨询

你担心的问题,火星帮你解答
×

确定