Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MAXScript Part 9.doc
Скачиваний:
1
Добавлен:
11.12.2019
Размер:
136.19 Кб
Скачать

Макро скрипты

Макро скрипты – это программы, написанные на MAXScript, которые ассоциированы с кнопками на инструментальной панели, и выполняются при нажатии этой кнопки. Прежде всего, нужно определить макро скрипт с помощью следующей синтаксической конструкции

macroScript Имя_переменной category: Текстовая_строка

buttonText: Текстовая_строка toolTip: Текстовая_строка

icon: Массив_или_строка silentErrors: Логическое_выражение

Далее должен следовать текст программы на MAXScript, которая и будет выполняться при нажатии кнопки. Рассмотрим пример макро скриптов, создающих свободную и направленную камеры.

macroScript Free_Camera category:"Cameras" tooltip:"Free Camera" \

Icon:#("Cameras",2)

( StartObjectCreation FreeCamera )

macroScript Target_Camera category:"Cameras" \

tooltip:"Targeted Camera" Icon:#("Cameras",1)

( StartObjectCreation TargetCamera )

После определения макро скрипта его имя появляется в списке макро скриптов диалога настройки пользовательского интерфейса. Разместить кнопку, соответствующую макро скрипту, можно на инструментальной панели или панели с закладками. Для этого надо нажать на них правую кнопку мышки и выбрать в появившемся меню пункт Customize. На экране появится диалог Customize User Interface, который изображен на рисунке. В списке макро скриптов Вы видите два только что определенных скрипта.

В выпадающем списке Category надо выбрать категорию созданного макро скрипта и отбуксировать нужный Вам скрипт в выбранное место инструментальной панели. Имя переменной – единственный обязательный параметр. В данном случае в эту переменную ничего не заносится. Макро скрипты запоминаются в файлах, о чем речь будет далее. Если не определен параметр buttonText, то именно это имя заносится в список. Параметр category определяет пункт в выпадающем списке Category. Макро скрипты, определяемые с одинаковыми значениями этого параметра заносятся в списки, которые появляются при выборе этого пункта. Текст всплывающей подсказки, для создаваемой кнопки определяется параметром toolTip.Параметр buttonText задает текст на кнопке и в списке. Текст на кнопке появляется, если не определен параметр icon, с помощью которого определяется картинка на кнопке. Этот параметр может быть представлен либо массивом из строки и числа, либо одной строкой. Строка определяет имя файла, в котором содержатся иконки, а число – номер иконки в этом файле. Если задана только строка, то номер иконки считается равным единице. Имя файла с иконками состоит из двух частей. Первая, базовая, указывается в параметре. Далее следует суффикс, например, “_24i.bmp”, который указывает размер и тип файла с иконками. В качестве имени файла может быть указана и пустая строка. В этом случае используются внутренние иконки 3ds max. Например

macroScript Box category:”Objects” toolTip:”Box”

icon:#(“standard”,1) –Используется первая иконка файла standard

(

StartObjectCreation Box

)

macroScript Sphere category:"Objects" tooltip:"Sphere"

icon:#("", 2) -- Используется вторая стандартная иконка

(

StartObjectCreation Sphere

)

macroScript Cone category:"Objects" tooltip:"Cone"

icon:"myicon" -- Используется вторая иконка файла myicon

(

StartObjectCreation Cone

)

Подробно правила создания файлов с иконками будут рассматриваться далее.

Параметр silentErrors определяет поведение макро скрипта в случае возникновения ошибки. Если этот параметр установлен в true, то сообщение об ошибке не выдается. По умолчанию значение этого параметра – false.

Тело макро скрипта – обычная программа на MAXScript и переменные, определенные внутри него, подчиняются обычным правилам видимости. Если внутри макро скрипта определяется свиток, то в его функциях можно использовать локальные переменные этого макро скрипта, но ни одна внешняя программа не может получить доступа к ним. Определение макро скрипта не генерирует переменной, с помощью которой можно было бы обратится к нему. Вместо этого результатом определения является целое число, которое служит идентификатором определяемого скрипта. Для каждого из определенных в 3ds max макро скриптов запоминается информация о том, в каком файле он содержится и начиная с какого места этого файла выполняется. Последнее особо актуально, если в одном файле определено несколько скриптов. В связи с этим не рекомендуется корректировать, удалять или перемещать файлы, содержащие макро скрипты.

Существует пять способов определения макро скриптов

  • При запуске 3ds max сканируется директорий пользовательского интерфейса и все его поддиректории. Все файлы с расширением .mcr считаются содержащими макро скрипты и выполняются

  • Можно запустить файл, содержащий макро скрипт, на выполнение обычным образом, с помощью кнопки Run Script или меню интерпретатора

  • Можно ввести определение макро скрипта непосредственно в окне интерпретатора. В этом случае файл, содержащий его текст, будет создан автоматически

  • В 3ds max имеется весьма оригинальный способ определения макро скрипта с помощью технологии Drag And Drop. Выделив любой текст программы на MAXScript, Вы можете отбуксировать его на инструментальную панель. После того, как Вы отпустили кнопку мыши, отбуксированный текст запишется в файл. Имя вновь определенного скрипта будет DragAndDropMacroN, где N – уникальный номер. Всплывающая подсказка для такого скрипта не определяется, а категория будет называться DragAndDrop. Чаще всего такой прием применяется для того, чтобы оформить в качестве макро скрипта некоторую последовательность стандартных действий. Текст в этом случае переносится из окна Macro Recorder.

  • Функция macros.new ( ) создает новый макро скрипт. Файл, который будет содержать текст этого скрипта, создастся автоматически, как и при вводе определения в окно интерпретатора.

В MAXScript имеется ряд функций для работы с макро скриптами. Все они являются методами предопределенной структуры macros. Например функция

macros.load Символьная_строка

Загружает как макро скрипты все файлы с расширением .mcr, которые содержатся в директории, указанном символьной строкой. Если строка не указана, то в качестве директория берется директорий текущих настроек пользовательского интерфейса. Создать новый макро скрипт можно с помощью функции

macros.new Символьная_строка_1 Символьная_строка_2

Символьная_строка_3 Символьная_строка_4 Символьная_строка_5

Первая символьная строка задает имя макро скрипта, вторая - категорию, а третья - текст всплывающей подсказки. Четвертый параметр представляет собой текст на кнопке и, наконец, пятый - сам текст скрипта. При таком способе определения картинку на кнопке определить нельзя.

Для выполнения уже определенного макро скрипта предназначена функция

macros.run Символьная_строка_1 Символьная_строка_2

или

macros.run Число

В первом случае выполняется скрипт с именем, заданным первой строкой и категорией, указанной во втором параметре. Во втором используется идентификатор макро скрипта, то есть целое число, которое возвращается оператором его определения. Аналогичные параметры имеет и функция редактирования макро скрипта

macros.edit Символьная_строка_1 Символьная_строка_2

или

macros.edit Число

В результате ее вызова на экране появится окно редактирования, в которое будет загружен текст указанного макро скрипта. Этот способ предоставляет Вам возможность корректно исправить макро скрипт во время работы 3ds max

В качестве примера можно привести макро скрипт, создающий графический файл с копией активного видового окна.

MacroScript GrabViewport category:"Tools" tooltip:"Grab Viewport"

(

---------------------------------------------------------------------

-- Макро скрипт MACROSCRIPT

--Создан:3/23/99

--Исправлен:4/28/99

--Автор: Borislav Petrov

--bobo@email.archlab.tuwien.ac.at

---------------------------------------------------------------------

--Копирует активное видовое окно в графический файл

--Формат Имени файла:

--VPGRAB_ИмяMaxФайла_ИмяВидовогоОкна_НомерТекущегоКадра

---------------------------------------------------------------------

--

-- Инициализация переменных

local grab_bmp --Битовая карта, в которую будет помещен снимок

-- видового окна

local bmp_name --Имя файла для сохранния битовой карты

local get_viewport_name --Имя видового окна

local gac,gct,mfn --Переменные, в которых хранятся активная камера,

-- текущее время, имя MAX файла

--

--Начало макро скрипта

grab_bmp = gw.getViewportDib( ) --Занесем снимок активного окна в

-- битовую карту

get_viewport_name = viewport.GetType( ) --Получим имя активного окна

gvn = get_viewport_name as string --и переведем его в символьную

-- строку

gvn = substring gvn 6 (gvn.count-5) --обрежем строку слева на 5

-- символов

--(Отрезаются символы "view_"

if gvn == "camera" then --если оставшееся слово - "camera"

( gac = getActiveCamera() --получим эту камеру

gvn = gac.name --и ее имя

)

mfn = MaxFileName --Получим имя загруженного MAX файла

if mfn == "" then --Если имя не указано,

mfn = "Untitled" --считаем его "Untitled".

else --В противном случае

mfn = getFileNameFile mfn --возьмем имя без расширения ".MAX"

gct = SliderTime as string --Преобразуем в строку номер текущего кадра

bmp_name = "VPGRAB_"+ mfn +"_" +gvn + "_" + gct --Сформируем имя

-- выходного файла

--Откроем стандартный диалог сохранения файла

bmp_name = getSaveFileName caption:"Save Viewport to:" \ filename:bmp_name \

types:"BMP(*.bmp)|*.bmp|JPG(*.jpg)|*.jpg|TGA(*.tga)|*.tga|"

if bmp_name != undefined then -- Если пользователь подтвердил

-- сохранение файла

( grab_bmp.filename = bmp_name --Получим окончательно выбраное

--имя файла

save grab_bmp --Сохраним в него битовую карту

display grab_bmp --Выведем битовую карту в окно

)

-- Конец макро скрипта

)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]