标题：mel语言
mel能做的
mel有一个很重要的功能是编写界面，Maya的整个界面是用mel编写的，Maya中的所有界面元素都可以编写到你自己的mel程序界面中，你可以用mel跟据自己的习惯定制自己的操作界面。
Maya中的所有的按钮命令都是通过mel来调用的，你可以记录并把其中一些命令组合起来，通过一键或按钮来自动执行这一组命令，就像PhotoShop里的Actions一样。
Maya中的每一步操作都是在执行mel，因此Maya的任何一个功能，能做的任何一项操作，都可以加到你自己的mel程序中。
mel有着和c语言类似的语法，有强大的字符串处理功能，还包含一些较为低层的命令（比如说获取选择物体的名称和获取点在空间中的坐标值等命令），可以编写一些Maya中没有的，较为复杂的功能。
mel不能做的
mel是一种脚本语言，受脚本解释器(Command Engine)和Maya内置命令的影响，还是有很多局限的。
mel不能使用ActiveX插件。
mel只能根据Maya中已有的命令(dll或mll中注册过的命令)进行扩展，无法直接调用dll模块中的函数。
我们平常使用的dll或exe程序文件是经过编译器优化的二进制文件，命令的执行速度非常快。mel脚本语言是文本，有一个脚本解释器分析的过程，命令的执行速度较慢，大约要慢20倍。
mel不支持指针，不能对内存进行直接操作。这就导致了很多方面的效率超级低下，对内存的间接操作可能会使运行速度降低100倍甚至1000倍以上。不过这样也有一个不容争辩的好处，就是不会产生内存泄漏，保障了Maya的稳定性。
mel不能读写二进制文件。既然mel不支持指针，不支持数据结构，就算能够读写二进制文件意义也不大。
mel不能编写程序渲染器、播放器；不能编写Maya中不存在的界面元素，如TreeView、RichEdit、透明窗口等；不能编写读取二进制文件的程序，如3dmax(*.max)、LightWave(*.lwo,*.lw)等。
有人问过mel能不能编写病毒问题。答案是肯定的。编写mel病毒不需要什么高超的技能，只要通过mel调用dos命令或JavaScript/VBScript命令就行了。编写病毒是一件损人不利己的事，mel病毒绝对不能代表编写者的技术高深，只能说明他的素质低劣。mel病毒极其罕见，只听说国内有人编过，并害了自己人。如果万一你被mel病毒格式了硬盘或删除了文件，可以用EasyRecover之类的程序来恢复，但有一点一定要记住，就是在恢复文件之前千万不要对受损的硬盘进行写操作！包括不能把恢复的数据存到受损的硬盘上！否则再厉害的高手也救不了你。
学Maya一定要学mel吗？
不一定非要学mel。但由于Maya与mel的关系太密切了，Maya的用户界面就是用mel编写的，你在Maya中的每一步操作都是在执行mel，你也经常会在表达式里用到mel，或使用别人编写的外部mel程序，这一切都要求你至少要对mel有一个初步的了解。
可以先学mel再学Maya吗？
不可以。只有先熟悉的Maya的操作后才可以学mel。一般至少学两个月以上的Maya，才可以学mel。
学mel是否要有编程基础？是否应该先学C语言再学mel？
有编程基础的确会对学mel有很大帮助，但这并不是说学mel一定要有编程基础。C语言和Java语言虽然在语法上与mel很相似，但在编程的思路方面有很大差距，mel更注重代码的简洁而非代码运行的高效率。由于mel是不需要编译的脚本语言，对一些编程的规范要求不是很严格，学习起来会比C或Java更简单一些。
学mel是否要学好数学？是否要学好图形学？
如果你是学理科的，而且以后打算在3D图形编程这方面发展，那么学好数学和图形学是必须的。如果你是搞艺术的，学mel只是为了辅助Maya作图，那么你就少在数学和图形学上浪费时间。mel是比较高层的脚本语言，一般都是直接调用Maya中已经编好的算法，你只要熟练掌握Maya的操作就行了。如果你有比较好的图形学基础，可能反而会不喜欢使用mel，因为很多优秀的算法无法用mel实现 - mel的速度太慢了。
如何编写mel？
mel是脚本语言，这就意味着你可以用任何文本编辑器来编写，比如写字板、记事本等。Maya自带的编辑器不好用，所以我们一般使用外部编辑器来编写mel。比较专业的编辑器有：TextPad、UltraEditor、EditPlus等，有了这些编辑器后还要在网上(比如Highend3d)下载一个mel语法加亮文件，配置好后，才好用。
如何使用mel？
mel编辑器单行的mel命令，可以直接在命令行(Command Line)执行，也可以在Window > General Editors > Command Shell执行。
多行的mel代码，可以在Script Editor中按Ctrl+Enter执行。
shelf
在Shelf中执行mel。把要执行的代码选中，用鼠标拖放到Shelf上，Shelf上多了一个mel图标，点这个图标，就可以执行你的mel代码了。
使用textToShelf命令。比如：textToShelf "cube" "polyCube";可以在当前Shelf上建一个polyCube命令的图标。
使用Shelf Editor，添加、编辑你的mel代码，或更改图标。
mel文件
mel文件的名字必须取与文件中的主函数相同的名字。要把mel文件复制到我的文档/Maya/2009/scripts目录中，然后在命令行输入主函数名就可以执行这个函数命令。
源化脚本(Source Script)
Source Script可以使mel文件中的代码或命令立即生效。有几种方法可以Source Script，比如说可以在命令行执行source yourScript.mel，或用Script Editor的File > Source Script...，或直接把你的mel文件拖放到Maya的视窗中。
启动文件userSetup.mel
要想在Maya每次启动时都执行某一段代码，需要把这段代码加到Maya的启动文件userSetup.mel中。
具体方法是在我的文档/Maya/2009/scripts目录中新建一个文本文件并重命名为userSetup.mel，然后把你的代码加到这个文件中。如果scripts目录中已经存在了userSetup.mel，就把你的代码加到这个文件的结尾。
其它
也可以通过快捷键、菜单、Marking Menu、mll插件、外部程序文件、JavaScript等方法来调用mel。
如何学习mel？
学mel最好的参考手册就是Maya的帮助文档，遇到问题时，应首先从这些文档中找答案。我把文档中的Mel Command Reference部分做成了chm文件便于查询，可以点此处下载。
要想提高自己的水平，需要多看别人编写的mel代码。<disk>:\\Alias\\Maya6.0\\scripts目录中存放着所有Maya自带的mel，这些mel可以随意抄写，修改并发布，无版权限制，是我们学习的范本。另外在Maya官方网站和Highend3d也可以下载到大量有用的mel供我们学习。
什么是表达式？mel与表达式有什么关系？
mel与表达式的关系，Maya帮助文档中讲得很清楚：
Expressions have a different purpose from MEL commands and MEL scripts. You enter a MEL command to do a single action, for example, to create a sphere.
A MEL script is a list of commands you create to do a sequence of actions, for instance, create a wall-shaped object and apply a brick texture to it.
Because you store a MEL script in a file on disk, you can run a script in different scenes and different work sessions, whether today or next year.
An expression animates one or more attributes over time in a single scene. By default, an expression executes each frame as an animation plays. After you create an expression, it executes whenever you play the animation-including when you play the animation after saving, closing, and reopening the scene.
A MEL command or script is not part of a scene after you execute it. You must execute it again to repeat the action.
补充说明
mel是用户与Maya内部机制交流的通道。mel不能直接编写节点和属性，因此往往要使用表达式才能对物体进行实时控制。
表达式是与动画不可分割的，表达式与动画的时间(time或frame)有密切的关系，表达式对动画的每一帧都要进行计算。
在表达式中可以使用mel，但很多mel用在表达式中是没有意义的，比如说一般不会把编写界面的mel用在表达式中。
mel脚本可以用于任何场景。表达式只能用于一个场景，另一个场景即使用到相同的表达式，也要重新创建。
表达式主要是对物体的属性进行控制，可以用等号对物体的属性直接取值或赋值，例如：
cone.translateX = 3;
而mel就必须用getAttr或setAttr来做同样的事情了，例如：
setAttr cone.translateX 3;
什么是MayaAPI？与mel有什么关系？
API - Application Programmer Interface(应用程序界面)。也有人称作SDK，是一种专门给程序员使用的界面或接口。
MayaAPI提供了Maya的5个dll文件。这些dll中包含控制Maya的大量类和函数，我们通过这些类和函数用vc++编写自己的dll(mll)文件，这些函数通过Maya的方式(比如用mel命令的形式)来调用。
我们常用到的*.mll插件都是通过MayaAPI编写的。
MayaAPI比mel更强大，更复杂，效率更高，能做到许多mel做不到的事情，运行速度在mel的十倍以上。MayaAPI的功能主要体现在以下几点：
编写mel命令。 
执行mel命令。 
进行创建物体，选择、缩放、删除等基本操作。 
编写manipulator。 
编写contexts(tool)。 
编写属性节点。 
编写材质节点。 
文件输入输出。 
编写独立的exe控制台程序。
MayaAPI程序因为使用vc++，可以使用MayaAPI，MFC，还有很多SDK，几乎是无所限制。不过不能改动Maya底层的东西，不能更改Maya的运作方式。
使用MayaAPI，需要有vc++的编程经验，并具有图形学基础。mayamaya