pCubelpCube2pCube3pCube4pCube5pCube6pCube7pCube8pCube9pCube…

Примечание. Размер списка или любого другого массива вы можете узнать с помощью команды size. Например:

$N=size($list);

// Result: 2650 //

Теперь самое время вместо команды print сделать какие-нибудь интеллектуальные манипуляции над каждым выбранным объектом, например, изменить ему размер по вертикали, то есть атрибут scaleY. Вы, естественно, заметили, что если в Channel Box вручную вбить значение для любого атрибута, MAYA откликнется на это в Script Editor командой типа

setAttr “pCube23.scaleY” 1.4; Соответственно, вместо “pCube23.scaleY” хочется подставить что-то типа $item.scaleY, а вместо 1.4 какое-нибудь случайное число.

Однако MAYA не сможет понять запись Sitem.scaleY , так как реального геометрического объекта с именем Sitem не существует. Но коль скоро мы знаем, что в переменной $item находится строка, равная имени очередного объекта в списке, мы можем сконструировать строку типа “pCube23.scaleY” следующим образом $item + “.scaleY”

Пытливые умы наверняка догадаются, что операция суммирования для строк всего лишь склеивает две строки в одну (другие операции для строк просто не определены).

Теперь мы можем переписать наш цикл так

string $list[] = Is -si'; string Sitem; for($item in $list)

{

setAttr ($item+”.scaleY”) (rand(0,2));

]

Если вы не сделали ни одной ошибки и выполнили вышеприведенные строки, то кубики на экране должны стать разных размеров.

Полученный цикл, являет собой пример очень часто встречающейся конструкции для изменения атрибутов выбранных объектов. Постарайтесь вникнуть в смысл записи:

setAttr ($item+”.scaleY”) (rand(0,2)); Она является образцом создания полного имени атрибута, включающего в себя имя объекта. Функция rand(0,2) возвращает, в данном случае, значение от нуля до двух. Дополнительные скобки вокруг нее означают «посчитать выражение в скобках и выдать его наружу в виде числа».

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

string $list[] = ' Is -si'; string $item; for($item in $list)

i

setAttr ($item+”.scaleY”) (rand(3,7));

}

Скобки и кавычки Примечание. Те, кто имеют хоть небольшой опыт программирования или увлекаются чтением чужих программ, без сомнения будут смущены наличием двух способов вызывать функции-команды. На MEL можно вызвать функцию при помощи традиционных скобок

$x=rand(1.1, 2.5); или «императивным» способом, с помощью спецкавычек, «ловящих» результат выполнения команды и «отдающих» его наружу:

$x='rand 1.1 2.5'; Нет никаких рекомендаций по использованию того или иного стиля. Это дело вкуса, а результат вызова команд будет идентичным. Дело в том, что довольно неудобно использовать традиционные скобки для вызова чисто MEL-овских команд типа sphere с огромным количеством флагов

sphere(“-p”, 0, 0, 0, “-ах”, 0, 1, 0, “-ssw”, 0, “-esw”, 360, “-г”, 1, “-d”, 3, “-s”, 8, “-nsp”, 4, “-ch”, 1);

string $l[] = ls(“-sl”, "-cam”);


⇐ вернуться назад | | далее ⇒