- •Базовые классы maxScript Класс Value
- •Операторы
- •Литералы
- •Операторы
- •Свойства
- •Операторы
- •Свойства
- •Операторы
- •Точка в трехмерном пространстве
- •Литералы
- •Конструкторы
- •Литерал
- •Конструкторы
- •Свойства
- •Произвольный поворот
- •Литералы
- •Конструкторы
- •Операторы
- •Свойства
- •Углы Эйлера
- •Операторы
- •Свойства
- •Прямоугольник
- •Литералы
- •Конструкторы
- •Свойства
- •Операторы
Литералы
Числовые константы записываются в тексте программы следующим образом. Целое число чаще всего записывается в обычном, десятичном представлении. Например
125
-80
Шестнадцатеричная форма записи целого числа должна начинаться с символов 0x (ноль и икс)
0x0FF
0x2ACD
Вещественное число записывается так же достаточно стандартно
54.321
-0.0077
Допускается и экспоненциальная форма записи
4.2e-6
Если целая часть числа равна нулю, ее можно не записывать
-.123
.56
Операторы
К числам применяются стандартные математические операции
Число + Число
Число - Число
Число / Число
Число * Число
Если оба числа целые, то результат так же будет целым. Если хотя бы один из операндов – вещественное число, то результатом будет вещественное число.
Возведение в степень записывается так
Число ^ Число
Если первый операнд – целое число, то результат будет целым, независимо от показателя степени.
Унарный минус обращает знак числа
- Число
Для чисел определены все возможные операции сравнения
Число = = Число
Число ! = Число
Число > Число
Число < Число
Число >= Число
Число <= Число
С помощью операции преобразования типа можно перевести число из целого в вещественное. При преобразовании вещественного в целое, дробная часть отбрасывается, а не округляется. Оба типа числа можно перевести во время. В этом случае число означает количество фреймов. Так же числа можно перевести в символьную строку. Вот примеры преобразования типов
23 as float
125.89 as integer
64 as time
17.3e-5 as string
Методы
Набор методов для работы с числами весьма богат и включает в себя, главным образом стандартные математические функции
Копирование числа
copy Число
Создает копию указанного числа. Самостоятельно практически не применяется. Неявно используется при копировании массивов.
Абсолютное значение числа
abs Число
Остаток от деления
mod Число_1 Число_2
возвращает остаток от деления первого числа на второе. Результат – всегда вещественное число.
Округление по избытку
ceil Число
возвращает вещественное число с нулевой дробной частью, большее или равное указанному.
Округление по недостатку
floor Число
возвращает вещественное число с нулевой дробной частью, меньшее или равное указанному.
Стандартные тригонометрические функции
sin Число – синус
cos Число – косинус
tan Число – тангенс
asin Число – арксинус
acos Число – арккосинус
atan Число – арктангенс
atan2 Число_1 Число_2 – арктангенс первого числа, поделенного на второе
sinh Число – синус гиперболический
cosh Число – косинус гиперболический
tanh Число – тангенс гиперболический
Углы всегда задаются в градусах, возвращаемый результат – вещественное число.
Стандартные трансцендентные функции
exp Число – экспонента
log Число – натуральный логарифм
log10 Число – десятичный логарифм
pow Число_1 Число_2 – возводит первое число в степень, показатель которой – второе число. Отличается от стандартной операции возведения в степень тем, что даже если основание будет целым числом, результат окажется вещественным
sqrt Число – квадратный корень из числа
Все функции, разумеется, возвращают вещественный результат.
Генератор случайных чисел
random Число_1 Число_2
возвращает случайное число в диапазоне от первого до второго числа.
Реинициализация генератора случайных чисел
seed Число
Устанавливает генератор случайных чисел в некоторое состояние, определяемое указанным числом. Если Вам надо несколько раз повторить одну и ту же серию случайных чисел, то перед каждой генерацией вызывайте эту функцию с одним и тем же числом.
Перевод радиан в градусы
radToDeg Число
и обратно
degToRad Число
результат всегда вещественный.
Имеется богатый набор функций для работы с битами целых чисел.
bit.and Целое_число_1 Целое_число_1
выполняет побитовое логическое и над двумя целыми числами.
bit.or Целое_число_1 Целое_число_1
выполняет побитовое логическое или над двумя целыми числами.
bit.xor Целое_число_1 Целое_число_1
выполняет побитовое логическое исключающее или над двумя целыми числами.
bit.not Целое_число
обращает биты целого числа.
bit.shift Целое_число_1 Целое_число_2
Сдвигает биты первого число на количество разрядов, заданное вторым числом. Положительное второе число соответствует сдвигу влево, отрицательное – вправо. Знаковый бит при сдвиге не распространяется.
bit.set Целое_число_1 Целое_число_2 Логическое значение
Устанавливает значение бита первого числа, номер которого задан вторым числом в ноль, если логическое значение – false, и в единицу если true. Младший бит считается первым, а не нулевым.
bit.flip Целое_число_1 Целое_число_2
Обращает значение бита первого числа, номер которого задан вторым. Младший бит считается первым.
bit.get Целое_число_1 Целое_число_2
Возвращает true, если бит первого числа, номер которого задан вторым числом, имеет значение 1, и false в противном случае. Младший бит считается первым.
bit.intAsChar Целое_число
Возвращает символьную строку из одного символа, код которого задан указанным числом. Учитывается только младшие 8 бит числа (для локализованных версий 3ds max – 16 бит)
bit.charAsInt Символьная_строка
Возвращает код первого символа строки.
bit.intAsHex Целое_число
Возвращает символьную строку, представляющую указанное число в шестнадцатеричном виде.
Минимально возможное целое число – -2147483648, максимально возможное – 2147483648. При выходе за эти значения будет сгенерирована ошибка. Вещественные числа в MAXScript находятся в диапазоне от 1.18E-38 до 3.4E38. При получении меньшего результата получится ноль, при получении большего – специальное значение 1.#INF (бесконечность). Сложение, вычитание или умножение любого числа на бесконечность даст бесконечность. Деление числа на бесконечность даст ноль. Деление нуля на ноль, бесконечности на бесконечность или умножение бесконечности на ноль или на бесконечность возвращает специальное значение -1.#IND (неопределенность). Любые действия числа с неопределенностью дают неопределенность.
Символьные строки
Символьная строка в MAXScript представляют собой последовательность символов произвольной длины
Литералы
Литералы символьных строк весьма подробно описаны в главе о литералах. Напомним только, что в программе они записываются как последовательность символов в двойных кавычках.
Конструкторы
Строка может быть получена из любого значения MAXScript с помощью операции преобразования типа.
Value as string
Операторы
Наиболее употребительным при работе со строками является оператор сложения
Символьная_строка_1 + Символьная_строка_2
результатом будет символьная строка, образованная слиянием двух строк. Для строк так же определены операции сравнения
Символьная_строка_1 = = Символьная_строка_2
Символьная_строка_1 ! = Символьная_строка_2
Символьная_строка_1 > Символьная_строка_2
Символьная_строка_1 < Символьная_строка_2
Символьная_строка_1 >= Символьная_строка_2
Символьная_строка_1 <= Символьная_строка_2
Сравнение осуществляется в алфавитном порядке, то есть строка “A” считается меньше строки “B”. Большие и малые буквы РАЗЛИЧАЮТСЯ, то есть строка “A” не равна “a”.
Прочитать или записать символ, стоящий в указанной позиции строки можно с помощью операции индексирования
Символьная_строка [ Целое_число ]
например
S = “ABCDEF”
S [ 5 ]
Вторая строка приведенного скрипта вернет пятую букву строки, то есть “E”. Нумерация символов строки начинается с единицы.
Символьная строка с помощью операции преобразования типов может быть в имя, целое или вещественное число или строковый поток.
Символьная_строка as name
Символьная_строка as float
Символьная_строка as integer
Символьная_строка as stringstream
Методы
Функция копирования
copy Символьная_строка
создает новый экземпляр строки.
Для символьной строки в MAXScript существует оригинальная функция
execute Символьная_строка
Она выполняет указанную строку так, как будто это строка программы, написанной на MAXScript. Этот метод позволяет формировать текст программы во время ее выполнения. При этом следует иметь в виду, что выполнение текстовой строки с помощью метода execute происходит в глобальной области видимости. Например
y=5
( local y=7
execute "print y"
print y
)
Выполнение функции execute приведет к выводу значения глобальной переменной y, то есть 5, а следующий за ней оператор print выведет локальную y, то есть 7.
При организации интерфейса бывает нужно определить размеры строки на экране. Функция
GetTextExtent Символьная_строка
возвращает точку в двумерном пространстве. Координата X возвращаемой точки содержит ширину строки в пикселях, а Y – высоту.
Функция
filterString Символьная_строка_1 Символьная_строка_2
часто применяется для импорта файлов в 3ds max. Она разбирает первую символьную строку на элементы, разделенные символами, содержащимися во второй строке. Результат возвращается в массиве строк. Например, результатом скрипта
filterstring "x=5,y=7.0,z=128.3,u=0.5,v=2.3" ",="
Будет следующий массив символьных строк #("x", "5", "y", "7.0", "z", "128.3", "u", "0.5", "v", "2.3")
Если надо заменить часть некой строки другой строкой, то для этого применяется функция
replace Символьная_строка_1 Число_1 Число_2 Символьная_строка_2
Она заменяет символы первой строки, начиная со стоящего в позиции, заданной первым числом, на вторую строку. Количество заменяемых символов определяется вторым числом. Например, результатом выражения
replace “123456789” 2 4 “abcdefjh”
будет символьная строка “1abcdefjh6789”
Выделение подстроки осуществляется с помощью функции
substring Символьная_строка Число_1 Число_2
Первое число означает позицию, с которой начинается подстрока, а второе – количество символов подстроки. Если количество символов отрицательно, или больше числа символов в исходной строке, то подстрока выделяется до конца строки. Например, выражение
substring “abcdefjh” 3 4
вернет строку “cdef”, а
substring “abcdefjh” 3 -1
или
substring “abcdefjh” 3 100
строку “cdefjh”
Последний метод, определенный для строк
matchPattern Символьная_строка_1 pattern:Символьная_строка_2
ignoreCase:Логическое_выражение
применяется для проверки нахождения подстроки в строке. Третий параметр не обязателен, и по умолчанию равен true. Эта функция возвращает true, если подстрока, определенная вторым параметром (pattern) имеется в строке, заданной первым параметром. Во втором параметре можно использовать служебные символы * и ? которые используются так же, как в именах объектов. Например
s = "x=12.67,y=2.5,z=3.7"
matchPattern s pattern:"x=*,y=*,z=*"
Вторая строка приведенного скрипта вернет значение true. При обращении к этой функции большие и малые буквы не различаются. Чтобы они различались, необходимо указать третий параметр равным false. Например
s = “Му string”
matchPattern s pattern:“my*”
matchPattern s pattern:“my*” ignoreCase:false
вторая строка приведенного скрипта вернет true, а третья – false.
Имена
Чаще всего этот тип данных используется для передачи функции параметра, который может находиться в одном из некоторых фиксированных значений. Например, если надо предать функции одно из четырех возможных направлений – вправо, влево, вверх или вниз.
Литералы
Имя в скрипте записывается так
#Имя
Например
#Left
#Right
#Up
#Down
Конструкторы
Имя может быть получено из символьной строки с помощью оператора преобразования типа
Символьная_строка as name
Например
“MyName” as name
вернет значение #MyName.
Операторы
Для имен определены все возможные операции сравнения
Имя_1 = = Имя_2
Имя_1 ! = Имя_2
Имя_1 > Имя_2
Имя_1 < Имя_2
Имя_1 > = Имя_2
Имя_1 < = Имя_2
Равенство и неравенство проверяются естественным образом, остальное сравнение производится в алфавитном порядке, то есть #A меньше #B. При этом большие и малые буквы считаются одинаковыми.
Свойства
Имена свойств не имеют
Методы
Имена методов не имеют
Логические (Булевы) значения
Логические значения используются, главным образом, для ветвления программы. В MAXSript, как и в других языках, логическое выражение может иметь два значения – true и false.
Литералы
Логические константы записываются просто
true
false
либо, что то же самое
on
off
Конструкторы
Конструкторов для логических значений не предусмотрено
Операторы
Для логических значений могут применяться операторы сравнения – равенство
Логическое_выражение_1 = = Логическое_выражение_2
и неравенство
Логическое_выражение_1 ! = Логическое_выражение_2
однако практического применения они не имеют. Гораздо чаще применяются логические операторы
not Логическое_выражение
Если логическое выражение равно true, то возвращается false, и наоборот.
Логическое_выражение_1 or Логическое_выражение_2
Возвращает true, если хоть одно или оба выражения имеет значение true, в противном случае – false.
Логическое выражение_2 and Логическое_выражение_2
Возвращает true, только если оба выражения имеют значение true, в противном случае – false.
Свойства
Свойств логические значения не имеют
Методы
Методов логические значения не имеют
Цвета
Цвета широко применяются в MAXScript для работы с материалами или с цветом геометрических объектов.
Литералы
Для обозначения наиболее употребительных цветов в MAXScript введены специальные константы
red -- красный
green -- зеленый
blue -- синий
white -- белый
black -- черный
orange -- оранжевый
yellow -- желтый
brown -- коричневый
gray -- серый
Конструкторы
Цвет может быть создан указанием красной, зеленой и синей компоненты, и компоненты прозрачности. Последняя может не указываться, в этом случае она устанавливается равной 255.
color Число_1 Число_2 Число_3 Число_4
Первое число указывает красную составляющую, второе зеленую, третье синюю, четвертое, необязательное, прозрачность. Кроме того, с помощью оператора преобразования типа можно создать цвет из точки в трехмерном пространстве.
Точка_в_3D_пространстве as color
При этом координата X точки трактуется как красная составляющая, координата Y как зеленая, Z как синяя, прозрачность устанавливается в 255.
Следует отметить, что нормально значение компонент может находиться в диапазоне от нуля до двухсот пятидесяти пяти. Выход из этого диапазона к ошибке не приводит, но при отображении такого цвета в сцене, 3ds max сам приводит его к нужному диапазону. Алгоритм приведения в руководстве не указан, однако результаты экспериментов позволяют предположить, что значение компоненты преобразуется к целому числу со знаком, после чего в качестве значения компоненты используется его младший байт.
