MAXScript

Поделись знанием:
Перейти к: навигация, поиск
MAXScript
Класс языка:

скриптовый, структурный, императивный, объектно-ориентированный

Тип исполнения:

компилируемый

Появился в:

1997

Автор:

Джон Уэйнрайт (John Wainwright), Ларри Минтон (Larry Minton)

Выпуск:

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

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

  • wiki.cgsociety.org/index.php/MAXScript
  • www.kxcad.net/autodesk/Autodesk_MAXScript_Reference_9/
  • 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

Напишите отзыв о статье "MAXScript"

Отрывок, характеризующий MAXScript

– Что же вы молчите, mon cousin? – вдруг вскрикнула княжна так громко, что в гостиной услыхали и испугались ее голоса. – Что вы молчите, когда здесь Бог знает кто позволяет себе вмешиваться и делать сцены на пороге комнаты умирающего. Интриганка! – прошептала она злобно и дернула портфель изо всей силы.
Но Анна Михайловна сделала несколько шагов, чтобы не отстать от портфеля, и перехватила руку.
– Oh! – сказал князь Василий укоризненно и удивленно. Он встал. – C'est ridicule. Voyons, [Это смешно. Ну, же,] пустите. Я вам говорю.
Княжна пустила.
– И вы!
Анна Михайловна не послушалась его.
– Пустите, я вам говорю. Я беру всё на себя. Я пойду и спрошу его. Я… довольно вам этого.
– Mais, mon prince, [Но, князь,] – говорила Анна Михайловна, – после такого великого таинства дайте ему минуту покоя. Вот, Пьер, скажите ваше мнение, – обратилась она к молодому человеку, который, вплоть подойдя к ним, удивленно смотрел на озлобленное, потерявшее всё приличие лицо княжны и на перепрыгивающие щеки князя Василья.
– Помните, что вы будете отвечать за все последствия, – строго сказал князь Василий, – вы не знаете, что вы делаете.
– Мерзкая женщина! – вскрикнула княжна, неожиданно бросаясь на Анну Михайловну и вырывая портфель.
Князь Василий опустил голову и развел руками.
В эту минуту дверь, та страшная дверь, на которую так долго смотрел Пьер и которая так тихо отворялась, быстро, с шумом откинулась, стукнув об стену, и средняя княжна выбежала оттуда и всплеснула руками.
– Что вы делаете! – отчаянно проговорила она. – II s'en va et vous me laissez seule. [Он умирает, а вы меня оставляете одну.]
Старшая княжна выронила портфель. Анна Михайловна быстро нагнулась и, подхватив спорную вещь, побежала в спальню. Старшая княжна и князь Василий, опомнившись, пошли за ней. Через несколько минут первая вышла оттуда старшая княжна с бледным и сухим лицом и прикушенною нижнею губой. При виде Пьера лицо ее выразило неудержимую злобу.
– Да, радуйтесь теперь, – сказала она, – вы этого ждали.
И, зарыдав, она закрыла лицо платком и выбежала из комнаты.
За княжной вышел князь Василий. Он, шатаясь, дошел до дивана, на котором сидел Пьер, и упал на него, закрыв глаза рукой. Пьер заметил, что он был бледен и что нижняя челюсть его прыгала и тряслась, как в лихорадочной дрожи.
– Ах, мой друг! – сказал он, взяв Пьера за локоть; и в голосе его была искренность и слабость, которых Пьер никогда прежде не замечал в нем. – Сколько мы грешим, сколько мы обманываем, и всё для чего? Мне шестой десяток, мой друг… Ведь мне… Всё кончится смертью, всё. Смерть ужасна. – Он заплакал.
Анна Михайловна вышла последняя. Она подошла к Пьеру тихими, медленными шагами.
– Пьер!… – сказала она.
Пьер вопросительно смотрел на нее. Она поцеловала в лоб молодого человека, увлажая его слезами. Она помолчала.
– II n'est plus… [Его не стало…]
Пьер смотрел на нее через очки.
– Allons, je vous reconduirai. Tachez de pleurer. Rien ne soulage, comme les larmes. [Пойдемте, я вас провожу. Старайтесь плакать: ничто так не облегчает, как слезы.]
Она провела его в темную гостиную и Пьер рад был, что никто там не видел его лица. Анна Михайловна ушла от него, и когда она вернулась, он, подложив под голову руку, спал крепким сном.
На другое утро Анна Михайловна говорила Пьеру:
– Oui, mon cher, c'est une grande perte pour nous tous. Je ne parle pas de vous. Mais Dieu vous soutndra, vous etes jeune et vous voila a la tete d'une immense fortune, je l'espere. Le testament n'a pas ete encore ouvert. Je vous connais assez pour savoir que cela ne vous tourienera pas la tete, mais cela vous impose des devoirs, et il faut etre homme. [Да, мой друг, это великая потеря для всех нас, не говоря о вас. Но Бог вас поддержит, вы молоды, и вот вы теперь, надеюсь, обладатель огромного богатства. Завещание еще не вскрыто. Я довольно вас знаю и уверена, что это не вскружит вам голову; но это налагает на вас обязанности; и надо быть мужчиной.]
Пьер молчал.
– Peut etre plus tard je vous dirai, mon cher, que si je n'avais pas ete la, Dieu sait ce qui serait arrive. Vous savez, mon oncle avant hier encore me promettait de ne pas oublier Boris. Mais il n'a pas eu le temps. J'espere, mon cher ami, que vous remplirez le desir de votre pere. [После я, может быть, расскажу вам, что если б я не была там, то Бог знает, что бы случилось. Вы знаете, что дядюшка третьего дня обещал мне не забыть Бориса, но не успел. Надеюсь, мой друг, вы исполните желание отца.]
Пьер, ничего не понимая и молча, застенчиво краснея, смотрел на княгиню Анну Михайловну. Переговорив с Пьером, Анна Михайловна уехала к Ростовым и легла спать. Проснувшись утром, она рассказывала Ростовым и всем знакомым подробности смерти графа Безухого. Она говорила, что граф умер так, как и она желала бы умереть, что конец его был не только трогателен, но и назидателен; последнее же свидание отца с сыном было до того трогательно, что она не могла вспомнить его без слез, и что она не знает, – кто лучше вел себя в эти страшные минуты: отец ли, который так всё и всех вспомнил в последние минуты и такие трогательные слова сказал сыну, или Пьер, на которого жалко было смотреть, как он был убит и как, несмотря на это, старался скрыть свою печаль, чтобы не огорчить умирающего отца. «C'est penible, mais cela fait du bien; ca eleve l'ame de voir des hommes, comme le vieux comte et son digne fils», [Это тяжело, но это спасительно; душа возвышается, когда видишь таких людей, как старый граф и его достойный сын,] говорила она. О поступках княжны и князя Василья она, не одобряя их, тоже рассказывала, но под большим секретом и шопотом.


В Лысых Горах, имении князя Николая Андреевича Болконского, ожидали с каждым днем приезда молодого князя Андрея с княгиней; но ожидание не нарушало стройного порядка, по которому шла жизнь в доме старого князя. Генерал аншеф князь Николай Андреевич, по прозванию в обществе le roi de Prusse, [король прусский,] с того времени, как при Павле был сослан в деревню, жил безвыездно в своих Лысых Горах с дочерью, княжною Марьей, и при ней компаньонкой, m lle Bourienne. [мадмуазель Бурьен.] И в новое царствование, хотя ему и был разрешен въезд в столицы, он также продолжал безвыездно жить в деревне, говоря, что ежели кому его нужно, то тот и от Москвы полтораста верст доедет до Лысых Гор, а что ему никого и ничего не нужно. Он говорил, что есть только два источника людских пороков: праздность и суеверие, и что есть только две добродетели: деятельность и ум. Он сам занимался воспитанием своей дочери и, чтобы развивать в ней обе главные добродетели, до двадцати лет давал ей уроки алгебры и геометрии и распределял всю ее жизнь в беспрерывных занятиях. Сам он постоянно был занят то писанием своих мемуаров, то выкладками из высшей математики, то точением табакерок на станке, то работой в саду и наблюдением над постройками, которые не прекращались в его имении. Так как главное условие для деятельности есть порядок, то и порядок в его образе жизни был доведен до последней степени точности. Его выходы к столу совершались при одних и тех же неизменных условиях, и не только в один и тот же час, но и минуту. С людьми, окружавшими его, от дочери до слуг, князь был резок и неизменно требователен, и потому, не быв жестоким, он возбуждал к себе страх и почтительность, каких не легко мог бы добиться самый жестокий человек. Несмотря на то, что он был в отставке и не имел теперь никакого значения в государственных делах, каждый начальник той губернии, где было имение князя, считал своим долгом являться к нему и точно так же, как архитектор, садовник или княжна Марья, дожидался назначенного часа выхода князя в высокой официантской. И каждый в этой официантской испытывал то же чувство почтительности и даже страха, в то время как отворялась громадно высокая дверь кабинета и показывалась в напудренном парике невысокая фигурка старика, с маленькими сухими ручками и серыми висячими бровями, иногда, как он насупливался, застилавшими блеск умных и точно молодых блестящих глаз.