Interested Article - MAXScript
- 2020-10-12
- 1
MAXScript - встроенный скриптовый язык для пакета трёхмерного моделирования Autodesk 3ds Max , предназначенный для автоматизации рутинных задач, оптимизации использования существующего функционала, создания новых инструментов редактирования и пользовательского интерфейса . Через скриптовый API позволяет контролировать и модифицировать объекты трёхмерной сцены: геометрию, текстуры , анимацию и другое. Возможно создание различных плагинов и утилит для ускорения выполнения специфических задач. Инструменты Autodesk 3ds Max используют MAXScript во множестве функций, включая оригинальные утилиты и элементы интерфейса.
Целевая аудитория и простота использования
Язык предназначен для широкого круга пользователей — начиная от художников-моделеров, заканчивая техническими директорами и программистами. Он предоставляет достаточно вольный синтаксис больше схожий с языком BASIC , чем с C++ или командной оболочкой UNIX (как в случае с MEL script). Внутренняя структура имеет много общего с языком LISP и основывается на выражениях. Созданная с помощью MAXScript новая пользовательская функция легко интегрируется в 3ds Max и затем может быть использована как и любое другое встроенное по умолчанию средство. Язык рассчитан на обычного пользователя и по замыслу создателей для его использования не нужно иметь большой опыт программирования на каком-либо из распространенных языков программирования .
Oсобенности синтаксиса
Комментарии
Комментарии выделяются символами "--" (двойное тире) в начале строки. Блоковые комментарии выделяются используя C-подобный синтаксис:
-- ваш обычный комментарий
/* ваш блоковый комментарий */
Регистронезависимость и строковые переменные
Язык не чувствителен к регистру символов . Единственное исключение лишь сравнение строковых переменных. Предоставлен также специальный тип переменных name , которые чувствительны к регистру и обычно используются как перечисляемый тип для передачи в функции вместо строк. Для декларирования подобной переменной используется символ # . Также присутствует встроенная функция matchPattern , которая позволяет сравнивать строки с учётом и без учёта регистра:
"HELLO" == "hello"
-->false
"HELLO" as name == "hello" as name --конвертирует в тип name
-->true
#HELLO == #hello --# декларирует переменную типа name
-->true
matchPattern "HELLO" pattern:"hello"
-->true
matchPattern "HELLO" pattern:"hello" ignorecase:false
-->false
Инструкции
Инструкции не нужно заканчивать точкой с запятой (;). Это необходимо делать лишь в случае, когда они находятся на одной строке:
a = 10
print a
--запись аналогична следующей:
a = 10;
print a;
--которая аналогична идущей ниже:
a = 10; print a;
Декларирование переменных
Переменные не требуют явного декларирования типа или присваивания значения. Неинициализированные переменные всегда возвращают специальное значение undefined , которое эквивалентно NULL . Тип переменной зависит от значения, которое она хранит, и может меняться динамически :
a = 10 -- тип переменной а - целое число
a = "b" -- тип переменной а стал строкой
Организация кода
Круглые скобки используются чтобы обозначить блоки кода и пространства имён.
Массивы
Массивы обозначаются с использованием синтаксиса #() и не имеют строго типа членов — один и тот же массив может содержать элементы любого типа, включая другие массивы. Индексация массивов начинается с единицы (1).
Битовые массивы
Фигурные скобки используются только как часть декларирования битового массива (bitArray) следующим образом #{} . Битовые массивы — сжатые списки, которые содержат только флаги (ложь или истина) и используются для хранения состояния выделенных элементов, такие как точки вершин или треугольники трёхмерного объекта.
Доступ по индексу
Квадратные скобки используются для индексированного или именного доступа к частям объектов или элементов массивов:
aBox = box() -- создаём куб
--> $Box:Box01 @ [0.000000,0.000000,0.000000]
aBox[3] -- получаем третью анимационную дорожку
--> SubAnim:Transform
aBox[#Transform] --получаем эту же анимационную дорожку используя доступ по имени
--> SubAnim:Transform
aBox[3][1] -- получаем первый элемент из дорожки трансформации
--> SubAnim:Position
aBox[3][1][2] --получаем второй элемент из дорожки позиции
--> SubAnim:Y_Position
someArray = #(1,2,5,6,"Hello") -- декларируем массив
--> #(1,2,5,6,"Hello")
someArray[4] --получаем 4-й элемент
--> 6
someArray[5] --получаем 5-й элемент
--> "Hello"
someArray[6] --получаем 6-й элемент - он не существует
--> undefined
Доступ к объектам сцены
Ноды сцены (объекты сцены) могут быть доступны используя префикс $ в начале имени. Для примера, $Box01 вернёт объект с именем Box01 . Этот же синтаксис может быть использован для доступа к нескольким объектам со схожими именами используя * . Для примера, $Box* вернёт список всех объектов имена которых начинаются с Box , такие как "Box01", "Box02", "Boxer" и так далее.
Доступ к свойствам объектов
Свойства доступны с использованием точки в конце переменной, по аналогии с другими известными языками (Объект.ИмяСвойства), или через вызовы GetProperty/SetProperty функций. Для получения списка доступных свойств надо использовать метод showProperties (или более краткая запись show ). Скажем, для получения свойств объекта Box01 нужно сделать следующее:
showProperties $Box01
--или более короткая запись:
show $Box01
-- чтобы получить список всех свойств в качестве имён:
theProperties = getPropNames $Box01
Внешние ссылки
- Autodesk 3ds Max 9 MAXScript essentials (2007), Focal Press, ISBN 9780240809328
- Roger Cusson, Pia Maffei, 3ds max 7 fundamentals and beyond courseware manual , Focal Press (2005), ISBN 9780240807393
- 2020-10-12
- 1