- •С чего начать
- •Переменные и присвоение им значений
- •Области видимости
- •Настойчивые переменные
- •Изменяемый тип переменных
- •Присвоение значения по ссылке
- •Выделение памяти и уборка мусора
- •Имена переменных
- •Литералы
- •Числовые литералы
- •Строковые литералы
- •Литералы времени
- •Литералы имен объектов
- •Литералы точек в двумерном и трехмерном пространстве
- •Литералы массивов
- •Выражения
- •Простые выражения
- •Математические выражения
- •Порядок выполнения операций в математических выражениях
- •Полиморфизм
- •Выражения сравнения
- •Логические операции
- •Сокращенное выполнение логических выражений
- •Позиционированные и именованные параметры
- •Приоритет вызова функций
- •Написание вызова функции в несколько строк
- •Другой способ вызова функций
- •Контекстные выражения
- •Комментарии
- •Обращение из одного скрипта к другим
- •Управление порядком выполнения операторов
- •Пропуск выполнения цикла
- •Собственная обработка ошибок
- •Оформление функций
- •Переменная, содержащая функцию
- •Параметры функций
- •Принудительное завершение функции
- •Определение структур
- •Создание функций, локальных внутри структуры
- •Базовые классы maxScript Класс Value
- •Операторы
- •Литералы
- •Операторы
- •Свойства
- •Операторы
- •Точка в трехмерном пространстве
- •Литералы
- •Конструкторы
- •Свойства
- •Операторы
- •Литерал
- •Конструкторы
- •Свойства
- •Произвольный поворот
- •Литералы
- •Конструкторы
- •Операторы
- •Свойства
- •Углы Эйлера
- •Операторы
- •Свойства
- •Прямоугольник
- •Литералы
- •Конструкторы
- •Свойства
- •Операторы
- •Функция
- •Массив_чисел
- •Вспомогательные методы Функция
- •Функция
- •Можно открыть зашифрованный файл, используя функцию
- •Свойства
- •Свойства
- •Особенности работы с ключами анимации
- •Массив параметров
- •Конструкторы
- •Свойства
- •Операторы
- •Множества
- •Шаблонные группы
- •Свойства
- •Операторы
- •Функции для работы с группами
- •Наборы объектов
- •Конструкторы
- •Свойства
- •Операторы
- •Функции, работающие с наборами
- •Дополнительные сведения
- •Конструкторы
- •Свойства
- •Операторы
- •Прочие функции
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Литералы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Прочие функции
- •Скрипт-утилиты
- •Панель скрипт-утилиты
- •Составные части тела свитка
- •Создание перемещаемых окон
- •Видимость локальных переменных, структур, функций и компонент интерфейса из кода свитка
- •Доступ к локальным переменным и прочим элементам утилит и свитков из внешнего кода
- •Компоненты пользовательского интерфейса
- •Название_компонента Имя_переменной Символьная_строка
- •Общие свойства компонентов пользовательского интерфейса
- •Общие параметры компонентов пользовательского интерфейса
- •Типы компонентов пользовательского интерфейса Для примера рассмотрим утилиту, использующую все возможные компоненты пользовательского интерфейса
- •Битовая карта
- •Параметры
- •Свойства
- •События
- •Параметры
- •Параметры
- •Свойства
- •События
- •Параметры
- •Свойства
- •События
- •Выпадающий список
- •Параметры
- •Свойства
- •События
- •Свойства
- •События
- •Кнопка выбора текстурной карты
- •Параметры
- •Свойства
- •События
- •Кнопка выбора материала
- •Параметры
- •Свойства
- •События
- •Список с возможностью множественного выбора
- •Параметры
- •Свойства
- •События
- •Кнопка выбора объекта
- •Параметры
- •Свойства
- •События
- •Задатчик
- •Параметры
- •Свойства
- •События
- •Параметры
- •Свойства
- •События
- •Кнопки с картинками
- •Скрипт контекстного меню
- •Тело контекстного меню
- •Пункт меню
- •Разделитель
- •Подменю
- •Макро скрипты
- •Создание файлов с иконками
- •Средства работы с мышью
- •Остановить работу средства можно вызовом функции
- •Правила оформления средств работы с мышью
- •События
- •Скрипт плугины
- •Правила построения скрипт-плугина
- •Внесение изменений в плугин
- •Урок 1. Твердые тела
- •Создание набора твердых тел
- •Добавление тел к набору
Функция
setPixels Битовая_карта Точка_в_2D_пространстве Массив_цветов
производит обратную операцию – записывает в битовую карту цвета из указанного массива. При этом надо так же тщательно следить, чтобы количество элементов в указанном массиве не приводило к записи за границу битовой карты.
При работе с пикселями битовых карт, имеющих палитру, используются функции
getIndexedPixels Битовая_карта Точка_в_2D_пространстве Число
и
setIndexedPixels Битовая_карта Точка_в_2D_пространстве
Массив_чисел
Они действуют полностью аналогично, но используют не массив цветов, а массив индексов цветов. Цвета при этом хранятся в свойстве .palette, которое описано выше.
Методы для работы с g-буфером
Функция
getChannel Битовая_карта Точка_в_2D_пространстве Имя_канала
анализирует пиксель битовой карты, координаты которого определены вторым параметром. Она возвращает массив значений, по одному на каждый слой выбранного канала, отсортированный по увеличению глубины. Если заданная битовая карта не содержит информации о выбранном канале, то возвращается значение undefined.
Типы данных в возвращаемом массиве определяются выбранным каналом и перечислены в таблице.
Имя канала |
Тип данных |
#ZDepth |
вещественное число |
#matID |
целое число |
#objectID |
целое число |
#UVCoords |
точка в 2D пространстве |
#normal |
точка в 3D пространстве |
#unClamped |
цвет |
#coverage |
вещественное число |
#node |
объект 3ds max |
#shaderColor |
цвет |
#shaderTransparency |
цвет |
#velocity |
точка в 2D пространстве |
#weight |
цвет |
Подробное описание работы с каналами g-буфера будет приведено далее.
Данные о канале в графическом виде можно получить с помощью функции getChannelAsMask, но о ней подробный разговор так же далее.
Вспомогательные методы Функция
setSilentMode Логическое_выражение
включает или выключает режим умолчания в зависимости от значения параметра true или false. Если режим выключен, то любые ошибки ввода/вывода при работе с битовыми картами будут вызывать вывод сообщения об ошибке, если режим включен, диалог с сообщением об ошибке не появляется. В качестве результата возвращается состояние режима умолчания до вызова функции. Значение этого режима глобально, поэтому весьма желательно восстанавливать прошлое значение после окончания работы Вашего скрипта. Получить значение режима умолчания, не изменяя его, можно с помощью функции
silentMode ( )
Эта функция не имеет параметров и возвращает текущее значение режима умолчания.
Функция
selectSaveBitmap caption:Символьная_строка
открывает стандартный 3ds max диалог сохранения битовой карты и возвращает полный путь выбранного файла. Если пользователь закрыл диалог, не выбрав файла, то возвращается значение undefined. Параметр caption необязателен и задает заголовок открываемого диалога.
Функция
freeSceneBitmap ( )
освобождает память, используемую буферами файлов всех битовых карт сцены. Используйте эту функцию, если память фрагментирована большим количеством карт.
Выбрать файл для сохранения и загрузки битовых карт можно так же с помощью функций
getBitmapOpenFileName caption:Символьная_строка_1
fileName:Символьная_строка_2
getBitmapSaveFileName caption:Символьная_строка_1
fileName:Символьная_строка_2
Если пользователь закрывает диалог, не выбрав файла, возвращается значение undefined, в противном случае возвращается строка – полный путь выбранного файла. Первый параметр задает заголовок диалога, второй – текст в строке ввода имени файла. Если в результате работы функции getBitmapSaveFileName будет выбран существующий файл, то будет выдан запрос на подтверждение перезаписи файла.
Примеры
Первый пример показывает, как с помощью MAXScript записать анимационный файл
T = teapot ( ) -- Создадим чайник, чтобы было что анимировать.
animate on at time 10 \ -- Установим контекст анимации и времени
rotate T 180 z_axis -- и повернем чайник.
b = bitmap 160 120 filename:"c:\\t.avi" -- Создадим битовую карту
for i =1 to 10 do -- Организуем цикл по кадрам
( at time i -- Устанавливаем временной
-- контекст,
render 160 120 to:b -- выводим результат в
-- битовую карту,
save b -- и сохраняем ее.
) -- Если сохранить ПОСЛЕ цикла,
-- запишется только последний кадр.
close b -- Закроем выходной файл. Это так же
-- освободит ссылку на битовую карту
-- и занимаемую ей память.
Второй пример читает битовую карту из файла и выводит в окно интерпретатора программу, которая сама создает такую же карту, что и прочитанная. Вы можете скопировать полученную программу в свой скрипт и использовать, например, при создании кнопки с картинкой
(
b = selectbitmap ( ) -- Откроем исходный файл
bname="bitmap_"+(getfilenamefile b.filename) -- Определим имя функции
w=b.width -- Определим высоту и ширину картинки
h=b.height
format "----------\nfn load_% = (\n" bname -- Определение функции
format "local % = bitmap % %\n" bname w h -- Создание карты в
--функции
-- запись функции, распаковывающей данные о пикселях
format "fn unpack val = for p in val collect (r = p/256^2; g = p/256-r*256; b = mod p 256; color r g b)\n"
for r = 0 to h-1 do -- Для каждой строки карты
-- получим функцию для записи колонок карты
( format "setpixels % [0,%] (unpack #(" bname r
pixels=getpixels b [0,r] w -- чтение колонки карты
for c=1 to w do -- цикл по пикселям
( p=pixels[c] -- получим пиксель
-- Упакуем цветовые данные в целое число
format "%" (((p.r as integer)*256+(p.g as integer))*256+(p.b as integer))
if c != w then -- Если пиксель не последний
format ", " -- поставим запятую
else
format "))\n" -- иначе перейдем на новую строку
)
)
format "return %\n" bname -- возврат битовой карты
format ")\n----------\n" -- завершение функции
)
Потоки
Файловый поток
Класс файловый поток предоставляет средства для ввода и вывода в текстовый файл.
Литералы
Литералов для файлового потока не предусмотрено
Конструкторы
Функция
createFile Символьная_строка
создает новый файл с именем, заданным символьной строкой, и возвращает файловый поток в случае успешного завершения. В противном случае возвращается значение undefined. Открытие уже существующего файла осуществляется с помощью функции
openFile Символьная_строка_1 mode:Символьная_строка_2
Первая строка – имя открываемого файла, вторая – необязательный именованный параметр, означающий режим открытия. Второй параметр может принимать одно из двух значений. “a” означает открытие для добавления записей в файл, “r” – открытие только для чтения.
