Кроме того, не для всех атрибутов есть команды типа move, и иногда нужно работать со значением конкретного атрибута.
Можете выделить полученный скрипт и гордо перетащить его на полку. Для его дальнейшего использования достаточно выделять объекты и нажимать на кнопку на полке.
Кроме того, запомните в уме и сохраните в текстовом файле конструкцию получения списка выбранных объектов и циклический перебор их в цикле
string $list[] = Is -si'; string $item; for($item in $list)
{
}
Вы неоднократно еще будете использовать эти команды как шаблон для написания новых скриптов, так как данная конструкция является совершенно стандартной и встречается в половине программ, написанных пользователями MAYA.
Создание Noise Deformer
Разберем теперь, как еще можно использовать вышеполученный универсальный скрипт для работы с выделенными объектами. Оказывается, он легко адаптируется для работы с выделенными компонентами.
Создайте в новой сцене сплайновую сферу.
Задайте для нее в Channel Box: sections=30, spans=30.
Выделите часть контрольных вершин, например с левого края.
В Script Editor отредактируйте предыдущий скрипт, убрав из него команды scale и rotate (какой смысл вращать вершины?) и добавив перемещение по вертикали:
string $list[] = ' Is -si'; string $item;
for($item in Slist)
{
move -r (rand(-0.1,0.1)) (rand(-0.1,0.1)) (rand(-0.1,0.1)) $item;
}
Выполните его, в надежде на то, что скрипт пробежит по списку выбранных вершин и сдвинет каждую из них немного в случайном направлении.
Однако вершины сдвинутся как-то странно, целыми группами. Нажмите Undo. Выделите снова часть вершин и загляните в Script Editor. Там должна появиться команда типа:
select -г nurbsSpherel .cv[4][13:16] nurbsSpherel .cv[5:6][12:17] nurbsSpherel ,cv[6][18] nurbsSpherel. cv[7][11:18] nurbsSpherel .cv[8][10:19] nurbsSpherel .cv[9] [9:19] nurbsSpherel .cv[10:25][8:19] nurbsSpherel.cv[26] [9:18] nurbsSpherel .cv[27][9] ; Очевидно, что MAYA формирует список выделенных вершин, группируя их в «кучки» по степени близости друг к другу.
Если выделить и выполнить команду Is -si, она выдаст в точности этот же список и, следовательно, наш цикл будет случайным образом двигать целые «кучки» вершин.
Выбирать их по одной, нажимая Shift - это, естественно, не вариант. Но, к счастью, у команды Is есть флаг, который возвращает список выбранных объектов (или компонент) в «длинной» форме, где каждая компонента перечислена индивидуально. Подправьте первую строчку скрипта, добавив в команду Is флаг -fl.
string $list[] = 'Is -si -fl'; string $item; for($item in Slist)
{
move -r (rand(-0.1,0.1)) (rand(-0.1,0.1)) (rand(-0.1,0.1)) $item;
}
Теперь цикл пробегает по каждой выделенной вершине и сдвигает ее немного.
Undo по прежнему работает. Возможно некоторым настойчивым умам захочется изменять величину смещения, а редактировать каждый раз шесть цифр довольно утомительно. Для этого проще создать простую переменную типа float.
float $d=0.05; string $list[] = ' Is -si -fT; string Sitem; for($item in $list)
{
move -r (rand(-$d,Sd)) (rand(-$d,$d)) (rand(-$d,$d)) $item;