Когда вы работаете с иерархиями на MEL, важно помнить об этом и использовать полные имена объектов, включающие как имя, так и «путь» к объекту. «Путь» в данном случае - это строка с именами всех родительских объектов, разделенных вертикальной чертой.
Если в этой сцене дать команду
select -г pCubel ;
MAYA выдаст сообщение об ошибке
// Error: More than one object matches name: pCubel //
говорящее о том, что несколько объектов в сцене имеют одно и то же имя pCubel. Поэтому обращаться к ним надо с использованием полных имен.
То же самое происходит и при работе с атрибутами. При попытке изменить атрибут объекта с использованием короткого имени вы получите сообщение:
setAttr “pCubel.translateX” 3;
// Error: Not enough data was provided. The last 0 items will be skipped. //
Любопытно, но если вы зададите количество числовых значений для изменяемого атрибута равным количеству объектов с данным коротким именем, то команда setAttr отработает без ошибок:
setAttr “pCubel .translateY” 5 5 ; Кстати, если объект не находится в иерархии, то его полное имя содержит просто одну дополнительную вертикальную черту, обозначающую, что объект пригруппирован к мировому пространству, например: | pTorusI. В общем случае эту черту можно не писать.
Чаще всего одинаковые имена возникают при дублировании групп (иерархий), и это вполне разумно, когда у вас есть, например, набор персонажей, и у каждого из них конечности называются одинаковыми, -человеческими» именами, типа «left_hand» или «right_foot». Однако иногда хочется избежать появления одинаковых имен в сцене (например, для экспорта в другие программы). Для этого в Option Box операции Duplicate существует галка Assign Unique Name to Child Node.
Как правило, MAYA сама отслеживает формирование нужных имен и путей, в частности, при работе с командой ' Is -si', однако в некоторых случаях необходимо помнить о наличии одинаковых имен объектов в сцене.
Работа с циклом. Перебор объектов в списке Коль скоро переменная $Hst содержит список выбранных объектов, самое время пробежаться по этому списку и что-нибудь с этими объектами сделать. Если сказать обычными словами, получится примерно так: «для каждого элемента в списке сделать что-нибудь».
На языке MEL это же означает цикл, который выглядит следующим образом:
string $list[] = 'Is-si'; string $item; for($item in $list)
[
print $item;
}
В данном случае нам понадобилась одна простая переменная типа string (строка) с именем $item, чтобы «засовывать» в нее очередной элемент в списке в процессе перебора всех элементов в цикле. Как видите, на MEL это звучит почти как на английском.
Фигурная скобка открывает тело цикла, то есть набор команд, которые будут выполняться в цикле (их может быть хоть двести). Вторая скобка закрывает цикл и после нее могут идти команды, уже не выполняющиеся в цикле. Такой интеллектуальный цикл сам посчитает, сколько элементов в массиве Slist, и выполнится ровно это число раз. Причем на каждом повторении цикла в переменную $item будет попадать следующий элемент списка.
Если вы напечатали все символы правильно, MAYA напишет длинную строку, состоящую из напечатанных друг за другом имен выбранных объектов: