Сохраняем созданную команду нажатием на клавишу Accept.
Теперь займемся процедурой отпускания хоткея. Создадим новую команду в хоткей эдиторе - Create-PolyExtrude_Hotkey_Release. Поразмыслим над ее кодом. Прежде всего, нужно вызвать процедуру зачистки после marking менюшки. Например, Create_Release. Вызова только ее достаточно, так как Release код всех маркинг менюшек одинаков:
if ('popupMenu -exists tempMM') { deleteUI tempMM; } // если временное pop up меню
// существует - убиваем его
// все вызванные маркинг меню создаются с именем tempMM
Можно было написать и этот код, но Create_Release выглядит элегантнее. Затем мы должны измерить время нажатия клавиши и на его основании решить, запускать ли процедуру “Экструдер”.
Create_Release; // "чистим" после вызова маркинг менюшки
global float $startTimer; // определяем глобальную переменную с временем
if ('timerX -startTime $startTimer' < 0.5) // проверяем заняло ли нажатие хоткея меньше { //0.5 секунды, если да - вызываем ЭкструДер
if (size('filterExpand -sm 32') > 0)
ExtrudeEdge; else if(size('fUterExpand -sm 34') > 0)
ExtrudeFace; else if (size('filterExpand -sm 31') > 0)
ExtrudeVertex;
} // обратите внимание, скобки добавлены для удобства чтения, технически можно опустись.
Кстати, значение 0.5 секунды, скорее всего, не идеальное, я советую поиграться с ним и подстроить на свой вкус.
Теперь все, что осталось сделать, - это посадить CreatePolyExtrude_Hotkey на ваш любимый хоткей. Не забудьте также посадить CreatePolyExtrude_Hotkey_Release на release event клавиши. Как только это будет сделано, можно приступить к тестингу.
Так же хотел бы в двух словах упомянуть о команде setMenuMode, которая расскажет нам о текущем режиме работы.
Например:
if ('setMenuMode' == "Animation")
Она проверит, работаем ли мы в данный момент в режиме Animation. Используя эту команду и еще один оператор if, можно заставить хоткей вести себя по-другому в режиме, отличном от Modeling.
Также можно узнать, в каком эдиторе мы работаем в данный момент командой getPanel -wf; флаг -wf означает “with focus”, то есть активное окно на данный момент. Как обычно, бросьте этот код на шелф и посмотрите, что он выдает при разных выделенных окнах. Теперь все, что нужно для того, чтобы заставить майку выполнять разные хоткей в разных эдиторах, - это добавить if, как и в случае с setMenuMode, который в зависимости от конкретного эдитора будет вызывать конкретную команду/ менюшку. К примеру, с помощью этой команды очень легко модифицировать команду создания плоскости, например, чтобы плоскость создавалась именно в плоскости текущего вьюпорта.
Правда, чтобы маркинг менюшки заработали, скажем, в UV эдиторе, для pop up меню нужно изменить родительский layout (флаг -parent), допустим, на polyTexturePlace-mentPanel1 (имя мне подсказала команда getPanel -wf). Для того чтобы маркинг менюшкс работала всегда и везде, можно изменить ее код так (жирным шрифтом):
if ('popupMenu -exists tempMM') { deleteUI tempMM; } popupMenu -button 1 -ctl false