Перейдем от идейных вопросов к техническим. Нам нужно узнать, выделены ли ребра в данный момент, и нужно имя команды, удаляющей ребра. Но самое главное - как перехватить нажатие клавиши 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.