Дальнейшие улучшения построителя кривых ограничиваются только вашей свободной памятью и маниакальной тягой к совершенству. Дам несколько поводов для размышлений и дополнений.

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

Можно посчитать время выполнения скрипта, воспользовавшись командой-секундомером timerX. Выполнение ее без флагов в начале скрипта, запускает секундомер и возвращает текущее время float $st='timerX';, а выражение 'timerX st $st'; может возвратить в конце скрипта время, прошедшее со времени запуска секундомера.

Наиболее красивым решением будет возможность вводить формулы в текстовые поля и строить произвольную по ним. Для этого понадобится команда eval, позволяющая исполнить любую строку, содержащующая в переменной как MEL-команду.

Взрослые мальчики, конечно, заметят, что цикл неоптимизирован: например, проверки в цикле не являются примером для подражания. Однако в данном случае производительность скрипта - не основная его ценность. Если вы все же озабочены оптимизацией, не добавляйте точки к кривой в цикле, а накапливайте в строке длинную команду типа curve -р … -р …, чтобы после выхода из цикла выполнить эту строку как MEL-команду с помощью команды eval.

Еще более взрослые мальчики обнаружат, что у сплайновых кривых есть удивительный атрибут .nurbsCurve, содержащий полное описание самой кривой в виде набора данных (см. документацию к команде setAttr). В атрибут можно «запихать» все описание кривой одной командой setAttr, и тем самым мгновенно построить (или перестроить) кривую целиком.

Работа с меню. Минимизация всех открытых окон Мой опыт общения с начинающими MEL-маньяками показывает, что все они прежде всего озадачены тем, как добавить свои пункты меню в основное меню MAYA или как переименовать уже имеющиеся майские меню. Что ж, придется отдать дань /или: воздать должное/ тяге к хакерству и самоутверждению.

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

Если вы помните, мы удаляли элементы интерфейса командой deleteUI, это наводит нас на мысль, что существуют и другие полезные команды с суффиксом UI для работы с окнами и их элементами.

Точно так же, как для получения списка объектов в сцене существует команда Is, так и для работы со списками существующих окон, меню и других элементов интерфейса есть команда IsUI.

Ее надо использовать с одним из необходимых флагов. Например, для получения созданных в MAYA окон нужно выполнить:

IsUI -wnd;

// Result: AEWindow CURVE_BUILDER CommandWindow MayaWindow //

Дальше можно пустить в ход уже отлаженную выше технологию для работы со списком объектов в цикле. Необходимо перебрать список и минимизировать все окна, кроме основного окна MAYA. Минимизировать любое окно можно, просто установив его «минимизированность» в единицу, то есть изменив значение флага -iconify (такой флаг есть у команды window).


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