Уроки: 3ds Max

Пишем макросы. Часть II

Приветствую всех снова... Сегодня мы с вами продолжим работу по улучшению интерфейса макса и приведению его в соответствие нашим пожеланиям. Исходная посылка - та же, что и в прошлом уроке - мы подготавливаем удобные инструменты для lp-моделирования. На примере сегодняшнего урока я хочу показать, как можно упростить себе жизнь, не заморачиваясь на серьезное программирование.
Итак, вводная - мы моделируем, требования к моделингу жесткие, мы практически постоянно должны контролировать количество вершин, фейсов, направления ребер... По умолчанию в максе отображаются только видимые ребра (Vizible Edges), но для нашей ситуации это не подходит. Конечно, мы можем кликнуть правой кнопкой по объекту, выбрать его свойства, снять флажок "Edges Only" и нажать OK. Итого - 4 операции, для обратного действия - столько же. Много! Нам желательно - один клик, либо нажатие одной клавиши.
Перво-наперво идем Customize->Customize User Interface вкладка Keyboard...

и убеждаемся, что такого параметра для назначения горячей клавиши нам не предоставили :( Смотрим то же на владке Toolbars - может быть, есть возможность вытащить на панель закладок кнопку с данной функцией? Опять неудача. Ищем пункт Properties в списке Action, в надежде посмотреть на макроскрипт и "выдрать" оттуда необходимый нам кусок...

М-да... Редактирование макроса для свойств объекта нам недоступно... Приблизительно к таким же по существу результатам приводит попытка найти информацию в справке по максскрипту. Тупик? Не совсем. Открываем окно MaxScript Listener и активируем MacroRecorder

- этот инструмент позволяет фиксировать большую часть событий, происходящих в пределах макса. Создаем бокс, кликаем по нему правой кнопкой мыши и выбираем пункт - Properties, снимаем галку Edges Only и жмем OK. смотрим в окно MaxScript Listener:

Ура, у нас есть параметр! Вводим для проверки в окне MaxScript Listener:

$.alledges = not $.alledges

и жмем ввод. Мы задали выражение на смену значения булевской переменной на противоположное. В окне проекции можно видеть, что вкрытые ребра исчесзли. Выполняем эту команду еще раз - появились, и так - по циклу. Замечательно. Следующий этап нам уже знаком - открываем пустой файл скрипта и пешем "рыбу" - шапку будущего макроса и закрытые круглые скобки в качестве тела макроса:

--------------------------------
macroScript ShowEdges
category:"MAX Script Tools"
internalcategory:"MAX Script Tools"
buttontext:"ShowHiddenEdges"
toolTip:"Show hidden edges"
(
)
------------------------------------

Сохраняем в каталог //root_max/ui/macroscript под именем Macro_AllEdges и заменяем разрешение на *.mcr. Перезапускаем макс и по аналогии с прошлым уроком размещаем кнопку нашего макроса на панели Main Toolbar. Теперь поработаем над красивостями :) а потому открываем фотошоп или аналогичный редактор, и рисуем иконки. В соответствии со справкой, нам надо нарисовать 4 *.bmp файла с общим названием и разными префиксами, я их обозвал MacroScriptTools*.bmp :
1. MacroScriptTools_16a.bmp - разрешение 16x15px, оттенки серого (определяем прозрачность иконки)
2. MacroScriptTools_16i.bmp - разрешение 16x15px, собственно сама иконка (маленькая)
3. MacroScriptTools_24a.bmp - разрешение 24x24px, оттенки серого (определяем прозрачность иконки)
4. MacroScriptTools_24i.bmp - разрешение 24x24px, собственно сама иконка (большая)

Над дизайном я особо не заморачивался, использовав уже существующую иконку и слегка ее изменив. Вы можете нарисовать свои иконки сами или скачать уже готовые мои :) Чтобы скачать архив иконок нажмите на изображение:

Скачать архив иконок

Замечательно, размещаем полученные изображения в папку
\\root_max\UI\Icons\

Идем обратно в макс и кликаем правой кнопкой мыши по созданной нами иконке макроса. Выбираем в контекстном меню пункт Edit Button Appearance и переключаемся в положение Images Button.

В разделе Group выбираем нашу группу: MacroScriptTools , в соответствии с названием, данным иконкам. В окне ниже - только одна иконка, и это правильно, поскольку данную группу создали мы и в ней всего одна иконка. Выбираем ее и жмем OK. Получили аккуратную иконку в интерфейсе :)


Щелкаем по иконку правой кнопкой мыши, выбираем пункт редактирования макроса и дорабатываем тело скрипта:
-----------------------------------
macroScript ShowEdges
category:"MAX Script Tools"
internalcategory:"MAX Script Tools"
buttontext:"ShowHiddenEdges"
toolTip:"Show hidden edges"

(
on execute do
(
if $selection.count == undefined then
(
)
else
try( $.alledges = not $.alledges ) catch ()

)


)
--------------------------------

Что мы написали?

Собственно говоря, только то, что если ничего не выделено (if $selection.count == undefined ) - ничего и не делать, в противном же случае (то есть когда что-то выделено) - изменить режим показа ребер выделения на противоположный.
В тело макроса так же добавлена конструкция

try( <exp>...) catch ()

позволяющая избежать ошибки при попытке выполнить поставленную задачу над объектом, не имеющим ребер как таковых. Как и в прошлом уроке, по существу работы данной функции я вас отсылаю к справке :)
Ну что ж, сохраняем макрос (CTRL+S) и "компилируем" его (CTRL+E), создаем в сцене несколько различных объектов и, поочередно выделяя их по одному пытаемся нажать на нашу кнопку... результат очевиден :)

В качестве послесловия. В данном примере, в отличие от предыдущего, мы не стали задавать изменение состояния кнопки макроса, поскольку функция у нас циклична, и кнопка работает как классический триггер - "перебрасывает" объект из одного состояния в другое и обратно. Главная идея урока - помимо создания нужного мне инструмента :) - показать еще один способ поиска решения поставленной задачи, а так же показать "облегченный" алгоритм, подходящий для описания всех действий, изменяющих состояние или свойства объекта, которые можно описать с помощью булевских переменных. Напомню еще раз, что для уже созданного макроса всегда можно назначить горячую клавишу вызова, тогда вам не придется даже нажимать на кнопку, на создание которой потрачено столько трудов :)

Ну вот вроде и все на сегодня - пользуйтесь, экспериментируйте, творите.

Всегда Ваш - VladiRR

17646 Автор:
Актуальность: 75
Качество: 192
Суммарный балл: 267
Голосов: 2 оценки

Отзывы посетителей:

аватар
 
rendermax80 -8 0
До этого ни разу не пробовал.
Посмотрим, что получится.
Зарегистрируйтесь, чтобы добавить комментарий.
Эту страницу просмотрели: 141 уникальных посетителей