关于mel脚本语言的编写与使用

关于mel脚本语言的编写与使用,第1张

ge(Maya内置语言)的缩写,是一种强大的命令和脚本语言,让你直接控制Maya的特征、进程和工作流程。mel能做什么,不能做什么?能做的mel有一个很重要的功能是编写界面,Maya的整个界面是用mel编写的,Maya中的所有界面元素都可以编写到你自己的mel程序界面中,你可以用mel跟据自己的习惯定制自己的 *** 作界面。Maya中的所有的按钮命令都是通过mel来调用的,你可以记录并把其中一些命令组合起来,通过一键或按钮来自动执行这一组命令,就像PhotoShop里的Actions一样。Maya中的每一步 *** 作都是在执行mel,因此Maya的任何一个功能,能做的任何一项 *** 作,都可以加到你自己的mel程序中。mel有着和c语言类似的语法,有强大的字符串处理功能,还包含一些较为低层的命令(比如说获取选择物体的名称和获取点在空间中的坐标值等命令),可以编写一些Maya中没有的,较为复杂的功能。不能做的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/5.0/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/5.0/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++的编程经验,并具有图形学基础

使用脚本语言编辑器

本章包括以下内容: 1、打开脚本编辑器;2、打开一个脚本程序;3、把一个MEL脚本程序文件作为源文件 ;

4、保存脚本文字;5、执行一个脚本程序;6、清除状态信息;7、清除指令输入;8、响应一个指令;

9、显示程序中的语句行号;10、显示堆栈跟踪。

1、打开脚本编辑器

可以通过选择Window >General Editors >Script Editor或者点击Maya窗口右下部的Script Editor图标打开脚本编辑器。

脚本编辑器提供以下菜单选项:

Open Script--打开脚本程序

Source Script--把一个脚本程序文件作为源文件

Save Selected--保存脚本程序

Execute--执行脚本程序

Clear History--清除历史

Clear Input--清除输入

Echo All Commands--返回所有指令的返回值

Show Line Numbers--显示行号

Show Stack Trace--显示堆栈跟踪

编辑命令

下表列出了在脚本编辑器中有效的键盘命令。(在表达式编辑器和一些输入框中它们也是有效的。) 命令 定义 平台

Ctrl+c Copy IRIX、Windows

Ctrl+x Cut IRIX、Windows

Ctrl+v Paste IRIX、Windows

Ctrl+k 删除到本行末 IRIX

Ctrl+d 删除下一个字符 IRIX

Ctrl+a 移动光标到行首 IRIX

Ctrl+e 移动光标到行末 IRIX

Ctrl+a 选择编辑框中的所有文字 Windows

2、打开一个脚本程序

我们可以打开一个脚本程序以便检查、执行或找出它的问题。打开一个脚本程序时并不执行它。

只是在脚本编辑器的输入栏里简单地把它显示出来。

要执行显示在脚本编辑器的输入栏里的一些或者全部脚本程序,可以用鼠标选择它,然后按键盘的数字Enter键。

当你想把一些或者全部内容拖拉到柜架上并在那里产生一个图标时,打开一个脚本程序就是非常有用的。

可以点击该图标执行这个程序。

为了打开一个脚本文件:

1--从脚本语言编辑器中选择File >Open Script。出现一个文件浏览器。

2--选择要打开的脚本文件。

把一个脚本程序作为源文件

把一个MEL脚本程序文件作为源文件,执行所有的MEL指令并声明包含在该脚本程序文件中的所有的全局过程。

如果你在一个脚本程序文件中修改了一个程序,Maya 并不把这个改变登记给该程序,直到你把它的程序文件作为源文件。

这是因为Maya把执行了的程序保存到了存储器中。当你把一个脚本程序文件作为源文件时,Maya再次读该脚本程序文件里的那个程序。

为了把一个脚本程序作为源文件:

1--从脚本语言编辑器中选择File >Open Script。出现一个文件浏览器。

2--选择要打开的脚本文件。

把一个脚本程序作为源文件之后,该文件里的所有MEL指令会执行。该脚本程序中的所有全局过程会被声明,但并不被执行。

MEL指令是按照它们出现在文件中的顺序执行的,并且应当没有错误。如果产生了一个错误,执行会中断并不再装载更多的程序。

当你把一个MEL脚本程序作为源文件之后,不声明或者不执行局部过程。

但是,如果你是通过在脚本编辑器或指令行里输入而声明了一个局部过程,该过程会被声明为全局过程,你可以在任何时候执行它。

执行一个程序可以通过执行一个MEL指令实现。当你想把一个脚本程序作为源文件,并具有执行该文件中的程序的作用时,这是很有用的。

为了这样做,要首先声明该程序,然后声明通过一个文件浏览器执行该程序的指令。

4、保存脚本文字

使用File >Save Selected指令从脚本编辑器保存脚本文字。可以从指令输入(底部)将文字高亮化,

也可以通过脚本编辑器的状态信息(顶部)部分。Maya 将会把高亮的文字部分保存到你说明的目录里的一个 .mel 文件中。

5、执行一个脚本程序

当你想执行一个预先已经源化了的脚本程序时,可以在脚本编辑器的指令输入栏(底部)输入该程序的名字,然后进行下面工作中的一种:

按 Ctrl + Enter 键;

或者

按数字键盘的 Enter 键;

或者

从脚本编辑器里选择 Edit >Execute。

也可以使用这些指令执行一个在脚本编辑器里已经打开了的脚本程序的定义。如果MEL脚本定义没有出现失败,

则该定义是从脚本编辑器的底部移到顶部。否则该定义不会移动,并且在顶部会显示出一个错误信息。

提示:

可以首先选取MEL script的一部分然后只执行这一部分(Ctrl+Enter)。 它不会删除其它部分。

6、清除状态信息

要清除状态信息(脚本编辑器的顶部),从脚本编辑器里选择Edit >Clear History。这将会删除掉所有的状态信息文字。

使用这个指令时应当小心一些,因为没有办法撤消它。

7、清除指令输入

要清除指令输入文字(脚本编辑器的顶部), 从脚本编辑器里选择Edit >Clear Input。这将会删除掉所有的指令输入文字。

使用这个指令时应当小心一些,因为没有办法撤消它。

8、响应一个指令

当你用Maya工作时,对应的MEL指令常常出现在脚本编辑器的顶部。缺省情况下,只有那最重要的指令才会显示。

你可以在脚本编辑器里选择Edit >Echo All Commands ,虚拟地显示与你的Maya作用相关的所有指令。

它可以帮助你学习哪些MEL指令触发作用。

在你的Maya的作用之间并不是总有一对一的对应关系,这些指令返回响应到脚本编辑器里。

如果你使用一个脚本程序去打开属性编辑器,一些MEL指令出现在脚本编辑器里(响应是打开的):

buildObjectEdMenu MayaWindow|menu4|menuItem56

editSelected

editMenuUpdate MayaWindow|menu2

但是,只有以下的MEL指令需要引入属性编辑器:

editSelected

同时,对于一些作用来说,也不总是会将MEL指令的响应返回到脚本编辑器里。如,当你选择了一个属性编辑器时,

脚本编辑器的顶部没有返回任何信息。

要关闭返回信息,从脚本编辑器里再次选择 Edit >Echo All Commands。

9、显示程序中的语句行号

如果你在执行一个长的程序时由于错误而出现了问题,可以打开脚本程序的行号,你就可以更容易地找到错误。

要显示错误指令的行号,从脚本编辑器里选择Edit >Show Line Numbers。当你打开了Show Line Numbers选项,

Maya 在脚本编辑器状态信息框(顶部)的旁边显示脚本程序的行号。

要关掉行号,在脚本编辑器菜单里再次选择Edit >Show Line Numbers。

Maya将显示行号的设置保存下来作为以后使用。如果打开了行号,当下一次你运行Maya时它们会出现在脚本编辑器里。

10、显示堆栈跟踪

如果你用埋入的脚本程序文件执行一个脚本程序时出现了问题,打开堆栈跟踪选项显示文件结构中的脚本程序错误。

要显示一个脚本文件的堆栈跟踪,在脚本编辑器里选择Edit >Show Stack Trace。Maya会在一个窗口里显示堆栈跟踪,

在脚本编辑器里显示一个错误信息。

使用脚本语言结点

一个脚本语言结点是一个包括了一个 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框被清除,你可以输入一个新的脚本结点。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11725128.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存