
- •Теория maxScript Оглавление
- •Часть 1 2
- •Часть 1
- •Окно maxScript Listener
- •Окно maxScript Editor
- •Синтаксис
- •Управляющие конструкции
- •Пропуск проходов и принудительный выход из циклов
- •Часть 2 Функции
- •Объекты и классы в объектно-ориентированном программировании
- •Определения
- •Операции со строками
- •Операции с массивами
- •Команды 3ds max в maxScript
- •Часть 3 Создание свитков
- •События
- •Элементы интерфейса
- •Радиокнопки
- •Спиннер
- •Часть 4 Сплайны
- •Класс SplineShape
- •Методы, работающие с целым объектом Shape
- •Методы, работающие со сплайнами объекта Shape
- •Методы, работающие с сегментами сплайнов объекта Shape
- •Методы, работающие с вершинами сплайнов объекта Shape
- •Часть 5 Простейшие диалоговые окна
- •If queryBox “Хотите продолжить?” beep:false then ... Некоторые из методов работы с объектами
- •Характерные точки объектов
- •Системы координат
- •Координатные сетки
- •Определение угла между двумя векторами
- •Представление ориентации при помощи кватернионов (quaternions)
- •Создание вспомогательных объектов-пустышек Dummy
- •Изменение общих параметров анимации
- •Анимация вершин сплайнов
- •Примеры контроллеров анимации path constraint и link constraint
- •Методы print и format
Пропуск проходов и принудительный выход из циклов
Оператор continue осуществляет мгновенный переход в конец цикла и начинает следующий проход.
Примеры:
for i=1 to 8 do (if i == 5 do continue; print i) -- печатает 1..4, 6..8
for i=1 to 8 collect (if i == 5 do continue; i) -- возвращает #(1, 2, 3, 4, 6, 7, 8)
while not eof do -- читает данные, пока не дойдет до конца файла
(
local line=readline f -- считывает одну строку
if line[1] == “-” do continue -- если комментарий, переход на следующую строку
line1=parser1 line -- вызов функции parser1
processobjs line1 -- вызов функции processobjs
)
Оператор exit немедленно прекращает выполнение любого цикла, даже если тестовое выражение по-прежнему истинно. Он полезен при поиске ошибок в телах циклов. exit [with <expr>]
Пример:
while x < y do
(
local delta = x – y
if delta <= 0 then exit -- условие выхода
$foo.pos.x = compute_x (foo / delta)
x += 0.1
)
Необязательный параметр with позволяет задать выражение, которому будет равно общее значение цикла, если он завершится преждевременно. Если его не задать, цикл, из которого вышли оператором exit, возвратит значение undefined.
Выход из цикла for ... do с использованием параметра with <expr> возвращает значение OK.
Выход из цикла for ... collect с использованием параметра with <expr> возвращает массив величин, собранный на момент выхода.
Часть 2 Функции
[mapped] (function | fn) <name> { <parameter> } = <expr> , где <name> – имя функции, <expr> – тело функции, <parameter> – ее параметры (их может не быть вообще или быть несколько), которые записываются так: <parameter name>, либо так: <parameter name>: [<operand>] – необязательное значение по умолчанию, если не его задать, возвращается значениеunsupplied. Префих mapped означает, что функция будет автоматически повторно вызываться на каждом элементе коллекции, если колЧасть задана в качестве первого аргумента функции.
Примеры:
function add a b = a + b
fn factorial n = if n<=0 then 1 else n * factorial(n-1) -- рекурсивная функция
mapped function rand_color x =
x.wireColor = random (color 0 0 0) color (255 255 255)
fn starfield count extent: [200, 200, 200] pos: [0, 0, 0] =
(
local f = pos – extent / 2
t = pos + extent / 2
for i = 1 to count do
sphere name:”star” \
radius: (random 0.1 2.0) \
position: (random f t) \
segs:4 smooth:false
)
В качестве своего значения функция возвращает значение <expr>. Если тело – блок, то значение последнего выражения в блоке. Если нужно найти функцию используется метод showSource <fn>, который отображает окно Editor с файлом, содержащим данную функцию и пролистанным до места ее определения – метод полезен, когда много функций находятся в разных файлах.
Чтобы принудительно завершить выполнение функции используется оператор return <expr>, где <expr> – выражение, которому будет равно значение принудительно завершенной функции. Если return используется в функции с префиксом mapped и колЧасть задана в качестве первого аргумента, возвращаемое значение будет OK, а не <expr>.