MAXScript - встроенный скриптовый язык для пакета трёхмерного моделирования Autodesk 3ds Max, предназначенный для автоматизации рутинных задач, оптимизации использования существующего функционала, создания новых инструментов редактирования и пользовательского интерфейса. Через скриптовый API позволяет контролировать и модифицировать объекты трёхмерной сцены: геометрию, текстуры, анимацию и другое. Возможно создание различных плагинов и утилит для ускорения выполнения специфических задач. Инструменты Autodesk 3ds Max используют MAXScript во множестве функций, включая оригинальные утилиты и элементы интерфейса.

Целевая аудитория и простота использования Язык предназначен для широкого круга пользователей — начиная от художников-моделеров, заканчивая техническими директорами и программистами. Он предоставляет достаточно вольный синтаксис больше схожий с языком BASIC, чем с C++ или командной оболочкой UNIX (как в случае с Maya 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 -- получаем третью анимационную дорожку --> SubAnim:Transform aBox[#Transform] --получаем эту же анимационную дорожку используя доступ по имени --> SubAnim:Transform aBox -- получаем первый элемент из дорожки трансформации --> SubAnim:Position aBox --получаем второй элемент из дорожки позиции --> SubAnim:Y_Position someArray = #(1,2,5,6,"Hello") -- декларируем массив --> #(1,2,5,6,"Hello") someArray --получаем 4-й элемент --> 6 someArray --получаем 5-й элемент --> "Hello" someArray --получаем 6-й элемент - он не существует --> undefined

Доступ к объектам сцены Ноды сцены (объекты сцены) могут быть доступны используя префикс $ в начале имени. Для примера, $Box01 вернёт объект с именем Box01. Этот же синтаксис может быть использован для доступа к нескольким объектам со схожими именами используя *. Для примера, $Box* вернёт список всех объектов имена которых начинаются с Box, такие как "Box01", "Box02", "Boxer" и так далее.

Доступ к свойствам объектов Свойства доступны с использованием точки в конце переменной, по аналогии с другими известными языками (Объект.ИмяСвойства), или через вызовы GetProperty/SetProperty функций. Для получения списка доступных свойств надо использовать метод showProperties (или более краткая запись show). Скажем, для получения свойств объекта Box01 нужно сделать следующее: showProperties $Box01 --или более короткая запись: show $Box01 -- чтобы получить список всех свойств в качестве имён: theProperties = getPropNames $Box01

Внешние ссылки https://web.archive.org/web/20090902011002/http://wiki.cgsociety.org/index.php/MAXScript https://web.archive.org/web/20110926095642/http://www.kxcad.net/autodesk/Autodesk%5FMAXScript%5FReference%5F9/ 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

Категория:Скриптовые языки Категория:Трёхмерная графика Категория:Программы трёхмерного моделирования Категория:Autodesk