Maya-Python开发流程
/ / 点击 / 阅读耗时 8 分钟Maya 命令
所有本地 Maya 命令的 Python 绑定位于 maya.cmds 模块中。为了访问这些命令,在每个会话中,必须在“脚本编辑器”(Script editor)的 Python 选项卡中输入以下命令:
1 | import maya.cmds |
对应Mel
1 | sphere -radius 4; |
对于多个参数
1 |
|
并非所有的 Maya 标志都需要一个值(例如,ls -sl)。实现需要为通常不使用任何参数的标志指定布尔参数。如果布尔值为 False,那么将忽略该标志;如果为 True,那么将使用该标志
1 |
|
多个命名参数
1 | ls -type nurbsSurface -type transform;ls -type nurbsSurface -type transform; |
范围
Maya 命令中有三种类型的范围:时间、索引和浮点。在 Python 中必须使用元组指定所有范围。任意元组都可能有一个或两个值。具有一个值的元组指定为放在括号中且后跟一个逗号的值;多个单值元组使用集表示法指定。
命令标志更改
polyAppendVertex :可用于取代 point、vertex 和 and hole 标志的新 append 标志。
polyAppend :可用于取代 point、edge 和 hole 标志的新 append 标志。
polySplit :可以用于取代 facepoint 和 edgepoint 标志的新 insertpoint 标志。
polyCreateFacet :经过修改后可用于指定洞的现有 point 标志。
roundConstantRadius :可替换使用应该混合使用的 sidea 和 sideb 的新 side 标志。
参数类型参考
对话框
1 | #使用 raw_input |
MEL/Python 通信
MEL 命令 (Python) 会提取字符串并将其传递到 Python 中予以执行。Python 命令会尝试将结果转化为 MEL 类型
只有带有单个 Python 语句的字符串才能返回结果。这是当前由 Python 施加的限制。
Python 的类型系统比 MEL 更复杂,因此无法将所有 Python 数据类型转化为本地 MEL 类型。Python 命令会转化自身知道如何进行处理的数据类型。对于其他数据类型,则会需要一个字符串来表示对象并进行返回。
从Python调用Mel
aya.mel.eval() 函数。由于 Python 的类型支持更灵活,此函数的转化效果会比 MEL 的 Python 命令更好。
1 | import maya.mel as mm mm.eval("polySphere;") |
创建Help
1 | import maya.cmds |
关于Python多线程
Python 语言附带有内置线程支持。该功能在 Maya 中可用,但是存在 Python 开发人员需要注意的一些重要限制事项。
Maya API 和 Maya 命令架构不是线程安全的架构。如果在主线程外调用 Maya 命令,它们会抛出一个异常,从主线程以外的线程中使用 OpenMaya API 时会产生无法预料的副效应
maya.utils.executeInMainThreadWithResult() 函数可以接受包含 Python 代码的字符串或 Python 可调用对象(例如函数)。如果是后者,executeInMainThreadWithResult() 也接受在其运行时传递给可调用对象的常规参数和关键字参数。
在下一个空闲事件期间,会在主线程中执行脚本或可调用对象。在主线程空闲并运行代码之前,调用 executeInMainThreadWithResult() 的线程会阻塞。主线程执行完代码后,executeInMainThreadWithResult() 会返回结果。如果 executeInMainThreadWithResult() 是从主线程调用的,则它会立即运行代码并返回结果。
1 | import maya.utils import maya.cmds |
Mel和Python差异
在 Python 中不支持 eval 和 evalDeferred Maya 命令。
- Python 有一个用于对 Python 表达式求值的内置 eval 函数。
- Python 具有用于对 MEL 表达式求值的 maya.mel.eval。
- evalDeferred 已由 maya.utils.executeDeferred() 取代。
MEL 具有它自己的警告和错误消息报告机制,该机制已与 Maya 消息报告集成。这包括命令行上的颜色反馈
Python 附带系统模块,这些模块提供警告和错误报告功能;但是,这些模块未集成到 Maya 中,并且在命令行中不提供颜色反馈。