版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
本文格式為Word版,下載可任意編輯——MAYA腳本語言MEL系列教程MAYA腳本語言MEL系列教程
一、了解MEL
MEL(Maya埋入式語言)為Maya提供了基礎(chǔ)。Maya界面的幾乎每一個要點(diǎn)都是在MEL指令和腳本程序上建立的。由于Maya給出了對于MEL自身的完全的訪問,你可以擴(kuò)展和定制Maya。通過MEL,你可以進(jìn)一步開發(fā)Maya使它成為你和你的項(xiàng)目的獨(dú)特而創(chuàng)新的環(huán)境。
為有效地使用Maya,你并不非得精通MEL。但是,熟悉MEL可以加深你使用Maya的專業(yè)能力。使用MEL的大量方面可以由只有很少編程經(jīng)驗(yàn)或者沒有經(jīng)驗(yàn)者所使用。喜歡MEL并不非得喜歡編程。有一些方法,它們可以使你獲得MEL的好處而不必考慮編程的細(xì)節(jié)。一旦當(dāng)你進(jìn)行了產(chǎn)生MEL腳本語言的嘗試,你會發(fā)現(xiàn)MEL可以給你提供可以想象到的最先進(jìn)的數(shù)字化畫圖的方法。
為了獲得Maya的輸出,大部分可以使用MEL來做。這里是你可以使用MEL來工作的一些例子:·使用MEL指令脫開Maya的用戶界面,快速地產(chǎn)生熱鍵,訪問更深的要點(diǎn)?!そo屬性輸入確鑿的值,脫開由界面強(qiáng)制引起的拘謹(jǐn)?shù)南拗啤!μ囟ǖ膱鼍白远x界面,對一個特定的項(xiàng)目改變?nèi)笔≡O(shè)置。·產(chǎn)生MEL程序和執(zhí)行用戶建模、動畫、動態(tài)和渲染任務(wù)的腳本程序。
如何使用本教程
本教程表達(dá)如何學(xué)習(xí)和使用Maya埋入式語言(MEL)。假使你初次接觸MEL,本教材幫助你在使用MEL
指令和腳本程序方面開始起步。一旦當(dāng)你開始開發(fā)MEL程序的時候,本教材將繼續(xù)幫助你,講解如何能夠使你獲得用MEL產(chǎn)生的更多的指令、宏、程序和用戶界面元素的輸出。
本教材假定你對Maya已經(jīng)有了基本的了解。假使你完全是新開始學(xué)習(xí)Maya,請看一下學(xué)習(xí)Maya的教材,并對在UsingMayadocumentationset中描述的要點(diǎn)進(jìn)行開發(fā)。應(yīng)當(dāng)熟悉Maya的在線文件(見Onlinedocumentation)。特別是應(yīng)當(dāng)使你自己熟悉MELCommandReference和DGNodeReference。
本教材的各處都有大量有關(guān)的MEL指令和程序碼的例子。要運(yùn)行例子程序,你可以把它們粘貼到Maya的腳本語言編輯器(ScriptEditor)里,并選擇Edit>Execute就可以了。使自己進(jìn)一步地熟悉腳本語言編輯器的要點(diǎn),執(zhí)行腳本程序,并把程序保存到Maya的script目錄中的一個文件中,可以參考Maya文件和用戶指南中的適當(dāng)章節(jié)。
如何學(xué)習(xí)更多的MEL內(nèi)容
為了學(xué)習(xí)更多的MEL內(nèi)容,可以通過以下途徑:
在線文件訓(xùn)練課程網(wǎng)站資源在線文件
本教材提供了一個使用MEL指令、程序和腳本語言的總的概覽。有關(guān)特定的MEL指令的詳細(xì)信息,請參閱MELCommandReference。
當(dāng)你學(xué)習(xí)MEL時,你會發(fā)現(xiàn)你需要學(xué)習(xí)更多的有關(guān)Maya的相關(guān)圖節(jié)點(diǎn)(dependencygraphnode)的內(nèi)容。在線的DGNodeReference文件詳細(xì)地描述了Maya的相關(guān)圖節(jié)點(diǎn)。訓(xùn)練課程
為了學(xué)習(xí)更多的有關(guān)Maya和MEL的內(nèi)容,請考慮學(xué)習(xí)Alias│Wavefront的訓(xùn)練課程。這些課程向你介紹MEL指令和腳本語言程序,還可以向你提供最主要的內(nèi)容的深層知識。要學(xué)習(xí)更多有關(guān)MEL的內(nèi)容,可以先從MEL基本教程開始。
在Alias│Wavefront的網(wǎng)站(ExpressLinktoTraining)中的課程安排和描述是有效的。關(guān)于課程的有效性、價格和登錄的最新的信息,可發(fā)Email給training-info@,電話是416-874-8760或1-877-927-7478(option4),或FAX416-369-6131。網(wǎng)站資源
1
Alias│Wavefront的AssistantOnline提供了大量有關(guān)Maya的教材,包括含有產(chǎn)生MEL腳本程序的教材。
更多信息可以訪問Alias│Wavefront網(wǎng)站:。
另外,Highend3D的網(wǎng)站介紹了MEL腳本程序并連接到更多的有關(guān)MEL和Maya的信息。為了獲得MEL和Maya的大部分的輸出,請開發(fā)和利用這些訓(xùn)練課程和網(wǎng)站資源。
二、MEL要點(diǎn)
使用MEL的要點(diǎn)包括了使用MEL指令和產(chǎn)生MEL程序。
本章包括以下內(nèi)容:指令、程序、MayaGems共三個部分。本期介紹MAYA腳本語言MEL的指令。分為以下三個部分:1、了解指令;2、MEL指令文件;3、使用指令。1、了解指令
MEL包括了涉及使用Maya的所有方面的全范圍的指令。使用MEL指令的一些典型的例子包括快速產(chǎn)生物體、確切移動物體和對物體進(jìn)行更有效的控制。如,可以使用下述的一個MEL指令產(chǎn)生一個半徑確鑿的為27.5單位的叫做bigBoy的一個球體:sphere-radius27.5-namebigBoy;
隨后你還可以再輸入一條MEL指令將bigBoy繞Z軸旋轉(zhuǎn)90度:rotate-r0090bigBoy;
另一個例子,假定你在用結(jié)點(diǎn)工具產(chǎn)生一個結(jié)點(diǎn),你想把這個結(jié)點(diǎn)沿著X軸方向移動5個單位。你可以執(zhí)行以下的MEL指令,而不需要打斷結(jié)點(diǎn)的產(chǎn)生:move-r500;2、MEL指令文件
Maya的在線庫(OnlineLibrary)描述了每一條指令,提供了用法、格式、返回值和例子的信息。MEL的指令參考在線文件(CommandReferenceonlinedocumentation)提供了以字母順序排列的指令,也以功能方式加以組織。3、使用指令
包括內(nèi)容有:輸入指令、使用指令行、獲得指令返回值、指令模式和指令在表達(dá)式中。⑴、輸入指令
Maya提供了一些輸入MEL指令的方法;使用腳本語言編輯器(ScriptEditor)或者指令行(CommandLine)是最常用的方法。你也可以在腳本程序文件、MayaASCII(.ma)文件、工具柜圖標(biāo)(shelficons)、熱鍵以及表達(dá)式中執(zhí)行指令。但是最常用的還是在腳本語言編輯器中輸入指令。
無論如何輸入指令,所有的MEL指令必需用一個分號終止。以下是MEL指令的一些例子:sphere-nameroundy;setAttrroundy.translateX7;whatIsls;helpls;
ls-typnurbsSurface;⑵、使用指令行
可以使用指令行輸入MEL指令。假使指令行沒有出現(xiàn),在MAYA主菜單中選擇Options>CommandLine使指令行出現(xiàn)。
雖然在指令行和腳本語言編輯器中都可以輸入指令,但兩者之間有一些重要的區(qū)別:
你可以從指令行,使用數(shù)字鍵盤或字符鍵盤的Enter鍵輸入指令。而腳本語言編輯器只能用數(shù)字鍵盤的Enter鍵。
指令行只有一行,執(zhí)行一個MEL指令。為了輸入更多的MEL指令,指令之間可以?quot;;\分開。指令行僅將結(jié)果的最終一行顯示到右邊。而腳本語言編輯器顯示所有的結(jié)果。⑶、獲得指令返回值
2
ManyMEL指令返回一個值。為了抓取這個返回值,可以用單引號或者eval指令。使用單引號獲得指令返回值
用單引號\將指令前后標(biāo)注出來可以返回指令的輸出。隨后你可以把這個輸出賦給一個變量并在腳本語言編輯器中顯示它。例string$a[];
$a=`particle-p505-nameSun`;print($a);
第一條語句定義了一個名為$a的陣列。其次條語句執(zhí)行引號中的MEL指令,并把指令的輸出賦給$a。第三條指令把$a的內(nèi)容顯示給腳本語言編輯器,如下:SunSunShape
可以對任何一個MEL指令保存和顯示其結(jié)果。返回值的類型是由你使用的指令決定的。在以上例子中,粒子命令返回一個字符串陣列。所以,等式左邊的變量符號也必需是接受這個返回值的字符串陣列的類型。
使用eval指令獲得指令返回值
eval指令執(zhí)行一個命令,也讓你抓取返回值。它比起單引號有一個優(yōu)點(diǎn),由于你可以從一個字符串建立一個指令。象單引號方式那樣,也可以把輸出賦給一個變量并顯示它。例
string$command=\eval($command+\
第一條語句把字符串sphere標(biāo)注給變量$command。其次條指令給字符串sphere添加-r5,并執(zhí)行完整的指令sphere-r5。它產(chǎn)生一個半徑為5個格子單位的球體。有關(guān)eval指令的更多的信息,見掌管指令的在線文件。⑷、指令模式
MEL指令選項(xiàng)典型地在以下一種或多種模式中起作用:query、編輯和產(chǎn)生。Query模式是用于找出一些事件的值;編輯模式是用于改變一些事件的值;產(chǎn)生模式是產(chǎn)生一些事件。在在線MEL指令參考中,指令選項(xiàng)的描述包括一個Q、E或C以指示query模式、編輯模式、產(chǎn)生模式。⑸、指令在表達(dá)式中
可以在一個表達(dá)式中執(zhí)行MEL指令和序列。但是,假使你執(zhí)行以下的指令你的場景會產(chǎn)生故障:斷開或連接屬性
刪除或產(chǎn)生物體或者其他項(xiàng)
在一個表達(dá)式中播放你的動畫不會撤消MEL指令的執(zhí)行。例如,假使你的表達(dá)式執(zhí)行MEL指令產(chǎn)生了一對球體,播放這段動畫時并不刪除原來的球體。再次播放該場景時會產(chǎn)生另一對球體。不過你可以通過選擇Edit>Undo撤消MEL指令,但是假使你的場景有故障時,它將會不工作。還要注意,你可以只撤消Queue尺寸的設(shè)置所允許的大量運(yùn)算。為設(shè)立Queue尺寸,選擇Options>GeneralPreferences。
當(dāng)你從指令行執(zhí)行一個指令時,狀態(tài)信息出現(xiàn)在腳本語言編輯器中和指令行的響應(yīng)區(qū)域里。當(dāng)在一個表達(dá)式中執(zhí)行指令時,不顯示這個信息。關(guān)于表達(dá)式的更多的內(nèi)容,請參考UsingMaya:Expressions。
三、概述MAYA腳本語言
本章包括以下內(nèi)容:1、了解腳本語言;2、設(shè)立腳本語言環(huán)境。1、了解腳本語言
編寫腳本語言程序是產(chǎn)生Maya埋入式語言(MEL)腳本程序的過程。一個腳本語言程序是一個MEL指令或者M(jìn)EL序列的集。通過產(chǎn)生腳本語言程序,你可以利用Maya的用戶界面使執(zhí)行任務(wù)自動化,可以獲
3
得\訪問Maya所有的各個部分,還可以對界面進(jìn)行擴(kuò)展和自定義。2、設(shè)立腳本語言環(huán)境
為了設(shè)立腳本語言環(huán)境,需要考慮以下內(nèi)容:⑴、腳本語言文件⑵、建立腳本語言路徑⑶、在腳本語言程序中使用程序⑴、腳本語言文件
一個MEL腳本文件(*.mel)是一個包含MEL指令、MEL程序或者二者都有的文件。典型地,是用一個MEL腳本文件執(zhí)行一系列的指令。如,可以寫一個腳本程序以產(chǎn)生一個墻形狀的物體,然后再給它施加一個磚的紋理。
可以用一個文字編輯器寫一個MEL腳本文件然后把它保存到磁盤的一個文件中。MEL腳本文件使用文件擴(kuò)展名.mel??梢园涯_本文件用于不同的場景中和不同的工作期間中。當(dāng)執(zhí)行一個MEL腳本文件時,它并不變成為場景的一個部分,因此假使你要想重復(fù)它的作用時,應(yīng)當(dāng)每次都執(zhí)行該腳本程序。⑵、建立腳本文件路徑
在缺省狀態(tài)下,Maya在你的scripts目錄中查找MEL腳本文件。在缺省狀態(tài)下,這個目錄定義在你的login名下。例子如下:(IRIX)~elvis/maya/scripts
(WindowsNT)C:\\Aw\\Elvis\\maya\\scripts
使你的腳本文件可以運(yùn)行的最簡單的方法是把它們放在上述路徑里。
注意你的scripts目錄缺省地包含了一些腳本文件。它們以menu_作為名字的開始,用于Maya內(nèi)部。你可以給MAYA用于查找腳本文件的缺省路徑增加目錄。為腳本文件路徑增加一個目錄(在IRIX中):
1--在一個IRIXshell中,設(shè)立環(huán)境變量MAYA_SCRIPT_PATH給附加目錄的路徑。2--從這個shell啟動MAYA。
為腳本文件路徑增加一個目錄(在WindowsNT中):
1--使用WindowsNTExplorer或者M(jìn)yComputer,顯示MayaNTbin目錄的內(nèi)容。缺省時是C:\\Aw\\MayaX.X\\bin。
2--雙擊MayaEnvironment.exe啟動該程序。
這樣顯示出了你的home、project、plug-in、script和bitmap目錄的路徑。該路徑包括在安裝期間產(chǎn)生的缺省路徑和你后來定義的任何路徑。不能改變?nèi)笔÷窂健?/p>
對于plug-in、script和bitmap路徑,用分號(;)分開路徑,這些項(xiàng)可以定位。在這個窗口中阻止編輯路徑。但你可以用以下的步驟代替。重要事項(xiàng):
假使你的計(jì)算機(jī)上安裝了MayaNT的多個版本,你會看到一個版本的路徑。版本號是在窗口的標(biāo)題欄里。為了看另外的版本的路徑,點(diǎn)擊Previous或Next。為了保存一個版本的路徑,點(diǎn)擊Save。假使你的計(jì)算機(jī)只裝了一個版本,這些鍵會變暗。
3--點(diǎn)擊MayaScriptPath框旁邊的Change鍵。
注意,假使你改變了Home路徑,這就依照新的home路徑改變了project、plug-in、script和bitmap路徑。會詢問你是否想這樣做。點(diǎn)擊Cancel可以放棄這個改變。4--在ChangeSetting窗口中輸入(或者編輯)一個路徑。
一般地,可以增加缺省路徑,但是不能重置它們。當(dāng)你定義路徑時使用左斜線或者右斜線。為了定義一個遠(yuǎn)程路徑,可以將一個隱含目錄與你的計(jì)算機(jī)上的一個驅(qū)動器字符對應(yīng)起來。細(xì)節(jié)請看你的WindowsNT文件。
假使需要輸入多個路徑,使用分號把這些路徑分開開。
4
假使要使用一個文件瀏覽器從別的文件系統(tǒng)查找和選擇一個路徑,點(diǎn)擊Browse。
為了返回到你原來的缺省路徑中,點(diǎn)擊RestoreDefault。這對于當(dāng)你定義了一個不正確的路徑或者想刪除廢棄的路徑是十分有用的。5--點(diǎn)擊OK。例子(IRIX)
為了給scripts路徑增加~/maya/scripts/clipFXandremote/X/scripts目錄,在啟動MAYA之前給IRIX增加以下目錄:
setenvMAYA_SCRIPT_PATH~/maya/scripts/clipFX:/remote/X/scripts
隨后Maya將能夠在~/maya/scripts,~/maya/scripts/clipFX,或者/remote/X/scripts中找到你的腳本文件。
⑶、在腳本文件中使用程序
你可以在MEL腳本文件中使用全局和局部程序。全局程序在它們的文件外邊是可見的;局部程序僅在它們的文件內(nèi)部是可見的。
假使Maya遇到一個沒有定義的指令,它會為找到一個與該指令有一致基名的MEL腳本文件探尋腳本路徑。當(dāng)它找到該文件之后,它在該文件中會聲明所有的全局MEL程序。任何具有與該指令有一致基名的全局程序會被執(zhí)行。
如,假定你在運(yùn)行一個sayWhat指令。由于沒有這樣的一個sayWhat指令,Maya會在它的所有的script路徑中對一個叫做sayWhat或者sayWhat.mel的文件進(jìn)行探尋。假使在一個script目錄中,它找到了有以下內(nèi)容的sayWhat.mel腳本文件:
procred5(){print(\globalprocsayWhat(){print(\globalprocGoGo(){print(\
然后全局程序sayWhat和GoGo被聲明,并執(zhí)行sayWhat程序。結(jié)果是:sayWhatonline
由于GoGo全局程序已經(jīng)聲明過了;現(xiàn)在就可以在指令行中或者在腳本語言編輯器中輸入GoGo運(yùn)行它。
使用MAYA內(nèi)部腳本文件
Maya有一些用于它的用戶界面和其他運(yùn)算細(xì)節(jié)的MEL腳本文件。你可以在Alias│Wavefront中查找這些腳本文件,學(xué)習(xí)專業(yè)腳本程序的這些技術(shù)。這些腳本文件是在由缺省定義的以下述目錄開始的目錄中:
(IRIX)/usr/aw/mayaX.X/scripts(WindowsNT)C:\\Aw\\MayaX.X\\scripts其中X.X是Maya的版本號。注意:
不要在這個目錄中修改或者插入腳本文件;該目錄是保存Maya用戶界面工作用的腳本文件的。改變這些文件可能會影響Maya的操作。
假使你想在這個目錄中修改腳本程序以改變Maya的界面,先要把它們拷貝到你的局部scripts目錄中。假使你的局部scripts目錄中有與Maya內(nèi)部script文件目錄中一致名字的腳本文件,那你的局部scripts目錄中的文件會被運(yùn)行。
使用腳本語言編輯器
本章包括以下內(nèi)容:1、開啟腳本編輯器;2、開啟一個腳本程序;3、把一個MEL腳本程序文件作為源文件;4、保存腳本文字;5、執(zhí)行一個腳本程序;6、清除狀態(tài)信息;7、清除指令輸入;8、響應(yīng)一個指令;9、顯示程序中的語句行號;10、顯示堆棧跟蹤。1、開啟腳本編輯器
5
可以通過選擇Window>GeneralEditors>ScriptEditor或者點(diǎn)擊Maya窗口右下部的ScriptEditor圖標(biāo)開啟腳本編輯器。腳本編輯器提供以下菜單項(xiàng)選擇項(xiàng):
OpenScript--開啟腳本程序
SourceScript--把一個腳本程序文件作為源文件SaveSelected--保存腳本程序Execute--執(zhí)行腳本程序ClearHistory--清除歷史ClearInput--清除輸入
EchoAllCommands--返回所有指令的返回值ShowLineNumbers--顯示行號ShowStackTrace--顯示堆棧跟蹤編輯命令
下表列出了在腳本編輯器中有效的鍵盤命令。(在表達(dá)式編輯器和一些輸入框中它們也是有效的。)命令定義平臺
Ctrl+cCopyIRIX、WindowsCtrl+xCutIRIX、WindowsCtrl+vPasteIRIX、WindowsCtrl+k刪除到本行末IRIXCtrl+d刪除下一個字符IRIXCtrl+a移動光標(biāo)到行首IRIXCtrl+e移動光標(biāo)到行末IRIX
Ctrl+a選擇編輯框中的所有文字Windows2、開啟一個腳本程序
我們可以開啟一個腳本程序以便檢查、執(zhí)行或找出它的問題。開啟一個腳本程序時并不執(zhí)行它。只是在腳本編輯器的輸入欄里簡單地把它顯示出來。
要執(zhí)行顯示在腳本編輯器的輸入欄里的一些或者全部腳本程序,可以用鼠標(biāo)選擇它,然后按鍵盤的數(shù)字Enter鍵。
當(dāng)你想把一些或者全部內(nèi)容拖拉到柜架上并在那里產(chǎn)生一個圖標(biāo)時,開啟一個腳本程序就是十分有用的??梢渣c(diǎn)擊該圖標(biāo)執(zhí)行這個程序。為了開啟一個腳本文件:
1--從腳本語言編輯器中選擇File>OpenScript。出現(xiàn)一個文件瀏覽器。2--選擇要開啟的腳本文件。把一個腳本程序作為源文件
把一個MEL腳本程序文件作為源文件,執(zhí)行所有的MEL指令并聲明包含在該腳本程序文件中的所有的全局過程。
假使你在一個腳本程序文件中修改了一個程序,Maya并不把這個改變登記給該程序,直到你把它的程序文件作為源文件。
這是由于Maya把執(zhí)行了的程序保存到了存儲器中。當(dāng)你把一個腳本程序文件作為源文件時,Maya再次讀該腳本程序文件里的那個程序。為了把一個腳本程序作為源文件:
1--從腳本語言編輯器中選擇File>OpenScript。出現(xiàn)一個文件瀏覽器。2--選擇要開啟的腳本文件。
6
把一個腳本程序作為源文件之后,該文件里的所有MEL指令會執(zhí)行。該腳本程序中的所有全局過程會被聲明,但并不被執(zhí)行。
MEL指令是依照它們出現(xiàn)在文件中的順序執(zhí)行的,并且應(yīng)當(dāng)沒有錯誤。假使產(chǎn)生了一個錯誤,執(zhí)行會中斷并不再裝載更多的程序。
當(dāng)你把一個MEL腳本程序作為源文件之后,不聲明或者不執(zhí)行局部過程。
但是,假使你是通過在腳本編輯器或指令行里輸入而聲明白一個局部過程,該過程會被聲明為全局過程,你可以在任何時候執(zhí)行它。
執(zhí)行一個程序可以通過執(zhí)行一個MEL指令實(shí)現(xiàn)。當(dāng)你想把一個腳本程序作為源文件,并具有執(zhí)行該文件中的程序的作用時,這是很有用的。
為了這樣做,要首先聲明該程序,然后聲明通過一個文件瀏覽器執(zhí)行該程序的指令。4、保存腳本文字
使用File>SaveSelected指令從腳本編輯器保存腳本文字??梢詮闹噶钶斎?底部)將文字高亮化,也可以通過腳本編輯器的狀態(tài)信息(頂部)部分。Maya將會把高亮的文字部分保存到你說明的目錄里的一個.mel文件中。5、執(zhí)行一個腳本程序
當(dāng)你想執(zhí)行一個預(yù)先已經(jīng)源化了的腳本程序時,可以在腳本編輯器的指令輸入欄(底部)輸入該程序的名字,然后進(jìn)行下面工作中的一種:
按Ctrl+Enter鍵;或者按數(shù)字鍵盤的Enter鍵;或者從腳本編輯器里選擇Edit>Execute。也可以使用這些指令執(zhí)行一個在腳本編輯器里已經(jīng)開啟了的腳本程序的定義。假使MEL腳本定義沒有出現(xiàn)失敗,
則該定義是從腳本編輯器的底部移到頂部。否則該定義不會移動,并且在頂部會顯示出一個錯誤信息。提醒:
可以首先選取MELscript的一部分然后只執(zhí)行這一部分(Ctrl+Enter)。它不會刪除其它部分。6、清除狀態(tài)信息
要清除狀態(tài)信息(腳本編輯器的頂部),從腳本編輯器里選擇Edit>ClearHistory。這將會刪除掉所有的狀態(tài)信息文字。
使用這個指令時應(yīng)當(dāng)防備一些,由于沒有方法撤消它。7、清除指令輸入
要清除指令輸入文字(腳本編輯器的頂部),從腳本編輯器里選擇Edit>ClearInput。這將會刪除掉所有的指令輸入文字。
使用這個指令時應(yīng)當(dāng)防備一些,由于沒有方法撤消它。8、響應(yīng)一個指令
當(dāng)你用Maya工作時,對應(yīng)的MEL指令往往出現(xiàn)在腳本編輯器的頂部。缺省狀況下,只有那最重要的指令才會顯示。
你可以在腳本編輯器里選擇Edit>EchoAllCommands,虛擬地顯示與你的Maya作用相關(guān)的所有指令。
它可以幫助你學(xué)習(xí)哪些MEL指令觸發(fā)作用。
在你的Maya的作用之間并不是總有一對一的對應(yīng)關(guān)系,這些指令返回響應(yīng)到腳本編輯器里。
假使你使用一個腳本程序去開啟屬性編輯器,一些MEL指令出現(xiàn)在腳本編輯器里(響應(yīng)是開啟的):buildObjectEdMenuMayaWindow│menu4│menuItem56;editSelected;
editMenuUpdateMayaWindow│menu2;
但是,只有以下的MEL指令需要引入屬性編輯器:editSelected;
7
同時,對于一些作用來說,也不總是會將MEL指令的響應(yīng)返回到腳本編輯器里。如,當(dāng)你選擇了一個屬性編輯器時,
腳本編輯器的頂部沒有返回任何信息。
要關(guān)閉返回信息,從腳本編輯器里再次選擇Edit>EchoAllCommands。9、顯示程序中的語句行號
假使你在執(zhí)行一個長的程序時由于錯誤而出現(xiàn)了問題,可以開啟腳本程序的行號,你就可以更簡單地找到錯誤。
要顯示錯誤指令的行號,從腳本編輯器里選擇Edit>ShowLineNumbers。當(dāng)你開啟了ShowLineNumbers選項(xiàng),
Maya在腳本編輯器狀態(tài)信息框(頂部)的旁邊顯示腳本程序的行號。要關(guān)掉行號,在腳本編輯器菜單里再次選擇Edit>ShowLineNumbers。
Maya將顯示行號的設(shè)置保存下來作為以后使用。假使開啟了行號,當(dāng)下一次你運(yùn)行Maya時它們會出現(xiàn)在腳本編輯器里。10、顯示堆棧跟蹤
假使你用埋入的腳本程序文件執(zhí)行一個腳本程序時出現(xiàn)了問題,開啟堆棧跟蹤選項(xiàng)顯示文件結(jié)構(gòu)中的腳本程序錯誤。
要顯示一個腳本文件的堆棧跟蹤,在腳本編輯器里選擇Edit>ShowStackTrace。Maya會在一個窗口里顯示堆棧跟蹤,在腳本編輯器里顯示一個錯誤信息。
使用腳本語言結(jié)點(diǎn)
一個腳本語言結(jié)點(diǎn)是一個包括了一個MEL腳本語言程序的結(jié)點(diǎn)。
當(dāng)該結(jié)點(diǎn)產(chǎn)生或者當(dāng)該結(jié)點(diǎn)被破壞時,該程序被執(zhí)行,它取決于腳本結(jié)點(diǎn)的類型。
本章包括以下內(nèi)容:1、了解腳本語言結(jié)點(diǎn);2、產(chǎn)生腳本語言結(jié)點(diǎn);3、測試腳本語言;4、編輯腳本語言結(jié)點(diǎn);5、設(shè)立腳本語言結(jié)點(diǎn)的執(zhí)行;6、刪除腳本語言結(jié)點(diǎn)。
1、了解腳本語言結(jié)點(diǎn)
腳本語言結(jié)點(diǎn)是把一個MEL腳本語言程序存儲到一個Maya場景文件中的一種方法。
腳本語言結(jié)點(diǎn)也包含了用于產(chǎn)生用戶界面的所有MEL指令,并被用MAYA文件保存。你可以用不同的方法執(zhí)行腳本語言程序??梢灾该饕粋€腳本程序結(jié)點(diǎn)執(zhí)行它的程序:當(dāng)該結(jié)點(diǎn)是從一個文件中讀出的;在渲染一楨圖像的之前或者之后;在渲染一個動畫的之前或者之后。
當(dāng)一個文件關(guān)閉著時使用File>Open或者File>New一個腳本語言程序結(jié)點(diǎn)有三個屬性:
Before、After和Type。決定于腳本程序的類型,當(dāng)執(zhí)行該程序時,說明Before和After屬性。
2、產(chǎn)生腳本語言結(jié)點(diǎn)
可以使用表達(dá)式編輯器產(chǎn)生腳本語言結(jié)點(diǎn)。
為了產(chǎn)生一個腳本語言結(jié)點(diǎn):1--選擇Window>ExpressionEditor。
2--在ExpressionEditor中選擇SelectFilter>ByScriptNodeName。任何現(xiàn)存的ScriptNodes顯示在ScriptNodes表中。3--在ExpressionEditor的Scriptwindow中輸入腳本程序。4--在ScriptNodeName框中輸入一個名字。
5--定義你想要使腳本成為一個之前或者之后的腳本程序。6--點(diǎn)擊Create鍵。
這產(chǎn)生腳本結(jié)點(diǎn)?,F(xiàn)在你可以定義它的類型。
8
7--從ExecuteOn下拉菜單里選擇以下的一個腳本程序結(jié)點(diǎn)類型:
Demand
當(dāng)你使用scriptNode指令,隱含地需求它時,運(yùn)行腳本文件(看在線指令文件的scriptNode指令的信息)。忽略這種類型的腳本文件的之前和之后的屬性。
Open/Close
假使你已經(jīng)指定了該腳本文件作為之前的腳本文件,當(dāng)以批處理模式讀文件時腳本被執(zhí)行。假使你把
它作為之后的腳本文件,當(dāng)文件被關(guān)閉或者沒有以圖示用戶界面模式提供,或者當(dāng)該結(jié)點(diǎn)被刪除時,它被執(zhí)行。
GUIOpen/Close
假使你已經(jīng)指定了該腳本文件作為之前的腳本文件,當(dāng)以圖示用戶界面模式運(yùn)行MAYA,在讀文件時腳
本文件被執(zhí)行。假使你把它作為之后的腳本文件,當(dāng)文件被關(guān)閉,或者沒有以圖示用戶界面模式提供,或者當(dāng)該結(jié)點(diǎn)被刪除時,它被執(zhí)行。
UIConfiguration(內(nèi)部)
之前的腳本文件包括了用戶界面設(shè)置的信息。它是由Maya或者一個plug-in為了保存面板排列和編
輯狀態(tài)信息而自動的產(chǎn)生的。當(dāng)你開啟一個文件時,這個腳本結(jié)點(diǎn)執(zhí)行它的腳本文件。在執(zhí)行之后,該結(jié)點(diǎn)被刪除掉。之后的腳本是不會運(yùn)行的。假使一個文件被提供或被輸入,這個結(jié)點(diǎn)將會不存在。
軟件渲染
假使你選派好腳本作為之前的腳本,腳本的執(zhí)行在一個動畫之前被渲染。假使你選派好腳本作為之后的腳本,腳本的執(zhí)行在一個動畫之后被渲染。
軟件楨渲染
假使你選派好腳本作為之前的腳本,腳本的執(zhí)行在一個楨之前被渲染。假使你選派好腳本作為之后的
腳本,腳本的執(zhí)行在一個楨之后被渲染。8--點(diǎn)擊Edit鍵給腳本結(jié)點(diǎn)賦類型。
9--假使你想增加另外一個腳本結(jié)點(diǎn),點(diǎn)擊NewScriptNode鍵。
Script窗口和ScriptNodeName框被清除,你可以輸入一個新的腳本結(jié)點(diǎn)。
3、測試腳本程序
可以使用表達(dá)式編輯器對腳本程序進(jìn)行測試。為測試一個腳本程序:
1--選擇Window>ExpressionEditor。
2--在表達(dá)式編輯器中選擇SelectFilter>ByScriptNodeName。3--在Scriptwindow中輸入腳本程序,或從ScriptNodes表中。4--點(diǎn)擊TestScript鍵。錯誤顯示在腳本語言編輯器中。
4、編輯腳本語言結(jié)點(diǎn)
可以使用表達(dá)式編輯器對腳本語言結(jié)點(diǎn)進(jìn)行編輯。
為了對腳本語言的編輯定義一個編輯器:1--選擇Window>ExpressionEditor。
2--在表達(dá)式編輯器中選擇SelectFilter>ByScriptNodeName。3--從編輯器下拉菜單中選擇一個編輯器。為了編輯一個腳本語言結(jié)點(diǎn):1--選擇Window>ExpressionEditor。
2--在表達(dá)式編輯器中選擇SelectFilter>ByScriptNodeName。3--選擇你想在ScriptNodeslist中要編輯的腳本語言結(jié)點(diǎn)。4--在Scriptwindow中編輯該腳本語言結(jié)點(diǎn)。
9
5--假使你想撤消你的改變,點(diǎn)擊Reload。Maya重裝原來的腳本語言結(jié)點(diǎn)。6--為了清理Scriptwindow,點(diǎn)擊Clear鍵。
5、設(shè)立腳本語言結(jié)點(diǎn)的執(zhí)行
為了設(shè)立腳本語言結(jié)點(diǎn)的執(zhí)行:
1--選擇File>OpenScene?;蜻x擇File>Open然后在OpenScenewindow中點(diǎn)擊Options。2--點(diǎn)擊復(fù)選框?qū)xecuteScriptNodes開啟或者關(guān)閉。
6、刪除腳本語言結(jié)點(diǎn)
可以使用表達(dá)式編輯器刪除腳本語言結(jié)點(diǎn)。
為了刪除一個腳本語言結(jié)點(diǎn):1--S選擇Window>ExpressionEditor。
2--在表達(dá)式編輯器中選擇SelectFilter>ByScriptNodeName。3--選擇你想在ScriptNodeslist中要刪除的腳本語言結(jié)點(diǎn)。4--點(diǎn)擊Delete按鍵。
定義數(shù)據(jù)
本章描述MEL的數(shù)據(jù)類型它們之間的轉(zhuǎn)換:1、變量;2、常數(shù);3、數(shù)據(jù)類型轉(zhuǎn)換;4、限制。1、變量
所有變量名以$開始。變量名不包括空格和特別字符。你可以使用下劃線和數(shù)字作為變量名但開頭不能是數(shù)字。
識別大小寫,如$temp不同于$Temp。例:
int$radical7Mark;//有效intHEYchief;//ERROR:開頭缺\int$nine;//ERROR:開頭不是\int$_VAL_ID___AIT_;//有效
int$howdyYa`ll;//ERROR:含有無效字符int$1Bill;//ERROR:開頭不能是數(shù)字有以下五種變量類型:類型意義例子
int整數(shù)(...-2,-1,0,1,2...)10,-5,和0float小數(shù)392.6,7.0,and-2.667
string一個或更多的字符\vector三個浮點(diǎn)數(shù)>
matrix浮點(diǎn)數(shù)陣列>
以上類型除matrix外,都可以是一個陣列。如,一個三元素的整數(shù)陣列是一個跟一個的三個整數(shù)。聲明和標(biāo)注變量
聲明一個變量是說明變量的名字和類型;標(biāo)注一個變量是給已生命的變量一個專有的值。下例是將聲明和標(biāo)注合為一步:int$temp=3;
float$Temp=222.222;string$tEmp=\vector$teMp=>;
matrix$temP[2][3]=>;當(dāng)生命矩陣變量時,必需包括二維陣列的尺寸。
10
下例說明對整型、浮點(diǎn)、字符串和矢量陣列型變量陣列的聲明和標(biāo)注:int$TEmp[5]={100,1000,-70,2,9822};float$TeMp[4]={43.3,-10.7,0,82.5};
string$TemP[3]={\vector$tEMp[2]={>,>};
假使一個變量被聲明但未被標(biāo)注,它的所有的值是0;字串變量則?quot;\。float$teMP;//賦值:0;
string$TEMp[3];//賦值:{\
vector$TEmP[2];//賦值:{>,>};matrix$TeMP[3][2];//賦值:>;
假使一個變量被聲明或者被使用而沒有定義它的類型,它被隱含聲明為將要賦值給它的那種類型。$tEMP=0.0;//浮點(diǎn)數(shù)
string$TEMP[];//零元素字符串陣列$trip=\字符串$rip={1,2,3,4};//四元素整型陣列$lip=>;//2X2矩陣$flixp=$TEMP;//零元素字符串陣列
注意值0.0是一個浮點(diǎn)數(shù),而一個0值是一個整型數(shù)。這決定了在隱含聲明時是產(chǎn)生一個浮點(diǎn)數(shù)還是產(chǎn)生一個整型數(shù)。
不建議使用隱含聲明,由于它不象變量的隱含聲明那樣的明白。保存字
MEL的保存字可以是一個變量類型、控制規(guī)律或是表達(dá)一個值。以下是MEL的保存字:breakcasecontinuedefaultdoelsefalsefloatforglobalifinintmatrixnooffonproc
returnstringswitchtruevectorwhileyes
數(shù)據(jù)類型關(guān)鍵字
intfloatvectorstringmatrix布爾常數(shù)關(guān)鍵字
yesnoonofftruefalse滾動控制關(guān)鍵字
ifelseforwhiledoinbreakcontinuedefaultswitchcase其他關(guān)鍵字
globalreturnsourcecatchaliasproc
保存字也區(qū)分大小寫。所以int是整型,Int不是。實(shí)際上alias、source、catch也是保存字,但它們起指令作用,
因此沒有被包括在上述表內(nèi)。字符串
字符串可用\運(yùn)算連接。string$what=\
string$title=\這將使title變量的內(nèi)容為GreatWhiteWhale。矢量
11
為尋址一個vector的各個成分,使用\。vector$LOS=>;
float$firstComponent=$LOS.x;//賦值為1float$secondComponent=$LOS.y;//賦值為2float$thirdComponent=$LOS.z;//賦值為7標(biāo)注矢量的成分:
vector$LOCK=>;
$LOCK=>;//Assigned>但不能直接給一個成分標(biāo)數(shù)字:$LOCK.z=3000;//錯誤
但是尋常當(dāng)訪問一個矢量成分時,你應(yīng)當(dāng)象下面例子那樣圍繞它使用括號:例子:
print$LOCK.x;//錯誤print($LOCK.x);
setAttrpersp.scaleX$LOS.x;//錯誤setAttrpersp.scaleX($LOS.x);陣列
你可以聲明一個int,float,string或vector類型的陣列。陣列的第一個序號為0string$array[3]={\print($array[0]);//顯示\print($array[1]);//顯示\print($array[2]);//顯示\陣列尺寸可以自動地增加。
int$scores[];//聲明為一個0元素陣列$scores[150]=3;//現(xiàn)在是151元素陣列
$scores[200]=5;//現(xiàn)在是201元素陣列但最好不要聲明過大的沒用的陣列,由于它要占內(nèi)存:int$bigBoy[];
$bigBoy[123456789]=2;//危險(xiǎn)
要除去一個陣列的所有元素可使用clear功能。要查看陣列的尺寸可使用size。string$hats[3]={\print(\clear($hats);
print(\以上指令的輸出是:Therewere3hats.Butnowthereare0.矩陣
可以把一個矩陣想象為一個浮點(diǎn)陣列的陣列,或是一個浮點(diǎn)數(shù)據(jù)的二維陣列。矩陣產(chǎn)生后,它的尺寸不能改變。
企圖尋址一個矩陣的不存在的元素將會出現(xiàn)錯誤。在產(chǎn)生矩陣時必需定義它的尺寸。matrix$a1[][]=>;//錯誤:沒有說明尺寸matrix$a2[][];//錯誤:沒有說明尺寸matrix$a3[2][1];//有效:產(chǎn)生>;$a3[0][1]=7;//錯誤:元素不存在
12
$a3[1][0]=9;//有效
聲明而未標(biāo)注值的矩陣,其所有元素都為0。
matrix$a4[2][4]=>;假使矩陣表示一個二維陣列,則第一個索引表示列;地二個索引表示行:matrix$a4[2][4]column0column1column2column3row0-3.462023.7row1429.31001
假使你把矩陣設(shè)想為一個身列的陣列,則第一個索引表示陣列,其次個索引該陣列里的索引:matrix$a4[2][4]index0index1index2index3floatarray0-3.462023.7floatarray1429.31001物體屬性
屬性是場景中的物體的特征或參數(shù)。在Maya中可以用大量方法建立屬性-屬性編輯器、MEL程序、工具盒工具或表達(dá)式。
你可以設(shè)立屬性去控制在工作空間中看到的虛擬的事情。
如,一個NURBS球具有屬性scaleX,scaleY,scaleZ,rotateX,等等。物體屬性名
物體屬性名具有如下格式:objectName.attributeName
其中objectName是物體的名字,attributeName是該物體的屬性名。屬性名中不要使用空格或特別字符,可以用下劃線。
產(chǎn)生一個名字為Brawl的球:sphere-nameBrawl;可以獲取它的屬性的一個值:
float$yScale=`getAttrBrawl.scaleY`;Brawl.scaleY是Brawl物體的scaleY屬性的全名。路徑
假使兩個物體具有不同的父物體,它們可以有一致的名字。當(dāng)說明有一致名字的物體時必需使用路徑:pathname│objectname
其中pathname物體的父物體。管道字符(│)用于區(qū)分路徑。sphere-namedoughnutHole;group-nameGroupA;
sphere-p300-namedoughnutHole;
現(xiàn)在我們有兩個叫做doughnutHole的物體,但一個有父物體GroupA,另一個沒有父物體。以下指令產(chǎn)生一個錯誤,
由于Maya不知道哪個doughnutHole物體要設(shè)立scaleY屬性:setAttrdoughnutHole.scaleY3.3;//ERROR:哪個?你必需輸入屬性的路徑:
setAttrGroupA│doughnutHole.scaleY3.3;setAttr│doughnutHole.scaleY0.3;
你可以說明物體的所有路徑,用管道符進(jìn)行區(qū)分:group-nameGroupBGroupA;
setAttr│GroupB│GroupA│doughnutHole.scaleY1;物體屬性的可能的數(shù)據(jù)類型
每個屬性有特定的數(shù)據(jù)類型。幾何體,粒子物體,Maya中的其他項(xiàng)都具有這些數(shù)據(jù)類型的屬性:數(shù)據(jù)類型意義屬性例數(shù)據(jù)例
13
浮點(diǎn)小數(shù)numbersBall.translateX2.6,7.0,-9.1int整數(shù)(...-1,0,1,2...)BallShape.spansU-289,33,0
boolean0或1Ball.visibilityon,off,yes,no,1,0,true,false考慮一個由以下指令產(chǎn)生的叫做Fire的粒子物體:particle-nameFire-position707;它可以具有以下另外的數(shù)據(jù)類型:數(shù)據(jù)類型意義屬性例數(shù)據(jù)例
vectorarray矢量陣列FireShape.position{>,>}
doublearray浮點(diǎn)陣列numbersFireShape.lifespan1.3331.666
你可以使用getParticleAttr和setParticleAttr指令設(shè)立矢量的元素或一個粒子系統(tǒng)的雙陣列。float$Tmp[]=
`getParticleAttr-atpositionFireShape.pt[0]`;
vector$particlePosition=>;setParticleAttr-atposition-vv007FireShape.pt[0];
對于矢量陣列數(shù)據(jù)類型,Maya用一個陣列的單元素對物體的每一部分表達(dá)指定的屬性。注意,pt[0]表達(dá)產(chǎn)生FireShape的第一部分的索引。每個元素是由三個浮點(diǎn)數(shù)構(gòu)成的。在一個雙陣列中,Maya用一個浮點(diǎn)數(shù)對每一部分表達(dá)特定的屬性。
重要事項(xiàng):在表達(dá)式中,你可以使用一個等于符號(=)設(shè)立或得到一個變量或?qū)傩缘闹?。在MEL語句中,只可以使用(=)設(shè)立或得到一個變量值。
使用MELsetAttr、getAttr、setParticleAttr、getParticleAttr指令設(shè)立或得到一個屬性值。全局和局部變量典型地,你將使用在一個單序列里的變量這些變量叫做局部變量(localvariables),由于它們只出現(xiàn)在局部過程里:float$tester;
假使你產(chǎn)生一個一致名字的局部變量在兩個序列里,兩個變量被分開并且相互無關(guān)。
如:假定你在兩個序列中產(chǎn)生一個取名為$tester的變量。標(biāo)注或修改$tester變量的一個值不影響在其他里的值。
假使你想在一個序列里產(chǎn)生并動畫一個變量,也要把它使用于該序列之外,你可以把它聲明為一個全局變量(globalvariable)。globalfloat$counter;
你就可以用其它MEL指令和語句讀該變量。當(dāng)你要擴(kuò)大該變量的使用范圍時,應(yīng)再次進(jìn)行聲明。globalfloat$crash=8;globalprocholy()
{$crash=7;print($crash+\print($crash+\結(jié)果:8holy();//結(jié)果:7
print($crash+\結(jié)果:8
盡管看起來使用了全局浮點(diǎn)型的crash,實(shí)際上使用了一個隱含產(chǎn)生的局部整型變量(看例子:隱含聲明(Implicitdeclaration))。globalfloat$slash=8;globalprocmoly()
{globalfloat$slash;$slash=7;print($slash+\print($slash+\結(jié)果:8moly();//結(jié)果:7
14
print($slash+\結(jié)果:7
當(dāng)你用了一個單指令聲明白一個全局變量并給它標(biāo)注了一個值,該標(biāo)注僅發(fā)生在由Maya第一次讀指令的時候。
被定義了的序列中的全局變量是被讀的。globalprocproof()
{globalfloat$fight=7;$fight=2;print($fight+\
知道該序列的proof被讀入,變量fight沒有聲明。換言之,Maya還沒有覺察到它的變量的存在。但是,一旦該序列被讀入和被定義,該變量fight被聲明為一個全局浮點(diǎn)型并被賦值為7。該聲明之后,該全局變量對所有的MEL指令都是可見的。即它可被任何MEL指令修改。但是,當(dāng)proof被執(zhí)行后,fight被賦值為2。如:在proof被定義后,以下指令將產(chǎn)生給出的結(jié)果:print($fight+\proof;//Result:2
print($fight+\
假使兩個序列對一致的全局變量聲明和標(biāo)注一個值會出現(xiàn)什么狀況?看以下兩個腳本文件:(假定放在你的腳本目錄中):腳本文件:crush.melglobalproccrush()
{globalfloat$sight=7;print$sight;}腳本文件:groove.melglobalprocgroove()
{globalfloat$sight=9;print$sight;}
一個值標(biāo)注到一個全局變量僅僅是在第一次Maya讀每個腳本文件時。crush();//Result:7groove();//Result:9crush();//Result:92、常數(shù)
MEL中的常數(shù)只有布爾常數(shù)(Booleanconstants)。它實(shí)際上是整型數(shù),值為1或者為0。關(guān)鍵字true,on,和yes具有值1;關(guān)鍵字false,off和no具有值0。3、數(shù)據(jù)類型轉(zhuǎn)換轉(zhuǎn)換為
intfloatstringvectormatrix
int($i)perfectperfectperfect>nonefloat($f)withoutperfectperfect>nonefraction
stringwithoutperfectifperfectperfectifnonefractionstartswithstartswithifstartsnumber,vectororwithnumberelse0floatswith,else0remainingelements0
vectorlengthoflengthof3floatsperfectperfectvectorvectorseparatedfor[1][3]withoutbyaspacematrix,
15
fractionelsenone
matrixfor[1][3]for[1][3]nonefor[1][3]perfectmatrixormatrixormatrixorsmaller,smaller,smaller,lengthoflengthofperfectwithmatrixmatrixremainingwithoutelements0fraction
一個標(biāo)量類型(scalartype)是一個非陣列型。從陣列到標(biāo)量或從標(biāo)量到陣列型沒有轉(zhuǎn)換。int$ski=1.8;//賦值:1
vector$crads=1.7;//賦值:>int$wild=\賦值:3
vector$wrd=\賦值:>int$my=>;//賦值:3
string$oo=>;//賦值:\matrix$so[1][3]=$wrd;//賦值:>float$mole=>;//賦值:0.5vector$ole=>;//賦值:>自動轉(zhuǎn)換
Maya的自動類型轉(zhuǎn)換使我們可以不考慮它們的狀態(tài)以及不考慮是否是能接受的類型。以下是它們的規(guī)則:--Strings支配其他所有類型。--Vectors支配floats。--Floats支配ints。
--假使一個算子為整型,另一個為浮點(diǎn)型,MEL將整型轉(zhuǎn)換為浮點(diǎn)型。--在vector和matrix之間,左邊的類型起支配作用。--賦值時,有左邊的類型支配。
在一個賦值操作中,右邊的類型被轉(zhuǎn)換到左邊的類型。前四條規(guī)則在右手的計(jì)算期間施用于子表達(dá)式;最終的轉(zhuǎn)換發(fā)生在給左邊賦值時。下表是自動類型轉(zhuǎn)換的規(guī)則。
運(yùn)算結(jié)果的數(shù)據(jù)類型
int運(yùn)算子floatfloatfloat運(yùn)算子intfloatint運(yùn)算子vectorvectorvector運(yùn)算子floatvectorvector運(yùn)算子matrixvectormatrix運(yùn)算子vectormatrixmatrix運(yùn)算子stringstringstring運(yùn)算子intstring
$var1=7+1.3;//類型:float(8.3)$var2=7.9+2;//類型:float(9.9)
$var3=2+>;//類型:vector>$var4=0007+\類型:string(\
在最終的例子中,0007是值7的整型,它被轉(zhuǎn)換為一個字符串并與\合并。結(jié)果是一個字符串,它顯式聲明var4為值是\的字符串類型。顯式轉(zhuǎn)換
16
有兩個顯式方法把一個類型的值轉(zhuǎn)換給另一個。最常用的方法是在該值前面用括號說明:$Z=(vector)\$cools=(float)7;//Type:float(7)
$ools=(string)47.554;//Type:string(\你也可以采用跟隨括號來實(shí)現(xiàn)顯式轉(zhuǎn)換:
$ly=vector(\$ooly=int(3.67);//Type:int(3)4、限制整數(shù)除法的舍棄
當(dāng)Maya對常數(shù)和沒有聲明數(shù)據(jù)類型的變量運(yùn)行算術(shù)運(yùn)算時,它依照表現(xiàn)形式推測數(shù)據(jù)類型。如以下指令:float$where=1/2;//Result:0
Maya推測1和2是整型數(shù),由于它們沒有小數(shù)點(diǎn)。該表達(dá)式用整數(shù)1除以整數(shù)2。其整數(shù)結(jié)果是0而余數(shù)是1。Maya不保存該余數(shù)。
由于變量是浮點(diǎn)的,Maya將整數(shù)值0轉(zhuǎn)換為浮點(diǎn)數(shù)0(一致值)。為得到該值的小數(shù)成分,需要將一個整數(shù)轉(zhuǎn)換為浮點(diǎn):float$there=1/2.0;//結(jié)果:0.5或
float$youGo=float(1)/2;精度和最大數(shù)長
對于一個字串、矩陣或陣列,最大尺寸僅取決于你的計(jì)算機(jī)的存儲器的有效容量。但是,浮點(diǎn)和整型有精度和最大長度的限制。
一個整數(shù)的最大長度與C語言中是一樣的,決定于機(jī)器。大部分計(jì)算機(jī)中它的范圍是-2,147,483,648到2,147,483,647。
一個浮點(diǎn)數(shù)的最大長度和精度與C語言中的雙精度數(shù)是一樣的,也取決于機(jī)器。
浮點(diǎn)有精度限制,在長計(jì)算里會積累取舍誤差。但它的精度很高(大約15位的精度),取舍尋常不會成問題。超限折返(Rangewrap-around)
變量有范圍限制。假使超出這個范圍,會產(chǎn)生不期望的后果。int$mighty=2147483647+1;//Result:-2147483648int$radical=-2147483648-1;//Result:2147483647int$buddy=2147483648;//Result:-2147483648int$man=2147483647+2;//Result:-2147483647
當(dāng)超出了變量的最大范圍,變量的值轉(zhuǎn)折為變量的最小值;反之,若超出最小范圍,會轉(zhuǎn)為最大值。float$GG=1.5+1000000000*3;//Result:-1294967294.5
在這個例子中,依照優(yōu)先順序先做乘法。由于是兩個整數(shù)相乘,所以其結(jié)果還是一個整數(shù)。由于它的值超過了整型數(shù)的最大范圍,所以該值被折返。另一個例子:
$GG=1.5+1000000000*3;
$GG=1.5+3000000000;//超出整型最大范圍
$GG=1.5+3000000000+(2147483648)-(2147483648.0);$GG=1.5+3000000000+(-2147483648)-(2147483648.0);$GG=1.5+3000000000-4294967296;$GG=1.5+-1294967296;$GG=-1294967294.5;
編寫語句
17
語句說明程序如何發(fā)揮運(yùn)算作用。本章內(nèi)容有:1、了解指令和運(yùn)算;2、賦值;3、算法;4、比較;5、條件;6、運(yùn)算順序;7、成組運(yùn)算。
1、了解指令和運(yùn)算
指令用運(yùn)算作用或比較數(shù)據(jù)。有四種運(yùn)算類型:--賦值--運(yùn)算--比較--條件
大部分運(yùn)算使用一個值在運(yùn)算的左邊,一個值在右邊。假使這兩個值的類型不同,假使可能,一個值將被轉(zhuǎn)換為另一個值。運(yùn)算在同類間進(jìn)行。2、賦值
賦值運(yùn)算用等號(=)表達(dá)。左邊的變量將被賦予右邊的值:float$counter=5.3;
聲明一個浮點(diǎn)變量,賦給它一個值5.3。
賦值運(yùn)算的結(jié)果是類型和值賦予等號左邊的變量。其結(jié)果可被當(dāng)作同值同類型的常數(shù)。float$owl;
float$hotdog=($owl=5.3)+6;
第而行中浮點(diǎn)$owl被賦值為5.3而$hotdog被賦值為11.3。賦值鏈
int$i1,$i2,$i3,$i4;
$i1=$i2=$i3=$i4=6;//所有變量都被賦值為63、算法
可以使用以下運(yùn)算符號進(jìn)行加、減、乘、比較以及完成變量的其他作用。符號意義數(shù)據(jù)類型
+plusint,float,string,vector,matrix-minus或negationint,float,vector,matrix*forint,float,matrix:multiplyforvector
:dotproductint,float,vector,matrix/dividedbyint,float,vector
%remainderofdivisionint,float,vector^crossproductvector
矩陣型可以用于取模modulus(%)和除divide?(/)運(yùn)算。但是右邊必需是個整型或浮點(diǎn)作為算子。更多信息看Matrices。整數(shù)和浮點(diǎn)數(shù)
對于整型和浮點(diǎn)屬性和變量,遵循基本的數(shù)學(xué)運(yùn)算規(guī)則。取模(%)運(yùn)算在編程語言中尋常有效。int$card=7%3;//Result:1float$bus=0.5%3;//Result:0.5字串
對字串可使用+運(yùn)算,見Strings。矢量
矢量變量間的運(yùn)算,算法^計(jì)算矢量的叉積,算法*計(jì)算點(diǎn)積。對所有其他的運(yùn)算,一個矢量的每個分量與其他矢量的各個成分進(jìn)行運(yùn)算。
18
vector$Vo=>+>;//>vector$Vu=>->;//>vector$me=>/>;//>vector$rf=>%>;//>
點(diǎn)積返回一個浮點(diǎn)。點(diǎn)積往往概念化為兩個變量矢量被它們之間角度的余弦所乘之積的長度的積。vector$V1=>;vector$V2=>;
float$F1=$V1*$V2;//36(點(diǎn)積)點(diǎn)積運(yùn)算(*)的結(jié)果可用以下方程進(jìn)行計(jì)算:
$F1=($V1.x*$V2.x)+($V1.y*$V2.y)+($V1.z*$V2.z);
一個矢量與一個整型或一個浮點(diǎn)間的運(yùn)算把整型或浮點(diǎn)轉(zhuǎn)換為矢量,*運(yùn)算是不同的。*運(yùn)算的結(jié)果是矢量的每個成分被整數(shù)或浮點(diǎn)數(shù)相乘。vector$tak=3.2*>;//>vector$sak=>*5;//>運(yùn)算^只能運(yùn)算于矢量類型。它表達(dá)了叉積運(yùn)算,返回一個矢量。vector$V3=>;vector$V4=>;
vector$V5=$V3^$V4;//>(叉積)
叉積矢量的方向是法線指向兩個變量矢量。該矢量的幅度是兩個矢量的長度之積。可用如下方程計(jì)算結(jié)果:$V5=>;矩陣
可以在每個矩陣的相應(yīng)元素之間只進(jìn)行加或減。矩陣必需具有一致的行數(shù)和列數(shù)。matrix$Va[1][4]=>;matrix$Vb[1][4]=>;
matrix$Vc[1][4]=$Va+$Vb;//>matrix$Vd[1][4]=$Va-$Vb;//>
矩陣相乘時,左矩陣的列數(shù)應(yīng)當(dāng)?shù)扔谟揖仃嚨男袛?shù)。結(jié)果的矩陣具有與左矩陣一致的行數(shù)和與右矩陣一致的列數(shù)。
matrix$Ve[2][4]=>;
matrix$Vf[4][3]=>;matrix$Vg[2][3]=$Ve*$Vf;//>
當(dāng)右邊的項(xiàng)是一個標(biāo)量時,取模和除法算符使用該標(biāo)量作為右邊的項(xiàng)對矩陣的每一個元素進(jìn)行運(yùn)算。以下的例子展示出了這一點(diǎn):
matrix$Vh[1][4]=>%3;//>matrix$Vi[1][4]=>/2;//>略寫
在語句描述中你往往會分派一個變量,它的值與其它一些值進(jìn)行了運(yùn)算。略寫運(yùn)算提供了一種簡單而又快速的方法。
你可以對int,float和vector數(shù)據(jù)類型的運(yùn)算進(jìn)行略寫。
這些算符并沒有提供附加的功能或者提高運(yùn)算速度,但是可以節(jié)省你寶貴的輸入時間。例如,可以不寫成:$bus=$bus+3.5;
19
而可以寫成:$bus+=3.5;
這兩條語句做一致的事情,但是其次條輸入的少。對于任何計(jì)算符,可以將以下格式:變量=變量算符值寫成:變量算符=值
下表示出了這種形式的所有的略寫算符、它們的擴(kuò)展格式和它們的值。
這些算符只對int、float和vector類型定義。但是,+=算符也對string類型定義。略寫格式擴(kuò)展格式值
變量+=值變量=變量+值變量+值變量-=值變量=變量-值變量-值變量*=值變量=變量
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度二零二五民間借貸合同風(fēng)險(xiǎn)評估與管理范本4篇
- 二零二五年度抹灰工程綠色施工與環(huán)保合同4篇
- 二零二五年度教育培訓(xùn)場地租賃合同模板4篇
- 2025年度派駐技術(shù)支持服務(wù)合同模板范本4篇
- 2025年度個人二手房交易糾紛調(diào)解服務(wù)合同
- 2025年建筑工程施工項(xiàng)目經(jīng)理勞動合同模板2篇
- 二零二五醫(yī)療治療期間員工勞動合同補(bǔ)充協(xié)議3篇
- 二零二五年度新型農(nóng)村合作社勞動者勞動合同書
- 2025年度智能家居系統(tǒng)安裝與維護(hù)個人房屋裝修合同標(biāo)準(zhǔn)范本2篇
- 2024版預(yù)售房屋購買合同書
- GB/T 43650-2024野生動物及其制品DNA物種鑒定技術(shù)規(guī)程
- 2024年南京鐵道職業(yè)技術(shù)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 暴發(fā)性心肌炎查房
- 口腔醫(yī)學(xué)中的人工智能應(yīng)用培訓(xùn)課件
- 工程質(zhì)保金返還審批單
- 【可行性報(bào)告】2023年電動自行車項(xiàng)目可行性研究分析報(bào)告
- 五月天歌詞全集
- 商品退換貨申請表模板
- 實(shí)習(xí)單位鑒定表(模板)
- 數(shù)字媒體應(yīng)用技術(shù)專業(yè)調(diào)研方案
- 2023年常州市新課結(jié)束考試九年級數(shù)學(xué)試卷(含答案)
評論
0/150
提交評論