Перейдем от идейных вопросов к техническим. Нам нужно узнать, выделены ли ребра в данный момент, и нужно имя команды, удаляющей ребра. Но самое главное - как перехватить нажатие клавиши delete? Кто крикнул Hotkey Editor? А вот и нет… Нет там такой команды, так же, как и нет возможности прицепить что-либо к клавише delete. Как быть? Выделим ребро на модели, затем нажмем delete и посмотрим, что нам сказала по этому поводу майка:

doDelete; Вспомнив то, что выучили выше, воспользуемся whatls и узнаем, кем является этот doDelete:

whatls doDelete; // ???

// Result: Mel procedure found in:

: /AliasWavef ront/Maya7. O/scripts/others/doDelete .mel//

Ясно: это процедура, находящаяся в одном из startup скриптов; адресок имеется. Все, что нужно сделать, - немного отредактировать этот скриптик. На самом деле, редактировать майские файлы я строго не рекомендую, разве что если только есть много свободного времени на переустановку программы. Вместо этого можно скопировать этот файл и скинуть его в папку:

: \Documents and Settings\henry\My Documents\maya\7.0\scripfcs

И данный скопированный файл уже можно редактировать. Таким образом, майка будет использовать последний вызванный файл (скрипты в папке Documents and Settings вызываются после майских стандартных скриптов; так как процедуры имеют одинаковые имена, Maya будет использовать процедуры из нашего файла). Чтобы убрать нашу модификацию, достаточно просто удалить (или переименовать) скрипт, при этом нет возможности запортить какой-либо из майских файлов.

Приступаем к работе: копируем скрипт doDelete в локальную папку с документами, открываем его в любимом редакторе, находим поиском саму процедуру doDelete и смотрим. К нашему счастью, она весьма проста:

global proc doDelete()

{

string $sel[] = ls -sl -dag'; // узнает имена выделенных объектов skinClusterPreDelete ($sel) ;    // выполняет какую-то процедуру связанную с

// удалением, что именно нас не волнует delete; // процедура удаления :-)

}

Примечание: этот файл найден в седьмой версии Maya, в других версиях файл может чуток отличаться.

Все, что нам нужно сделать, - это добавить логический оператор if, который при условии выделенных эджей применит к ним оператор уничтожения. В обратном случае мы просто не делаем ничего и передаем работу старому коду Maya.

Как определить, выделены ли ребра в данный момент? Существует отличная команда фильтр - filter-Expand, которая фильтрует массив имен (или текущее выделение), оставляя только объекты нужного типа.

Тип задается маской - целым числом. Например, 32 соответствует ребрам, 31 -вершинам, 34 -фейсам и т.д. (полный список в референсе).

К примеру, чтобы получить список всех выделенных ребер на данных момент, можно запустить: filterExpand -sm 32;

// Result: pPlanel.e[0] pPlanel.e[2] pPlanel^P]

Эта команда возвращает массив имен. Нам только остается узнать, с лько имен в массиве (ребер в выделении), и если их больше чем 0, значит, в выделении :ть ребра. Для вычисления размера массива или стринга (текста) воспользуемся командой size.


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