MAXScript

MAXScript
Класс языка
Тип исполнения компилируемый
Появился в 1997
Автор Джон Уэйнрайт (John Wainwright), Ларри Минтон (Larry Minton)
Разработчик Kinetix, Autodesk
Выпуск Version 2008
Система типов динамическая
Испытал влияние BASIC

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[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

Внешние ссылки

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.