數碼資源網

文章頻道 軟件下載 安卓下載 蘋果下載

當前位置:首頁文章中心CG 基 礎Maya基礎 → Mel基礎教程

Mel基礎教程

時間:2005-10-29 16:45:20人氣:240作者:網友整理
東航MEL手冊管理係統v1.4.5
東航MEL手冊管理係統v1.4.5 for Android
  • 類型:安卓學習閱讀大小:17.60M語言:簡體中文 評分:3.1
  • 東航MEL手冊管理係統是一款專用於中國東方航空公司的培訓學習軟件,員工可以通過這...
立即下載
五線譜基礎教程安卓版(海量曲譜) v3.6.5 手機版
五線譜基礎教程安卓版(海量曲譜) v3.6.5 手機版 for Android
  • 類型:安卓學習閱讀大小:18.32M語言:簡體中文 評分:3.0
  • 喜歡音樂的朋友們來來來,這裏有五線譜基礎教程安卓版,在這裏你可以學習到五線譜知識...
立即下載
素描基礎入門教程免費版(素描學習) v1.3 安卓版
素描基礎入門教程免費版(素描學習) v1.3 安卓版 for Android
  • 類型:安卓學習閱讀大小:17.79M語言:簡體中文 評分:3.0
  • 素描學習是一個漫長的過程,素描基礎入門教程免費版會從基礎開始教起,入門學會了,剩...
立即下載
了解 MEL

MEL (Maya埋入式語言)為Maya提供了基礎。Maya界麵的幾乎每一個要點都是在MEL指令和腳本程序上建立的。由於Maya給出了對於MEL自身的完全的訪問,你可以擴展和定製Maya。通過MEL,你可以進一步開發Maya使它成為你和你的項目的獨特而創新的環境。
為有效地使用Maya,你並不非得精通MEL。但是,熟悉MEL可以加深你使用Maya的專業能力。使用MEL的許多方麵可以由隻有很少編程經驗或者沒有經驗者所使用。喜歡MEL並不非得喜歡編程。有一些方法,它們可以使你獲得MEL的好處而不必考慮編程的細節。一旦當你進行了產生MEL腳本語言的嚐試,你會發現MEL可以給你提供可以想象到的最先進的數字化畫圖的方法。

為了獲得Maya的輸出,大部分可以使用MEL來做。這裏是你可以使用MEL來工作的一些例子:

·使用MEL指令脫開Maya的用戶界麵,快速地產生熱鍵,訪問更深的要點。
·給屬性輸入準確的值,脫開由界麵強製引起的拘謹的限製。
·對特定的場景自定義界麵,對一個特定的項目改變缺省設置。
·產生MEL程序和執行用戶建模、動畫、動態和渲染任務的腳本程序。

如何使用本教程
本教程敘述如何學習和使用Maya埋入式語言(MEL)。如果你初次接觸MEL,本教材幫助你在使用MEL指令和腳本程序方麵開始起步。一旦當你開始開發MEL程序的時候,本教材將繼續幫助你,講解如何能夠使你獲得用MEL產生的更多的指令、宏、程序和用戶界麵元素的輸出。

本教材假定你對Maya已經有了基本的了解。如果你完全是新開始學習Maya,請看一下學習Maya的教材,並對在Using Maya documentation set中描述的要點進行開發。 應該熟悉Maya的在線文件(見Online documentation)。特別是應該使你自己熟悉MEL Command Reference和DG Node Reference。

本教材的各處都有許多有關的MEL指令和程序碼的例子。要運行例子程序,你可以把它們粘貼到Maya的腳本語言編輯器(Script Editor)裏,並選擇Edit > Execute就可以了。使自己進一步地熟悉腳本語言編輯器的要點,執行腳本程序,並把程序保存到Maya的script目錄中的一個文件中,可以參考Maya文件和用戶指南中的適當章節。

MEL要點

使用 MEL的要點包括了使用MEL指令和產生MEL程序。

本章包括以下內容:指令、程序、Maya Gems共三個部分。本期介紹MAYA腳本語言MEL的指令。

分為以下三個部分:1、了解指令;2、MEL指令文件;3、使用指令。

1、了解指令

MEL包括了涉及使用Maya的所有方麵的全範圍的指令。使用MEL指令的一些典型的例子包括快速產生物體、精確移動物體和對物體進行更有效的控製。如,可以使用下述的一個MEL指令產生一個半徑準確的為27.5 單位的叫做 bigBoy 的一個球體:

sphere -radius 27.5 -name bigBoy;

隨後你還可以再輸入一條MEL指令將bigBoy繞Z軸旋轉90度:

rotate -r 0 0 90 bigBoy;

另一個例子,假定你在用結點工具產生一個結點,你想把這個結點沿著X軸方向移動5個單位。你可以執行以下的MEL指令,而不需要打斷結點的產生:

move -r 5 0 0;


2、MEL指令文件

Maya的在線庫(Online Library)描述了每一條指令,提供了用法、格式、返回值和例子的信息。MEL的指令參考在線文件(Command Reference online documentation)提供了以字母順序排列的指令,也以**能方式加以組織。

[page]

3、使用指令

包括內容有:輸入指令、使用指令行、獲得指令返回值、指令模式和指令在表達式中。

⑴、輸入指令

Maya提供了一些輸入MEL指令的方法;使用腳本語言編輯器(Script Editor)或者指令行(Command Line)是最常用的方法。你也可以在腳本程序文件、Maya ASCII(.ma)文件、工具櫃圖標(shelf icons)、熱鍵以及表達式中執行指令。但是最常用的還是在腳本語言編輯器中輸入指令。

無論如何輸入指令,所有的MEL指令必須用一個分號結束。以下是MEL 指令的一些例子:

sphere -name roundy;
setAttr roundy.translateX 7;
whatIs ls;
help ls;
ls -typ nurbsSurface;

⑵、使用指令行

可以使用指令行輸入MEL指令。如果指令行沒有出現,在MAYA主菜單中選擇Options > Command Line使指令行出現。

雖然在指令行和腳本語言編輯器中都可以輸入指令,但兩者之間有一些重要的區別:

你可以從指令行,使用數字鍵盤或字符鍵盤的Enter鍵輸入指令。而腳本語言編輯器隻能用數字鍵盤的Enter鍵。

指令行隻有一行,執行一個MEL指令。為了輸入更多的MEL指令,指令之間可以?quot;;"分開。

指令行僅將結果的最後一行顯示到右邊。而腳本語言編輯器顯示所有的結果。

⑶、獲得指令返回值

Many MEL指令返回一個值。為了抓取這個返回值,可以用單引號或者eval指令。

使用單引號獲得指令返回值

用單引號"`"將指令前後標注出來可以返回指令的輸出。隨後你可以把這個輸出賦給一個變量並在腳本語言編輯器中顯示它。



string $a[];
$a = `particle -p 5 0 5 -name Sun`;

print($a);

第一條語句定義了一個名為$a的陣列。第二條語句執行引號中的MEL指令,並把指令的輸出賦給$a。第三條指令把$a的內容顯示給腳本語言編輯器,如下:

Sun

SunShape

可以對任何一個MEL指令保存和顯示其結果。返回值的類型是由你使用的指令決定的。在以上例子中,粒子命令返回一個字符串陣列。所以,等式左邊的變量符號也須要是接受這個返回值的字符串陣列的類型。

使用eval指令獲得指令返回值

eval指令執行一個命令,也讓你抓取返回值。它比起單引號有一個優點,因為你可以從一個字符串建立一個指令。象單引號方式那樣,也可以把輸出賦給一個變量並顯示它。



string $command = "sphere";
eval($command + " -r 5");

第一條語句把字符串sphere標注給變量$command。第二條指令給字符串sphere添加 -r 5,並執行完整的指令sphere -r 5。它產生一個半徑為5個格子單位的球體。

有關eval指令的更多的信息,見掌管指令的在線文件。

⑷、指令模式

MEL指令選項典型地在以下一種或多種模式中起作用:query、編輯和產生。Query模式是用於找出一些事件的值;編輯模式是用於改變一些事件的值;產生模式是產生一些事件。在在線MEL指令參考中,指令選項的描述包括一個Q、E或C以指示query模式、編輯模式、產生模式。

⑸、指令在表達式中

可以在一個表達式中執行MEL指令和序列。但是,如果你執行以下的指令你的場景會產生故障:

斷開或連接屬性
刪除或產生物體或者其他

在一個表達式中播放你的動畫不會撤消MEL指令的執行。例如,如果你的表達式執行MEL指令產生了一對球體,播放這段動畫時並不刪除原來的球體。再次播放該場景時會產生另一對球體。

不過你可以通過選擇Edit > Undo撤消MEL指令,但是如果你的場景有故障時,它將會不工作。還要注意,你可以隻撤消Queue尺寸的設置所允許的許多運算。為設立Queue 尺寸,選擇Options > General Preferences。

當你從指令行執行一個指令時,狀態信息出現在腳本語言編輯器中和指令行的響應區域裏。當在一個表達式中執行指令時,不顯示這個信息。 關於表達式的更多的內容,請參考Using Maya: Expressions。

[page]

概述 MAYA腳本語言

本章包括以下內容: 1、了解腳本語言;2、設立腳本語言環境。

1、了解腳本語言

編寫腳本語言程序是產生Maya埋入式語言(MEL)腳本程序的過程。一個腳本語言程序是一個MEL指令或者MEL序列的集。通過產生腳本語言程序,你可以利用Maya的用戶界麵使執行任務自動化,可以獲得"under the hood"訪問Maya所有的各個部分,還可以對界麵進行擴展和自定義。

2、設立腳本語言環境

為了設立腳本語言環境,需要考慮以下內容:
⑴、腳本語言文件
⑵、建立腳本語言路徑
⑶、在腳本語言程序中使用程序

⑴、腳本語言文件

一個MEL腳本文件(*.mel)是一個包含MEL指令、MEL程序或者二者都有的文件。典型地,是用一個MEL腳本文件執行一係列的指令。如,可以寫一個腳本程序以產生一個牆形狀的物體,然後再給它施加一個磚的紋理。

可以用一個文字編輯器寫一個MEL腳本文件然後把它保存到磁盤的一個文件中。MEL腳本文件使用文件擴展名 .mel。可以把腳本文件用於不同的場景中和不同的工作期間中。當執行一個MEL腳本文件時,它並不變成為場景的一個部分,因此如果你要想重複它的作用時,應該每次都執行該腳本程序。

⑵、建立腳本文件路徑

在缺省狀態下,Maya在你的scripts目錄中查找MEL腳本文件。
在缺省狀態下,這個目錄定義在你的login名下。例子如下:

(IRIX) ~elvis/maya/scripts

(Windows NT) C:\Aw\Elvis\maya\scripts

使你的腳本文件可以運行的最簡單的方法是把它們放在上述路徑裏。

注意你的scripts目錄缺省地包含了一些腳本文件。它們以menu_作為名字的開始,用於Maya內部。

你可以給MAYA用於查找腳本文件的缺省路徑增加目錄。

為腳本文件路徑增加一個目錄(在IRIX中):

1--在一個IRIX shell中,設立環境變量MAYA_SCRIPT_PATH給附加目錄的路徑。

2--從這個shell啟動MAYA。

為腳本文件路徑增加一個目錄(在Windows NT中):

1--使用Windows NT Explorer或者My Computer,顯示Maya NT bin目錄的內容。

缺省時是C:\Aw\MayaX.X\bin。

2--雙擊MayaEnvironment.exe啟動該程序。

這樣顯示出了你的home、project、plug-in、script和bitmap目錄的路徑。該路徑包括在安裝期間產生的缺省路徑和你後來定義的任何路徑。不能改變缺省路徑。

對於plug-in、script和bitmap路徑,用分號(;)分離路徑,這些項可以定位。

在這個窗口中禁止編輯路徑。但你可以用以下的步驟代替。

重要事項:
如果你的計算機上安裝了Maya NT的多個版本,你會看到一個版本的路徑。版本號是在窗口的標題欄裏。為了看另外的版本的路徑,點擊Previous或Next。為了保存一個版本的路徑,點擊Save。如果你的計算機隻裝了一個版本,這些鍵會變暗。

3--點擊Maya Script Path框旁邊的Change鍵。

注意,如果你改變了Home路徑,這就按照新的home路徑改變了project、plug-in、 script和bitmap路徑。會詢問你是否想這樣做。點擊Cancel可以放棄這個改變。

4--在Change Setting窗口中輸入(或者編輯)一個路徑。

一般地,可以增加缺省路徑,但是不能重置它們。當你定義路徑時使用左斜線或者右斜線。

為了定義一個遠程路徑,可以將一個隱含目錄與你的計算機上的一個驅動器字符對應起來。細節請看你的Windows NT文件。

如果需要輸入多個路徑,使用分號把這些路徑分離開。

如果要使用一個文件瀏覽器從別的文件係統查找和選擇一個路徑,點擊Browse。

為了返回到你原來的缺省路徑中,點擊Restore Default。這對於當你定義了一個不正確的路徑或者想刪除廢棄的路徑是非常有用的。

5--點擊OK。

例子(IRIX)

為了給scripts路徑增加~/maya/scripts/clipFX and remote/X/scripts目錄,在啟動MAYA之前給IRIX增加以下目錄:

setenv MAYA_SCRIPT_PATH ~/maya/scripts/clipFX:/remote/X/scripts

隨後Maya將能夠在~/maya/scripts, ~/maya/scripts/clipFX, 或者/remote/X/scripts中找到你的腳本文件。

⑶、在腳本文件中使用程序

你可以在MEL腳本文件中使用全局和局部程序。全局程序在它們的文件外邊是可見的;局部程序僅在它們的文件內部是可見的。

如果Maya遇到一個沒有定義的指令,它會為找到一個與該指令有相同基名的MEL腳本文件搜索腳本路徑。當它找到該文件之後,它在該文件中會聲明所有的全局MEL程序。任何具有與該指令有相同基名的全局程序會被執行。

如,假定你在運行一個sayWhat指令。因為沒有這樣的一個sayWhat指令,Maya會在它的所有的script路徑中對一個叫做sayWhat或者sayWhat.mel的文件進行搜索。如果在一個script目錄中,它找到了有以下內容的sayWhat.mel腳本文件:

proc red5() {print("red5 standing by...\n");}
global proc sayWhat() {print("sayWhat online\n");}
global proc GoGo() {print("GoGo online\n");}

然後全局程序sayWhat和GoGo被聲明,並執行sayWhat程序。結果是:

sayWhat online

因為GoGo全局程序已經聲明過了;現在就可以在指令行中或者在腳本語言編輯器中輸入GoGo運行它。

使用MAYA內部腳本文件

Maya有一些用於它的用戶界麵和其他運算細節的MEL腳本文件。你可以在Alias|Wavefront中查找這些腳本文件,學習專業腳本程序作者的這些技術。這些腳本文件是在由缺省定義的以下述目錄開始的目錄中:

(IRIX) /usr/aw/mayaX.X/scripts

(Windows NT) C:\Aw\MayaX.X\scripts

其中X.X是Maya的版本號。

注意:
不要在這個目錄中修改或者插入腳本文件;該目錄是保留Maya用戶界麵工作用的腳本文件的。改變這些文件可能會影響Maya的操作。

如果你想在這個目錄中修改腳本程序以改變Maya的界麵,先要把它們拷貝到你的局部scripts目錄中。如果你的局部scripts目錄中有與Maya內部script文件目錄中相同名字的腳本文件,那你的局部scripts目錄中的文件會被運行。

[page]

使用腳本語言編輯器

本章包括以下內容: 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會在一個窗口裏顯示堆棧跟蹤,
在腳本編輯器裏顯示一個錯誤信息。

[page]

使用腳本語言結點

一個腳本語言結點是一個包括了一個 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框被清除,你可以輸入一個新的腳本結點。

[page]

使用腳本語言結點

一個腳本語言結點是一個包括了一個 MEL腳本語言程序的結點。
當該結點產生或者當該結點被破壞時,該程序被執行,它取決於腳本結點的類型。

本章包括以下內容:
1、了解腳本語言結點;
2、產生腳本語言結點;
3、測試腳本語言;
4、編輯腳本語言結點;
5、設立腳本語言結點的執行;
6、刪除腳本語言結點。

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按鍵。

[page]

定義數據

本章描述 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 一個或更多的字符 "What's 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."}; < p>

vector $tEMp[2] = {<<0, 0, 0>>, <<0.01, -2, 16>>};

如果一個變量被聲明但未被標注,它的所有的值是0;字串變量則?quot; "。

float $teMP; // 賦值: 0;
string $TEMp[3]; // 賦值: {"", "", ""};
vector $TEmP[2]; // 賦值: {<<0, 0, 0>>, <<0, 0, 0>>};
matrix $TeMP[3][2]; // 賦值: <<0, 0; 0, 0; 0, 0>>;

如果一個變量被聲明或者被使用而沒有定義它的類型,它被隱含聲明為將要賦值給它的那種類型。

$tEMP = 0.0; // 浮點數
string $TEMP[]; // 零元素字符串陣列
$trip = "heya Buddy"; // 字符串
$rip = {1, 2, 3, 4}; // 四元素整型陣列
$lip = <<1, 2.1; 3, 4>>; // 2X2 矩陣
$flixp = $TEMP; // 零元素字符串陣列

注意值0.0是一個浮點數,而一個0值是一個整型數。這決定了在隱含聲明時是產生一個浮點數還是產生一個整型數。
不建議使用隱含聲明,因為它不象變量的隱含聲明那樣的清楚。

保留字

MEL的保留字可以是一個變量類型、控製邏輯或是表達一個值。以下是MEL的保留字:

break case continue default do else
false float for global if in
int matrix no off on proc
return string switch true vector while
yes

數據類型關鍵字

int float vector string matrix

布爾常數關鍵字

yes no on off true false

流動控製關鍵字

if else for while do in break continue default switch case

其他關鍵字

global return source catch alias proc

保留字也區分大小寫。所以int是整型,Int不是。實際上alias、source、catch 也是保留字,但它們起指令作用,
因此沒有被包括在上述表內。

字符串

字符串可用"+"運算連接。

string $what = "Whale";
string $title = "Great" + " White " + $what;

這將使title變量的內容為Great White Whale。

矢量

為尋址一個vector的各個成分,使用"."。

vector $LOS = <<1, 2, 7>>;
float $firstComponent = $LOS.x; // 賦值為 1
float $secondComponent = $LOS.y; // 賦值為 2
float $thirdComponent = $LOS.z; // 賦值為 7

標注矢量的成分:

vector $LOCK = <<7, -4, 9>>;
$LOCK = <<$LOCK.x, $LOCK.y, 3>>; // Assigned <<7, -4, 3>>

但不能直接給一個成分標數字:

$LOCK.z = 3000; // 錯誤

但是通常當訪問一個矢量成分時,你應該象下麵例子那樣圍繞它使用括號:

例子:
print $LOCK.x; // 錯誤
print($LOCK.x);
setAttr persp.scaleX $LOS.x; // 錯誤
setAttr persp.scaleX ($LOS.x);

[page]

陣列

你可以聲明一個int, float, string或vector類型的陣列。陣列的第一個序號為0

string $array[3] = {"first\n", "second\n", "third\n"};
print($array[0]); // 顯示 "first\n"
print($array[1]); // 顯示 "second\n"
print($array[2]); // 顯示 "third\n"

陣列尺寸可以自動地增加。

int $scores[]; // 聲明為一個0元素陣列
$scores[150] = 3; // 現在是151元素陣列
$scores[200] = 5; // 現在是201元素陣列 但最好不要聲明過大的沒用的陣列,因為它要占內存:

int $bigBoy[];
$bigBoy[123456789] = 2; // 危險

要除去一個陣列的所有元素可使用clear**能。要查看陣列的尺寸可使用size。

string $hats[3] = {"blue", "red", "black"};
print("There were " + size($hats) + " hats.\n");
clear($hats);
print("But now there are " + size($hats) + ".\n");

以上指令的輸出是:

There were 3 hats.
But now there are 0.

矩陣

可以把一個矩陣想象為一個浮點陣列的陣列,或是一個浮點數據的二維陣列。矩陣產生後,它的尺寸不能改變。
企圖尋址一個矩陣的不存在的元素將會出現錯誤。在產生矩陣時必須定義它的尺寸。

matrix $a1[][] = <<1; 4>>; // 錯誤: 沒有說明尺寸
matrix $a2[][]; // 錯誤: 沒有說明尺寸
matrix $a3[2][1]; // 有效: 產生 <<0; 0>>;
$a3[0][1] = 7; // 錯誤: 元素不存在
$a3[1][0] = 9; // 有效

聲明而未標注值的矩陣,其所有元素都為0。

matrix $a4[2][4] = <<-3.4, 6, 201, 0.7; 4, 2, 9.3, 1001>>;

如果矩陣表示一個二維陣列,則第一個索引表示列;地二個索引表示行:

matrix $a4[2][4]column 0column 1column 2column 3
row 0-3.462010.7row 1429.31001

如果你把矩陣設想為一個身列的陣列,則第一個索引表示陣列,第二個索引該陣列裏的索引:

matrix $a4[2][4]index 0index 1index 2index 3
float array 0-3.462010.7float array 1429.31001

物體屬性

屬性是場景中的物體的特征或參數。在Maya中可以用許多方法建立屬性-屬性編輯器、MEL程序、工具盒工具或表達式。
你可以設立屬性去控製在工作空間中看到的虛擬的事情。
如,一個NURBS球具有屬性scaleX, scaleY, scaleZ, rotateX, 等等。

物體屬性名

物體屬性名具有如下格式:

objectName.attributeName

其中objectName是物體的名字,attributeName是該物體的屬性名。屬性名中不要使用空格或特殊字符,可以用下劃線。

產生一個名字為Brawl的球:

sphere -name Brawl;

可以獲取它的屬性的一個值:

float $yScale = `getAttr Brawl.scaleY`;

Brawl.scaleY是Brawl物體的scaleY屬性的全名。

路徑

如果兩個物體具有不同的父物體,它們可以有相同的名字。當說明有相同名字的物體時必須使用路徑:

pathname|objectname

其中pathname物體的父物體。管道字符(|)用於區分路徑。

sphere -name doughnutHole;
group -name GroupA;
sphere -p 3 0 0 -name doughnutHole;

現在我們有兩個叫做doughnutHole的物體,但一個有父物體GroupA,另一個沒有父物體。以?*噶畈桓齟砦螅?br /> 因為Maya不知道哪個doughnutHole物體要設立scaleY屬性:

setAttr doughnutHole.scaleY 3.3; // ERROR: 哪個?

你必須輸入屬性的路徑:

setAttr GroupA|doughnutHole.scaleY 3.3;
setAttr |doughnutHole.scaleY 0.3;

你可以說明物體的所有路徑,用管道符進行區分:

group -name GroupB GroupA;

setAttr |GroupB|GroupA|doughnutHole.scaleY 1;

物體屬性的可能的數據類型

每個屬性有特定的數據類型。幾何體, 粒子物體, Maya中的其他項都具有這些數據類型的屬性:

數據類型 意義 屬性例 數據例

浮點小數 numbers Ball.translateX 2.6, 7.0, -9.1int
整數 (...-1, 0, 1, 2...) BallShape.spansU -289, 33, 0
boolean 0或1 Ball.visibilityon, off, yes, no, 1, 0, true, false

考慮一個由以?*噶畈慕凶鯢ire的粒子物體:

particle -name Fire -position 7 0 7;

它可以具有以下另外的數據類型:

數據類型 意義 屬性例 數據例

vector array 矢量陣列 FireShape.position
{<<3.2,?7.7,?9.1>>, <<7,?10,?2.2>>}
double array 浮點陣列 numbersFireShape.lifespan 1.333 1.666

你可以使用getParticleAttr和setParticleAttr指令設立矢量的元素或一個粒子係統的雙陣列。

float $Tmp[] =
`getParticleAttr -at position FireShape.pt[0]`;
vector $particlePosition = <<$Tmp[0], $Tmp[1], $Tmp[2]>>;
(完)

相關文章

感謝速聯科技、八度網絡、九九數據、億恩科技、群英網絡讚助部分帶寬!

關於本站 | 聯係方式 | 版權聲明 | 下載幫助(?) | 網站地圖

Copyright 2002-2020 95262.com 【數碼資源網】 版權所有 粵ICP備2020128507號-1

本站所有軟件來自互聯網,版權歸原著所有。如有侵權,敬請來信告知 ,我們將及時撤銷。