MEL 是来源于 UNIX 壳脚本的一种语言。因此,MEL 在很大程度上是依靠执行命令来完成操作(如执行 UNIX 壳中的命令),而不像其他语言那样操纵数据结构、调用函数或使用面向对象的方法。
用于控制 Maya 的大多数命令类似于 UNIX 命令行实用程序:通过许多选项来修改自身行为的独立小程序。
MEL 中的指定运算符是等号 (=)。MEL 还具有类似于 C 和 Java 语言的快捷指定运算符(+=、-=、/=、*=、++、--等)。
MEL 是一种强类型语言 (strongly typed language),但在多数情况下允许隐式声明和键入。当声明一个变量时,便同时声明了其类型,并可以选择指定一个初始值。
变量名称以 $ 开头,后面带一个字母,然后是包含字母/数字/下划线的任意组合。与 PERL 不同的是,所有类型的变量(标量和复合)均以 $ 开始。
MEL 具有常用整数 (Int)、浮点 (float) 和 字符串数据类型。它还包含向量数据类型,这是浮点的三元值(在处理 3D 数据时非常有用)、数组(变量大小的列表,其中所有元素都是同一类型)和矩阵(矩阵是固定大小的浮点二维表)。数组中的所有项目必须是同一类型。
int $a = 5; float $b = 3.456; vector $v = <<1.2, 3.4, 6.5>>; float $ar[] = {1.2, 3.4, 4.5}; // An array of floats matrix $mtx[3][2]; // A 3x2 matrix of floats
if ( $a == $b) { ... } else if ($a > $b) { ... } else { ... } $a = ($b > 10) ? $c : ($c - 10); switch ($color) { case "blue": ... break; case $c1: ... break; default: ... break; } while ($a < size($arry)) { ... } do { ... } while ($a > 0); int $i; for ($i = 10; $i > 0; $i--) { print($i+"...\n"); } print("Blastoff!!!"); string $arry[3] = {"red","green","blue"}; for ($k in $arry) { ... }
if ($a > $b) {print("Hello");}; // Both semicolons are required!
与某些脚本语言/环境不同(但与 Logo 语言类似),声明一个可返回值的表达式并不会自动在 MEL 中打印值。这样做反倒会导致错误。
3 + 5; // Error: 3 + 5; // // Error: Syntax error // print(3+5); 8
在 MEL 中,经常会使用相同的命令来创建操作、编辑现有操作并查询有关现有操作的信息。在每种情况下,标志都会控制命令所要进行的操作(创建、编辑或查询)。
// Create a sphere named "mySphere" with radius 5 sphere -radius 5 -name "mySphere"; // Edit the radius of mySphere sphere -edit -radius 3 "mySphere"; // Print the radius of mySphere sphere -query -radius
在 MEL 中,可按照命令语法(类似于 UNIX 壳命令)和函数语法键入命令。使用命令语法,可以省略单字字符串周围的引号,并使用空格而不是逗号来分隔参数。
setAttr("mySphere1.translateX",10); // Function syntax setAttr mySphere1.translateX 10; // Command syntax
函数语法会自动返回值。若要使用命令语法获取返回值,必须将命令扩在反引号中。
$a = getAttr("mySphere.translateX"); // Function syntax $b = `getAttr mySphere.translateY`; // Command syntax