[Maya]Mel基础教程之二

来自:http://www.5i58.net   编辑:杨一   发布时间:2006-4-9 14:01:24
maya动画培训课程

                                    [Maya]Mel基础教程之二

使用脚本语言结点

一个脚本语言结点是一个包括了一个MEL脚本语言程序的结点。
当该结点产生或者当该结点被破坏时,该程序被执行,它取决于脚本结点的类型。

本章包括以下内容:1、了解脚本语言结点;2、产生脚本语言结点;3、测试脚本语言;4、编辑脚本语言结点;
5、设立脚本语言结点的执行;6、删除脚本语言结点。



--------------------------------------------------------------------------------
1、了解脚本语言结点
脚本语言结点是把一个MEL脚本语言程序存储到一个Maya场景文件中的一种方法。
脚本语言结点也包含了用于产生用户界面的所有MEL指令,并被用MAYA文件保存。

你可以用不同的方法执行脚本语言程序。可以指明一个脚本程序结点执行它的程序:

当该结点是从一个文件中读出的;

在渲染一桢图像的之前或者之后;

在渲染一个动画的之前或者之后。


当一个文件关闭着时使用File > Open或者File > New

一个脚本语言程序结点有三个属性:
Before、After和Type。决定于脚本程序的类型,当执行该程序时,说明Before和After属性。
-------------------------------------------------------------------
2、产生脚本语言结点

可以使用表达式编辑器产生脚本语言结点。

为了产生一个脚本语言结点:

1--选择Window > Expression Editor。

2--在Expression Editor中选择Select Filter > By Script Node Name。

任何现存的Script Nodes显示在Script Nodes表中。

3--在Expression Editor的Script window中输入脚本程序。

4--在Script Node Name框中输入一个名字。

5--定义你想要使脚本成为一个之前或者之后的脚本程序。

6--点击Create键。

这产生脚本结点。现在你可以定义它的类型。

7--从Execute On 下拉菜单里选择以下的一个脚本程序结点类型:

Demand
当你使用scriptNode指令,隐含地需求它时,运行脚本文件(看在线指令文件的scriptNode指令的信息)。
忽略这种类型的脚本文件的之前和之后的属性。

Open/Close
如果你已经指定了该脚本文件作为之前的脚本文件,当以批处理模式读文件时脚本被执行。如果你把它
作为之后的脚本文件,当文件被关闭或者没有以图示用户界面模式提供,或者当该结点被删除时,它被执行。

GUI Open/Close

如果你已经指定了该脚本文件作为之前的脚本文件,当以图示用户界面模式运行MAYA,在读文件时脚本文件
被执行。如果你把它作为之后的脚本文件,当文件被关闭,或者没有以图示用户界面模式提供,或者当该结
点被删除时,它被执行。

UI Configuration (内部)

之前的脚本文件包括了用户界面设置的信息。它是由Maya或者一个plug-in为了保存面板排列和编辑状态信息
而自动的产生的。当你打开一个文件时,这个脚本结点执行它的脚本文件。在执行之后,该结点被删除掉。之
后的脚本是不会运行的。如果一个文件被提供或被输入,这个结点将会不存在。

软件渲染

如果你选派好脚本作为之前的脚本,脚本的执行在一个动画之前被渲染。如果你选派好脚本作为之后的脚本,
脚本的执行在一个动画之后被渲染。

软件桢渲染

如果你选派好脚本作为之前的脚本,脚本的执行在一个桢之前被渲染。如果你选派好脚本作为之后的脚本,脚
本的执行在一个桢之后被渲染。

8--点击Edit键给脚本结点赋类型。

9--如果你想增加另外一个脚本结点,点击New Script Node键。

Script窗口和Script Node Name框被清除,你可以输入一个新的脚本结点。

-------------------------------------------------------------------
3、测试脚本程序

可以使用表达式编辑器对脚本程序进行测试。

为测试一个脚本程序:

1--选择Window > Expression Editor。

2--在表达式编辑器中选择Select Filter > By Script Node Name。

3--在Script window中输入脚本程序,或从Script Nodes 表中。

4--点击Test Script键。

错误显示在脚本语言编辑器中。

-------------------------------------------------------------------
4、编辑脚本语言结点

可以使用表达式编辑器对脚本语言结点进行编辑。

为了对脚本语言的编辑定义一个编辑器:

1--选择Window > Expression Editor。

2--在表达式编辑器中选择Select Filter > By Script Node Name。

3--从编辑器下拉菜单中选择一个编辑器。

为了编辑一个脚本语言结点:

1--选择Window > Expression Editor。

2--在表达式编辑器中选择Select Filter > By Script Node Name。

3--选择你想在Script Nodes list中要编辑的脚本语言结点。

4--在Script window中编辑该脚本语言结点。

5--如果你想撤消你的改变,点击Reload。Maya重装原来的脚本语言结点。

6--为了清理Script window,点击Clear键。

-------------------------------------------------------------------
5、设立脚本语言结点的执行

为了设立脚本语言结点的执行:

1--选择File > Open Scene。或选择File > Open然后在Open Scene window中点击Options。

2--点击复选框将Execute Script Nodes打开或者关闭。

-------------------------------------------------------------------
6、删除脚本语言结点

可以使用表达式编辑器删除脚本语言结点。

为了删除一个脚本语言结点:

1--S选择Window > Expression Editor。

2--在表达式编辑器中选择Select Filter > By Script Node Name。

3--选择你想在Script Nodes list中要删除的脚本语言结点。

4--点击Delete按键。

定义数据

本章描述MEL的数据类型它们之间的转换:1、变量;2、常数;3、数据类型转换;4、限制。


--------------------------------------------------------------------------------
1、变量
所有变量名以$开始。变量名不包括空格和特殊字符。你可以使用下划线和数字作为变量名但开头不能是数字。
识别大小写,如$temp不同于$Temp。

例:

int $radical7Mark; // 有效
int HEYchief; // ERROR: 开头缺"$"
int $ nine; // ERROR: 开头不是"$"
int $_VAL_ID___AIT_; // 有效
int $howdyYa`ll; // ERROR: 含有无效字符
int $1Bill; // ERROR: 开头不能是数字

有以下五种变量类型:

类型 意义 例子
int 整数 (...-2, -1, 0, 1, 2...)10, -5, 和 0
float 小数 392.6, 7.0, and -2.667
string 一个或更多的字符 "Whats up, chief?"
vector 三个浮点数 <<3,?7.7,?9.1>>
matrix 浮点数阵列 <<1.1, 2, 3; 6.7, 5, 4.9>>

以上类型除matrix外,都可以是一个阵列。如,一个三元素的整数阵列是一个跟一个的三个整数。

声明和标注变量

声明一个变量是说明变量的名字和类型;标注一个变量是给已生命的变量一个专有的值。下例是将声明和标注合为一步:

int $temp = 3;
float $Temp = 222.222;
string $tEmp = "Heya kid.";
vector $teMp = <<1, 2.7, 3.2>>;
matrix $temP[2][3] = <<4.5, 1, 0.2; -13, 9911, 0.007>>;

当生命矩阵变量时,必须包括二维阵列的尺寸。

下例说明对整型、浮点、字符串和矢量阵列型变量阵列的声明和标注:

int $TEmp[5] = {100, 1000, -70, 2, 9822};
float $TeMp[4] = {43.3, -10.7, 0, 82.5};
string $TemP[3] = {"Lord", "Flies", "cool brown fox2."};