- •Часть 1
- •Окно maxScript Listener
- •Окно maxScript Editor
- •Простейшие математические операторы и выражения
- •Пропуск проходов и принудительный выход из циклов
- •Часть 2 Функции
- •Объекты и классы в объектно-ориентированном программировании
- •Определения
- •Операции со строками
- •Операции с массивами
- •Команды 3ds max в maxScript
- •Часть 3 Создание свитков
- •События
- •Элементы интерфейса
- •Часть 4 Сплайны
- •Класс SplineShape
- •Часть 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>.
