Сохраняем созданную команду нажатием на клавишу 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


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