
Скрипт контекстного меню
MAXScript предоставляет ряд средств для того, чтобы создавать меню, которые будут появляться в произвольном месте экрана, чаще всего при нажатии правой кнопки мышки. Данное средство не дает возможности использовать компонентов пользовательского интерфейса, но Вы можете при выборе пункта меню открыть перемещаемое окно, на котором размещены нужные Вам компоненты.
Определение контекстного меню осуществляется с помощью следующей конструкции
rcmenu Переменная
Далее должно идти тело определения меню, структуру которого рассмотрим далее. В указанную переменную помещается ссылка на вновь созданное меню. Следующие методы позволяют зарегистрировать меню и наоборот разрегестрировать.
registerRightClickMenu Контекстное_меню
регистрирует указанное меню
unRegisterRightClickMenu Контекстное_меню
разрегистрирует, а
unRegisterAllRightClickMenus ( )
разрегистрирует все ранее зарегистрированные меню.
Например, следующий скрипт добавляет два следующих пункта в контекстное меню – Cast Shadows и Receive Shadows
rcmenu MyRCmenu
(
menuItem mi_cs "Cast Shadows" checked:false
menuItem mi_rs "Receive Shadows" checked:false
--
on MyRCmenu open do
(
local sel = (selection.count == 1)
-- Включается только если выбран один объект
mi_cs.enabled = mi_rs.enabled = sel
-- Установка флажков у пунктов меню
if sel do
(
mi_cs.checked = $.castShadows
mi_rs.checked = $.receiveShadows
)
)
-- Обработчики событий выбора пунктов меню
on mi_cs picked do $.castShadows = (not $.castShadows)
on mi_rs picked do $.receiveShadows = (not $.receiveShadows)
)
-- Регистрация меню
registerRightClickMenu MyRCmenu
Можно зарегистрировать сколько угодно меню. Если зарегистрировано меню с уже зарегистрированным именем, то новое меню перепишет старое. Каждое меню может быть выведено на экран с помощью метода
popUpMenu Контекстное_меню pos: Точка_в_2D_пространстве
rollout: Свиток allign: Имя
Первый параметр задает выводимое меню. Прочие параметры необязательны. Координаты меню на экране задаются параметры pos. Если местоположение меню должно быть привязано к свитку, то этот свиток должен быть задан с помощью параметра rollout. Если параметр pos не задан, то меню выводится рядом с курсором мыши. Способ выравнивания по курсору определяется параметром align, который может иметь следующие значения.
#align_topleft
#align_topcenter
#align_topright
#align_bottomleft
#align_bottomcenter
#align_bottomright
#align_vcenterleft
#align_vcentercenter
#align_vcenterright
Тело контекстного меню
Тело контекстного меню строится точно так же, как и тело свитка. Локальные переменные, функции и структуры могут определяться внутри него. Доступ из внешнего кода к ним осуществляется так же, как и к переменным определенным внутри свитка. У контекстного меню есть свои элементы интерфейса – пункт, подменю и разделитель. Для них, как и для компонентов, размещаемых на свитке, определяются функции обработчики. Само меню может генерировать только одно событие. Оно происходит, когда меню открывается первый раз, а функция обработчик для него определяется так
on Контекстное_меню open do
Компоненты меню