Применение процедур и сценариев  MEL

В  предыдущих разделах уже рассматривалось  несколько  основных элементов  языка MEL. Однако большинство созданных до сих  пор фрагментов  не будут  корректно рабо­ тать в других  условиях,   если  попробовать  сохранить их  в  папке сценариев.  Поэтому и  не предпринималось  никаких попыток  сохранить созданные  команды  в  формате,  который Maya сможет прочитать и  выполнить.  Теперь пришло  время исправить  недостатки  соз­ данного кода и  превратить его во  вполне полнофункциональные  (автономные) сценарии, которые можно переносить с одного места на другое и даже торговать ими.

В   следующих  разделах   рассматриваются процедуры   и     сценарии.    Процедура (procedure) —  это  элементарный блок  создания сценария MEL.  На  фундаментальном уровне это строка объявления, сообщающая Maya о том, что все ее  содержимое является единой именованной  функцией. Сценарий —  это всего лишь  коллекция (collection) из одной или  нескольких процедур.

Процедуры

В абстрактном виде процедура выглядит следующим  образом:

proc   myProcedure ()

{

команды

}

Maya будет выполнять  все заключенные в фигурные скобки команды каждый раз, когда

встретит имя myProcedure в  командной строке или  на панели  ввода редактора сценариев. Здесь myProcedure — это имя процедуры, а круглые скобки  могут содержать любое коли­ чество объявлений  переменных, значения которых могут быть  введены  либо пользовате­ лем, либо другой процедурой в  процессе выполнения.  В  качестве простого примера  напи­ шем процедуру, которая будет создавать указанное пользователем  количество сфер:

global pro c makeBal l  (int  $num){ int $num;

for ($i =1 ; $i <= $num; $i++){ sphere -r 1 -name ("ball" + $i) ;

}

}

Учимся у мастеро в  

К сожалению, объем этой главы не позволяет описать все возможности  языка MEL.  Одним из  наилучших способов  продолжения  изучения языка MEL является чтение (и  копирование фрагментов) сценариев,  написанных другими.  Прочитав  каждую строку  кода  сценария и выяснив,  что она делает, можно научиться очень многому. Еще лучший  подход заключается в  копировании  фрагментов  чужого кода и  его модификации,  чтобы  приспособить  резуль­ тат  к  решению собственных повседневных  задач.  Это  позволит  действительно  начинать создание  весьма полезных сценариев, но перед этим следует  заручиться согласием авторов на использование и/или  модификацию их кода.

Введите код приведенной выше процедуры в  редакторе сценариев  и  запустите его  на выполнение.  Обратите  внимание на то, что в  Maya ничего не произошло. Дело в  том,  что код сценария разместил процедуру в  памяти  Maya, а команды вызова процедуры в  нем не было. Поскольку сценарий уже располагается в  памяти, теперь при  каждом  вводе имени makeBall в командной строке или на панели ввода, сопровождаемого целым числом, на сцене будет создано соответствующее  количество сфер (с именами balll, Ьаl1 2 и т.д.). Введите,  например, команду makeBall 5. В  результате на  сцене будет создано  пять сфер — от balll до balls. Эту процедуру можно сделать "глобальной" (т.е. позволить Maya обращаться  к  ней),  если  сохранить ее  как  текстовый файл  в   следующей  папке (подробности  вскоре):

•     Для Windows

\local dis k (С:)\Documents and Settings\<use r name>

\My Documents\Maya\8.5\script s

•     Для  Macintosh

-home/Library/Preferences/Alias/Maya/8.5/script s

Поскольку процедура — это лишь именованный набор команд MEL,  содержащийся в фигурных скобках,  в  нее вполне можно поместить серию команд  для  постановки  осве­ щения:

///////////////////////////////////// / global proc  lightBoar d  (){

string $sel() =    "Is -lights" ;

string $current;

string $winName =  "lightwindow"; if  ("window  -exists $winName"){

deleteU I $winName ;

}

windo w -title "Lights" -wh 400 300  $winName; scrollLayout ;

rowColumnLayou t -nc 2 -cw 1 160 -cw 2 400 ; for ($current in $sel){

text -1 $current;

attrFieldSliderGr p -min (-1)  -max 10 -at  ($current  + " .intensity") ;

}

showWindow $winName ;

}

//////////////////////////////////////

Теперь после загрузки  (ввода)  исходного кода этой процедуры каждый раз при  встрече имени lightBoard в командной строке или коде данная процедура будет выполнена, и поль­ зователь получит облегченный способ управления всеми источниками света.

Хорошая идея — комментировать  начало и  конец каждой процедуры (так проще найти  их начало и  конец). Начало комментария определяют два символа косой черты (//).

Сценарии

В чем разница между процедурой и сценарием? Сценарий (script) — это коллекция из одной   или    нескольких  процедур.  Таким  образом,  только  что   созданная  процедура lightBoard фактически тоже является сценарием. Настоящий сценарий следует сохра­ нить как  внешний  текстовый файл, имеющий  расширение   .mel. Имя файла сценария должно совпадать с именем последней (глобальной)  процедуры сценария (плюс расши­ рение .mel). Сценарий  рассматриваемого  примера  панели  освещения (lightboard) со­ храните в файле lightBoard. mel папки сценариев  (полный путь указан в разделе вы­ ше).  При  выборе в  редакторе  сценариев  пункта меню  Sav e  Selected  (Сохранить выде­ ленное)  эта  папка   является заданной  по  умолчанию, поэтому  файл   можно  просто сохранить.

Теперь напишем простой сценарий,  который содержит две  процедуры:

// Загрузит е исходны й код этого сценария , а зате м введит е "makeBall

// <число>" в командно й строке ил и редактор е сценариев . Процедур а

// создас т указанно е количеств о из сфер, именам и которы х будут

// "balll", "Ьа112" и т.д.

// Автор :                     Joh n Kundert-Gibb s

// Последня я модификация :  April 16, 2005

// Используйт е на свой страх и риск .

//////////////////////////////////////

/I    Процедур а makelt создае т сфер ы и присваивае т им имена .

//Е й необходим о передат ь количеств о шаров , которы е определяе т

// основная процедура .

proc makelt (int $theNum) {

// $theNum должн а быть переобъявлен а в  процедур е int $theNum;

for ($i =   1;   $i <= $theNum; $i++) {

sphere -r   1   -name ("ball" + $i) ;

}

} // конец makelt

//////////////////////////////////////

//////////////////////////////////////

II   makeBal l – основна я вызываема я процедура .

// Вызывае т процедур у makelt и передае т ей количеств о сфер,

// подлежащи х созданию.

global proc makeBal l (int $num)  { int $num;

makelt ($num) ;

} // конец makeBal l

//////////////////////////////////////

Этот сценарий создает и   использует процедуру, которая фактически  создает  сферы. Главная (main),  или  глобальная  (global),  процедура просто  вызывает  вложенную проце­ дуру. (Как это часто бывает со сложными  сценариями, только заглянув в  его конец, мож­ но обнаружить маленькую процедуру, которая и  вызывает все остальные процедуры сце­ нария.) Последней является как  раз та процедура,  которая  вызывается  при  вводе   в  ко­ мандной строке команды makeBall 5. Она является (и должна являться) единственной глобальной процедурой сценария, а  процедура make It  является локальной  (а следова­ тельно, она не видима  Maya вне сценария).  Обратите  внимание, основная  процедура рас­ положена последней,  поскольку  в   ходе  интерпретации  кода  MEL,  когда  до  нее  дойдет очередь, все  используемые в  ней процедуры должны быть уже загружены, а значит, рас­ полагаться обязаны выше нее.

Сообщени е Procedur e   Not  Found

Иногда  по  некоторым  причинам  Maya не  видит  локальную  процедуру даже тогда,  когда она правильно  расположена в сценарии.   Получив  сообщение  об ошибке  "Procedur e No t Found " (Процедура не  найдена),  попробуйте переопределить  локальные  процедуры  как глобальные, иногда это устраняет ошибку. Кроме того, если  сценарий сохранен в  заданной по умолчанию папке сценариев Maya 8.5, он, как  правило,  способен находить другие про­ цедуры. При  поиске вне  папки  сценариев  заданной по умолчанию выберите   в окне редак­ тора сценариев пункт меню File => Source Script (Файл => Загрузить сценарий) и убедитесь, что этот путь указан в списке.

Прежде  чем  приступить к  самостоятельному  изучению языка  MEL,   изучите примеры  сценариев,  расположенные на прилагаемом CD. Это позволит  привык­

нуть читать комментарии в  коде сценариев, а не в  отдельном текстовом файле.

Резюме

В этой главе описаны основы языка MEL, некоторые дополнительные аспекты  языка сценариев  Maya, а также представлены практические примеры создания  инструменталь­ ных средств  автоматизации  разработки  в   Maya.  Здесь  продемонстрирована  работа с пе­ ременными, циклы и  условные  выражения, а также  создание средств  графического  интер­ фейса, предоставляющего пользователю интуитивно понятный способ работы. Прежде чем переходить к созданию достаточно  сложных собственных  сценариев, имеет смысл изучить примеры сценариев  на  прилагаемом CD.  Они  располагаются от  простого к  сложному и представляют собой прекрасный ресурс для самостоятельного изучения кода.

В следующей главе обсуждаются инструменты системы Maya Paint Effects, а также ее использование для создания интересных  визуальных эффектов.

Источник: Кундерт-Гиббс, Джон,  Ларкинс, Майк,  Деракшани, Дариус, Кунзендорф, Эрик,  и др., Освоение Maya  8.5.:  Пер.  с англ.  – М.:  ООО  «И.Д.  Вильямс», 2007.  – 928  с.:  ил.

По теме:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий