run Time Command -q -c CreatePolygonCylinder;
// Result: perfоrmpolyPrimitive Cylinder 0 //
Maya нам по секрету рассказала что за код находится внутри этой команды. Но мы не остановимся, пока не узнаем всю правду, поскольку performPolyPrimitive по-прежнему не находится в референсе. Существует очень функциональная команда, которую можно вызвать следующим образом:
whatls "а че это?";
// Result: Unknown //
Эта команда расскажет, чем является фрукт, который мы ей подсунули. Продолжим наше расследование и спросим у команды, что такое performPolyPrimitive:
whatls performPolyPrimitive;
// Result: Script found in
//AliasWavefront/Maya7 .0/scripts/others/perf ormPolyPrimitive .mel //
Опа! Все ясно - это одна из процедур, определенных в стартовых скриптах майки, при этом нам любезно предоставлен адрес, по которому эту процедуру можно отыскать. Особые энтузиасты могут даже изучить содержимое процедуры.
Вернемся к нашей CreatePolygonCylinder. Использование ее вместо кода имеет одно преимущество: в отличие от конкретной команды polyCylinder, CreatePolygonCylinder процедура создает примитив с настройками, указанными в опциях создания примитива. То есть если мы в окошке опций для цилиндра изменили радиус/кол. сегментов, наше маркинг меню создаст новый цилиндр с новыми опциями, в отличие от polyCylinder команды.
Теперь мы разобрались, кто есть кто, как отличить базовую (API) команду от мел процедуры. Дело за малым: нужно сохранить наше маркинг меню, найти его в хоткей эдиторе, в категории User marking menus, и прицепить к любимой клавише. Обратите внимание на то, что команды для вызова маркинг меню - это по-прежнему просто набор мел кода, что дает нам возможность комбинировать маркинг меню с другими командами, менюшками и т.д.
Итак, я надеюсь, этот параграф дал вам базовое представление о том, что к чему. Вдоволь наигравшись
(тонкий намек на основательное закрепление материала), идем дальше.
Добавление удобств. Заставляем стандартные вещи работать нестандартно.
Вам никогда не хотелось изменить тот факт, что при включении режима компонентов правой кнопкой мыши, режим выделения по-прежнему остается объектным (в отличие от F8-F11)? Или что при удалении ребер совершенно естественной клавишей delete остаются вершины?
Давайте изменим положение вещей. Для начала изменим поведение любимой клавиши - delete в отношении ребер. Определимся с тем, что нам нужно: известно, что для красивого убиения ребер (без остатка вершин) существует команда Delete Edge (Edit Polygons). Нам нужно узнать, выделены ли ребра в данный момент, и применить заветную команду; если нет то нужно дать майке делать то, что она делала ранее. Возникает пара вопросов: что если нам все же захочется удалить ребра обычным способом, оставив вершинки? Хм, добавим комбинацию - скажем, shift delete - для этих целей, А что если кроме ребер мы выделим что-нибудь еще? Тут несколько вариантов: если мы хотим чистенький и красивый скрипт, работающий в любых случаях, мы заставим работать его и при этих условиях. Если же мы делаем это для себя и предполагаем, что при удалении ребер ничего выделено не будет, мы пишем простой вариант скрипта. В данном примере я рассмотрю оба варианта.