Что бы прочитать это время в другой процедуре/скрипте, достаточно добавить в скрипт строчку:
global float $startTimer; Таким образом, скрипт сможет обращаться к нашей переменной. Наконец, получим код для вычисления времени, прошедшего с момента нажатия клавиши до ее отпускания. Код добавим в процедуру release:
global float $startTimer;
float $totalTime = 'timerX -startTime $startTimer'; //узнаем "дельта" время Вернемся к нашим маркинг менюшкам: помним, что это всего лишь набор мел кода? Нам нужно только определить, когда вызывать конкретное меню. В этом, как обычно, нам поможет логический оператор if. Мы хотели, чтобы во время работы с полигонами у нас под рукой была менюшка с часто используемыми поли инструментами, в обратном случае используется пресловутое меню для создания объектов, созданное в первой главе.
Таким образом, мы убиваем двух зайцев сразу: с одной стороны, это очень удобно, с другой -пропадает вероятность случайно создать какой-либо примитив во время работы с геометрией. Как точнее определить - работаем ли мы сейчас с полигонами или со сценой? Я пошел по пути наименьшего сопротивления - просто-напросто узнать, подсвечены (hilit-ed) ли на данный момент какие-либо объекты. Если да - вызовем маркинг меню для поли инструментов, если нет - меню “создания”.
Чтобы узнать список подсвеченных на данный момент объектов, воспользуемся процедуркой ls и передадим ей флаг -hl (hilited), говорящий, что ей нужно отфильтровать все, кроме подсвеченных объектов. Далее просто узнаем размер этого списка знакомой процедурой size:
size ('ls -hl'); // возвращает количество подсвеченных объектов Заметим, что тут я не обращаю внимания на тип подсвеченного объекта, то есть на нурбс поверхности наш код также сработает. Позже можно усовершенствовать скрипт и по типу подсвеченного объекта определять, какое маркинг меню открывать.
Теперь у нас есть все инструменты! Собираем вместе долгожданный сетап: Нужно построить хоткей команды: 1. процедура для нажатия на хоткей; 2. для отпускания хоткея соответственно.
Начнем с создания новой команды в hotkey редакторе, я назвал ее CreatePolyEx-trude_ Hotkey_Press.
Обратим внимание, что все наши маркинг менюшки хранятся в разделе User Marking Menus. При этом нам не нужно копировать код вызова маркинг меню, достаточно указать имя команды, которую мы обычно привязываем к хоткею! Например, для вызова меню Create достаточно набрать Create_Press (Create_Release для завершения работы с ним соответственно). Собираем код для CreatePolyExtrude_Hotkey_Press:
global float $startTimer; // первым делом засекаем время нажатия $startTimer = 'timerX';
if ( size (%ls -hl') > 0 ) // проверяем подсвечен ли какой-либо объект
PolyModelingTools_Press; // вызываем маркинг меншшку с поли инструментами
else //не подсвечен ни один объект
Create_Press; // вызываем менюшку создания примитивов