----------------------- Page 1-----------------------
第9 章 MEL (Maya Embedded Language)
9.1 使用Maya:MEL
9.1.1 介绍MEL
使用MEL (Maya 内置语言),用户可以使用命令和脚本来扩展和自定义Maya 的功能。本章介绍MEL,
包含有下面的内容:
关于MEL。
学习命令。
输入命令。
使用程序和脚本。
使用Script Editor (脚本编辑器)菜单。
表达式中的MEL。
自定义MEL。
9.1.1.1 关于MEL
MEL 语言是Maya 功能的基础。用户可以使用MEL 命令来创建自己的用户界面,访问高级功能。对于
特殊的场景,可以创建与之匹配的界面,或者对于某个特殊的项目,可以改变默认的参数设置。对于某些使用
Maya 界面不容易改变的属性,可以使用MEL 为其输入精确的数值。另外,用户还可以创建MEL 程序和脚本
来完成自定义的建模、动画、动力学和渲染任务。
本书,Using Maya: MEL,对使用MEL 命令、程序和脚本进行了基础的介绍。如果要进一步地了解MEL
可以使用Maya 的在线文件。在在线文件中,不但包含有本书中的内容,还包含有下面的文件:
MEL 用户界面创建。
按字母顺序的MEL 命令参考。
按功能进行分类的命令参考。
MEL 脚本参考。
用户经常碰到的问题。
MEL 命令的改变。
DG 节点的变化。
这些文件对于使用MEL 和Maya 有很大的帮助。
9.1.1.2 学习命令
MEL 包含有大量的命令来满足不同的需要。一些使用MEL 的典型例子包括快速创建物体、精确地移动
物体,提高工作的效率。例如,用户可以使用下面的MEL 命令来创建一个半径为27.5 单位,名称为bigBoy
的球:
Sphere -radius 27.5 -name bigBoy ;
----------------------- Page 2-----------------------
第九部分 / MEL 模块
用户可以接着用下面的MEL 命令来沿Z 轴旋转bigBoy 90 度:
rotate -r 0 0 90 bigBoy ;
在下面的例子中,假设用户使用关节工具来创建了一个关节,并想沿X 轴方向移动关节5 个单位。用户
可以在不中断创建的情况下,使用下面的命令来移动关节:
move -r 5 0 0;
Maya 的在线技术文件对每个命令的用法、语法、返回值和例子都进行了描述。
9.1.1.3 输入命令
在Maya 中,可以使用多种方式来输入MEL 命令; “Script Editor (脚本编辑器)”或“Command Line
(命令线)”比较常用。用户还可以使用脚本文件,Maya ASCII (.ma)文件、工具架图标、快捷键和表达式
来执行MEL 命令。但最常用的方式是使用“脚本编辑器”。
无论如何输入命令,所有的MEL 命令之后都必须有一个分号“ ; ”来结束它,如下面的MEL 命令:
sphere –name roundy ;
anslateX 7;
what Is ls;
help ls;
ls -typ nurbsSurface;
1. 脚本编辑器
使用脚本编辑器,用户可以输入MEL 命令。选择Window > General Editors > Script Editor 命令或单击Maya
视窗右下角的 (脚本编辑器图标)可以显示脚本编辑器(见图9-1)。
图9-1 脚本编辑器视窗
在脚本编辑器的底部可以输入命令,在顶部显示命令的结果或错误信息。
在底部部分中,用户可以输入命令或进行粘贴操作。使用键盘上字母部分的Enter 键可以另起一行,使用
数字键盘上的Enter 键可以执行命令。如果输入的MEL 脚本命令没有错误,则Maya 会去除底部的脚本。否则
的话,脚本不会被去除,并且错误信息会显示在脚本编辑器的顶部。
在脚本编辑器中,用户可以输入任意数目的MEL 命令,甚至整个脚本文件的内容都可以输入,但在每个
MEL 命令之后必须以分号结束。
2. 命令线
4
----------------------- Page 3-----------------------
第九章 / MEL (Maya Embedded Language)
用户可以使用命令线来输入MEL 命令。选择Options > Command Line 命令可以显示命令线(见图9-2)。
图9-2 命令线
使用命令线和脚本编辑器来输入MEL 命令,也有一些区别:
在命令线中执行命令时,既可以使用数字键盘上的Enter 键,也可以使用数字键盘上的Enter 键,而在脚
本编辑器视窗中执行命令时,则必须使用数字键盘上的Enter 键。
命令线只有一行,如果要输入多个命令,则必须使用分号把每个命令分开
在命令线的右侧,只显示最后一个命令的结果;而在脚本编辑器中显示所有命令的结果。
3. 获取MEL 命令的返回值
一些MEL 命令返回数值。如果需要获取命令的返回值,可以使用键盘左上角的单引号或eval 命令。
使用单引号
用户可以将命令放入两个单引号之间,来取得命令的返回值,并且可以把返回值分配给其它变量,或者
在脚本编辑器中显示它。
例如:
string $a[ ];
$a = `particle -p 5 0 5 -name Sun`;
print ($a);
第一个语句定义了一个名称为$a 的数组。第二个语句执行单引号中的MEL 命令,并把命令的输出值分
配给$a。第三个语
句在脚本编辑器中显示$a 的数值为:
Sun
SunShape
用户可以存储和显示任意的MEL 命令的结果。返回值的类型是由使用的命令决定的。在上面的例子中,
5
----------------------- Page 4-----------------------
第九部分 / MEL 模块
粒子命令返回了一个字符串数组。因此在等号左侧的变量的类型也应该是字符串。
使用eval 命令
使用eval 命令也可以获取返回值。与使用单引号相比,它允许命令中包含字符串变量。而使用单引号,
也有其自己的优点,就是用户可以直接把返回值分配给一个变量,并可以显示它。
例如:
string $command = “ sphere “ ;
eval($command + “- r 5 “);
第一个语句把字符串sphere 分配给变量$command。第二个语句把参数-r 5 添加到字符串sphere 之后,并
执行整个命令sphere -r 5。此时Maya 会在场景中创建一个半径为5 的球。
9.1.1.4 使用程序和脚本
当用户在脚本编辑器或命令线中执行命令时,每个命令执行一个操作。如果要执行多个操作,则可以使
用程序或脚本。程序和脚本有不同的用处。
命令:执行一个操作
程序:使用一个命令来执行多个MEL 命令。
脚本:执行多个操作
1. 程序
MEL 程序是一组MEL 命令,使用一个命令就可以执行一个MEL 程序。程序可以是局部的,或是全局的。
局部程序只有在自己的文件内才有效,而全局程序在文件外也是有效的。
用户可以使用文本编辑器来创建一个脚本内的程序。用户还可以在脚本编辑器中输入程序。
下面是一个MEL 程序:
global proc return_type procedure (arguments)
{
MEL_statements
}
在上面的例子中,斜体的元素是随机的(可以使用,也可以不使用),每个arguments (输入)是由数值
类型和名称组成的。用户可以使用多个输入,然后使用逗号把它们隔开。
在下面的例子中,全局程序,helloValue,它的输入变量是一个整数和一个字符串变量,并返回了一个字
符串。
global proc string helloValue (int $value ,string $person)
{
string $greeting;
$greeting = “Hello “ + $person+” , number “ + $value;
return $greeting;
}
定义程序
在执行一个程序之前,用户必须定义它。在定义程序时,Maya 把它调入到内存中,这样它才能执行。用
户可以使用脚本编辑器的source 命令来定义一个文件中的程序,或使用命令
线来定义脚本中的程序。用户也
6
----------------------- Page 5-----------------------
第九章 / MEL (Maya Embedded Language)
可以直接在脚本编辑器中输入一个程序来执行它。用户也可以使用这种方式来执行脚本。如果用户在执行一个
脚本之后,对其进行了修改,则必须再次执行它,才能使修改起作用。
定义Functions (函数):
一个函数是带有返回值的程序。当用户定义一个函数时,不能使用默认的输入。当用户执行一个函数时,
用户必须提供所有的输入。
例如,用户不能使用下面的方式来定义一个函数:
proc int splat (int $value, bool = true) 编辑器在线使用
语句中的分配符(= )创建了一个默认的分配,这在MEL 中是不允许的。
用户也不能使函数过载。如果多个程序具有相同的名称,但有不同的输入和返回值类型,则最后一个程
序将覆盖上一个。例如,在下面的两个程序中:
rad (int $x) ;
rad (string $foo) ;
第二个程序将覆盖第一个。
执行程序
使用一个MEL 程序和使用其它的 MEL 命令或函数是一样的。例如,如果要执行上面的 MEL 程序
helloValue,在脚本、脚本编辑器或命令线中输入MEL 的名称即可。
helloValue (1, “Jake”);
// Result: Hello Jake, number 1 //
为了成功地调入程序helloValue,则需要一个整数和字符串输入。用户可以不使用括号或逗号来执行程序。
例如,在执行helloValue 时,用户可以使用下面的方式:
helloValue 7 "Torq";
// Result: Hello Torq, number 7 //
2. 脚本
一个MEL 脚本是一个文件,在此文件中,可以包含MEL 命令、MEL 程序或者两者都有。典型地,用户
可以使用MEL 脚本来执行一系列的命令。例如,用户可以使用一个脚本来创建一堵墙,然后为它分配一个砖
的纹理。
用户可以使用文本编辑器来创建脚本,然后把脚本文件保存在硬盘中。MEL 脚本的文件名扩展为.mel.
用户可以在不同的场景或不同的工作阶段中使用脚本。当用户执行MEL 脚本时,它不会变为场景的一部分。
如果要重复脚本的作用,用户必须重新执行脚本。
设置脚本的路径
默认地,Maya 在scripts 目录中寻MEL 脚本,此位置在登录名之下。例如:
在IRIX 系统中的路径: ~elvis/maya/scripts
在Window NT 系统中的路径:C:\Aw\Elvis\maya\scripts
使一个脚本可执行的最简单的方式就是把它们放到上面的目录中。
默认地,在scripts 目录
中包含有一些脚本。这些脚本的名称大多是以menu_开头,这些脚本是Maya 内
部使用的。
用户可以在Maya 寻脚本的默认路径上添加目录:
改变脚本路径:
1)使用Windows NT 资源管理器或双击“我的电脑”图标,来显示Maya NT 的bin 目录。
7
----------------------- Page 6-----------------------
第九部分 / MEL 模块
默认地,此目录是C:\Aw\MayaX.X\bin。
2)双击 来执行命令并显示对话框(见图9-3)。
图9-003 环境设置
在此对话框中显示了安装、项目、插件、脚本和位图目录的路径。这些路径包括安装时创建的默认的路
径和用户自己指定的路径。用户不能改变默认的路径。
对于Plug-in、script 和位图目录可以设置多个路径,在这些路径之间必须用分号隔离开。
用户不能直接在此对话框中改变路径,这时可以使用下面的步骤。
注意:如果用户的计算机中安装了多个版本,则在此对话框中一次只能显示一个版本的路径。版本的名
称显示在标题条上。如果要显示其它版本的路径,单击Previous或Next按钮。如果要保存一个版本的路径,
单击Save按钮。如果用户的计算机中只安装了一个版本,则这些按钮将变为无效。
3)单击Script 路径盒右侧的Change 按钮,会弹出“Change Setting”对话框。
注意,如果改变了Home 路径,则其它的路径也会根据新的Home 路径进行更新。此时用户会被询问是
否确定要进行此操作。如果不需要,可以单击cancel 按钮来取消。
4 )在“Change Setting”对话框中输入或编辑路径。
用户可以在默认路径添加目录,但用户不能替换它们。
如果要输入多个路径,使用分号隔开它们。
单击Browse 按钮,可以在弹出的对话框中寻和选择路径。
如果要恢复原始的默认路径,单击Restore Default 按钮。
5)单击OK 按钮。
在脚本中使用程序
用户可以在脚本中使用全局或局部的程序。全局程序可以脱离它们的文件执行,而局部程序只在它们的
文件中有效。
如果Maya 发现一个没有定义的命令,它会查所有的脚本路径来寻与命令相同名称的脚本。当它发
现此文件后,它会定义文件中的所有的全局程序。另外,文件中所有与命令的名称相同的全局程序都将被执行。
例如,假设用户执行的命令为sayWhat。因为sayWhat 不是Maya 的内部命令。Maya 会查所有的脚本
路径来寻名称为sayWh
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论