
- •С чего начать
- •Переменные и присвоение им значений
- •Области видимости
- •Настойчивые переменные
- •Изменяемый тип переменных
- •Присвоение значения по ссылке
- •Выделение памяти и уборка мусора
- •Имена переменных
- •Литералы
- •Числовые литералы
- •Строковые литералы
- •Литералы времени
- •Литералы имен объектов
- •Литералы точек в двумерном и трехмерном пространстве
- •Литералы массивов
- •Выражения
- •Простые выражения
- •Математические выражения
- •Порядок выполнения операций в математических выражениях
- •Полиморфизм
- •Выражения сравнения
- •Логические операции
- •Сокращенное выполнение логических выражений
- •Позиционированные и именованные параметры
- •Приоритет вызова функций
- •Написание вызова функции в несколько строк
- •Другой способ вызова функций
- •Контекстные выражения
- •Комментарии
- •Обращение из одного скрипта к другим
- •Управление порядком выполнения операторов
- •Пропуск выполнения цикла
- •Собственная обработка ошибок
- •Оформление функций
- •Переменная, содержащая функцию
- •Параметры функций
- •Принудительное завершение функции
- •Определение структур
- •Создание функций, локальных внутри структуры
- •Базовые классы maxScript Класс Value
- •Операторы
- •Литералы
- •Операторы
- •Свойства
- •Операторы
- •Точка в трехмерном пространстве
- •Литералы
- •Конструкторы
- •Свойства
- •Операторы
- •Литерал
- •Конструкторы
- •Свойства
- •Произвольный поворот
- •Литералы
- •Конструкторы
- •Операторы
- •Свойства
- •Углы Эйлера
- •Операторы
- •Свойства
- •Прямоугольник
- •Литералы
- •Конструкторы
- •Свойства
- •Операторы
- •Функция
- •Массив_чисел
- •Вспомогательные методы Функция
- •Функция
- •Можно открыть зашифрованный файл, используя функцию
- •Свойства
- •Свойства
- •Особенности работы с ключами анимации
- •Массив параметров
- •Конструкторы
- •Свойства
- •Операторы
- •Множества
- •Шаблонные группы
- •Свойства
- •Операторы
- •Функции для работы с группами
- •Наборы объектов
- •Конструкторы
- •Свойства
- •Операторы
- •Функции, работающие с наборами
- •Дополнительные сведения
- •Конструкторы
- •Свойства
- •Операторы
- •Прочие функции
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Литералы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Прочие функции
- •Скрипт-утилиты
- •Панель скрипт-утилиты
- •Составные части тела свитка
- •Создание перемещаемых окон
- •Видимость локальных переменных, структур, функций и компонент интерфейса из кода свитка
- •Доступ к локальным переменным и прочим элементам утилит и свитков из внешнего кода
- •Компоненты пользовательского интерфейса
- •Название_компонента Имя_переменной Символьная_строка
- •Общие свойства компонентов пользовательского интерфейса
- •Общие параметры компонентов пользовательского интерфейса
- •Типы компонентов пользовательского интерфейса Для примера рассмотрим утилиту, использующую все возможные компоненты пользовательского интерфейса
- •Битовая карта
- •Параметры
- •Свойства
- •События
- •Параметры
- •Параметры
- •Свойства
- •События
- •Параметры
- •Свойства
- •События
- •Выпадающий список
- •Параметры
- •Свойства
- •События
- •Свойства
- •События
- •Кнопка выбора текстурной карты
- •Параметры
- •Свойства
- •События
- •Кнопка выбора материала
- •Параметры
- •Свойства
- •События
- •Список с возможностью множественного выбора
- •Параметры
- •Свойства
- •События
- •Кнопка выбора объекта
- •Параметры
- •Свойства
- •События
- •Задатчик
- •Параметры
- •Свойства
- •События
- •Параметры
- •Свойства
- •События
- •Кнопки с картинками
- •Скрипт контекстного меню
- •Тело контекстного меню
- •Пункт меню
- •Разделитель
- •Подменю
- •Макро скрипты
- •Создание файлов с иконками
- •Средства работы с мышью
- •Остановить работу средства можно вызовом функции
- •Правила оформления средств работы с мышью
- •События
- •Скрипт плугины
- •Правила построения скрипт-плугина
- •Внесение изменений в плугин
- •Урок 1. Твердые тела
- •Создание набора твердых тел
- •Добавление тел к набору
Операторы
Для матриц определены операции сложения, вычитания и умножения.
Матрица_3х4_1 + Матрица_3х4_2
Матрица_3х4_1 - Матрица_3х4_2
Матрица_3х4_1 * Матрица_3х4_2
Умножение матриц, разумеется, не коммутативно, то есть a*b не равно b*a. Если нам надо провести над объектом сначала преобразование, определяемое матрицей M1, а затем другое преобразование, определяемое матрицей M2, то проще вычислить матрицу M1*M2, и применить к объекту преобразование, заданное результирующей матрицей. При этом порядок умножения должен быть именно таков – матрица первого преобразования слева.
Хотя в руководстве этого не сказано, но для матриц, как и для всякого класса, производного от Value, определены операции сравнения – равенство и неравенство.
Матрица_3х4_1 = = Матрица_3х4_2
Матрица_3х4_1 != Матрица_3х4_2
Свойства
Можно получить строки матрицы
Матрица_3х4.row1
Матрица_3х4.row2
Матрица_3х4.row3
Матрица_3х4.row4
Поскольку четвертая строка является частью, отвечающей за смещение объекта, то последнее свойство может записываться и так
Матрица_3х4.translation
Следующие свойства матрицы могут только читаться
Матрица_3х4.rotationpart
возвращает кватернион, определяющий тот же поворот, что и матрица.
Матрица_3х4.translationpart
возвращает точку в трехмерном пространстве, которая определяет тот же сдвиг, что и матрица.
Матрица_3х4.scalerotationpart
возвращает кватернион, определяющий поворот и масштабирование объекта.
Матрица_3х4.scalepart
возвращает точку в трехмерном пространстве, определяющую масштабирование объекта.
Матрица_3х4.determinantsign
возвращает знак определителя матрицы.
Методы
Функция копирования
copy Матрица_3х4
создает копию указанной матрицы. Чтобы проверить, является ли матрица единичной, можно использовать функцию
isIdentity Матрица_3х4
Она возвращает true, только если матрица единична. Функция
inverse Матрица_3х4
возвращает матрицу, обратную заданной. При этом заданная матрица не изменяется.
Иногда возникает необходимость перевести преобразования, заданные матрицей в другую систему координат. В этом случае используется функция
xformMat Матрица_3х4_1 Матрица_3х4_2
Первая матрица задает преобразования, вторая – систему координат, в которую они будут пересчитываться. Результатом будет матрица преобразований в новой системе координат.
Все описанные далее методы для работы с матрицами 4х3 являются картированными, то есть могут работать как с одиночной матрицей, так и с массивами матриц. Функция
identity Матрица_3х4
делает заданную матрицу единичной, а
zero Матрица_3х4
нулевой. Сделать все оси системы координат, определяемой матрицей, взаимно перпендикулярными, можно с помощью функции
orthogonalize Матрица_3х4
Эта функция соответствующим образом изменяет заданную матрицу. Чтобы добавить к матрице преобразование перемещения, применяется функция
translate Матрица_3х4 Точка_в_3D_пространстве
Для добавления к исходной матрице преобразования поворота можно использовать функции
rotateX Матрица_3х4 Число
rotateY Матрица_3х4 Число
rotateZ Матрица_3х4 Число
Они добавляют к заданной матрице повороты вокруг соответствующей оси на угол, заданный вторым параметром. Величина угла задается в градусах. Поворот, заданный кватернионом добавляется к матрице с помощью функции
rotate Матрица_3х4 Кватернион
Преобразование масштабирования добавляется к матрице с помощью функции
scale Матрица_3х4 Точка_в_3D_пространстве Логическое_значение
Точка в трехмерном пространстве задает масштабирование по соответствующим осям. Третий параметр функции scale необязателен и введен после обнаружения ошибки в предыдущих версиях 3ds max. Дело в том, что функция scale применяла преобразование масштабирования только к первым трем строкам матрицы. Для сохранения совместимости с ранее разработанными скриптами был введен третий параметр. Если он не указан, или равен false, то масштабирование к четвертой строке матрицы, как и ранее, не применяется. При значении третьего параметра true, четвертая строка матрицы масштабируется.
Шесть описанных выше функций добавляют преобразование к преобразованиям, заданным матрицей. Рассмотрим пример
m = rotateXMatrix 45
translate m [ 1 , 1 , 1 ]
Первая строка создает матрицу поворота, вторая добавляет к ней сдвиг. В результате работы данного скрипта, матрица m будет содержать следующие преобразования. Сначала поворот относительно оси X, а затем сдвиг по всем осям на единицу. Ну а если перед Вами стоит обратная задача – добавить к некому преобразованию, преобразования, содержащиеся в матрице? В этом случае можно применять следующие функции, аналогичные приведенным.
preTranslate Матрица_3х4 Точка_в 3D_пространстве
preRotateX Матрица_3х4 Число
preRotateY Матрица_3х4 Число
preRotateZ Матрица_3х4 Число
preRotate Матрица_3х4 Кватернион
preScale Матрица_3х4 Точка_в_3D_пространстве Логическое_значение
Все они действуют точно так же, как и описанные ранее, за следующим исключением. Если переписать предыдущий пример так
m = rotateXMatrix 45
preTranslate m [ 1 , 1 , 1 ]
то в результате получится матрица m, которая вначале сдвигает объект на единицу по всем осям, а затем поворачивает его относительно оси X на 45 градусов.
Матрица произвольных размеров
Данный тип в MAXScript реализует матрицу с заданными программистом размерами
Литералы
Литералов для задания матриц произвольного размера не предусмотрено
Конструкторы
Матрица задается следующим образом
BigMatrix Число Число
Первый параметр указывает количество строк, второй – столбцов.
Свойства
Для матриц определены два свойства
Матрица.rows
возвращает количество строк в матрице и
Матрица.columns
количество столбцов. Оба свойства доступны только для чтения.
Операторы
Для матриц, кроме двух операций сравнения, равенства и неравенства
Матрица_1 = = Матрица_2
Матрица_1 ! = Матрица_2
определена так же операция сложения
Матрица_1 + Матрица_2
Матрицы складываются поэлементно. Попытка сложить матрицы с разным количеством строк или столбцов приводит к ошибке.
Операция индексирования для матрицы определена следующим образом.
Матрица [ Число ]
возвращает объект типа BigMatrixRowArray, который представляет собой не что иное, как одномерный массив и является строкой матрицы. Номер строки определяется числом, стоящим в квадратных скобках. Естественно, к любому элементу полученного массива доступ осуществляется обычным способом.
Объект_типа_BigMatrixArray [ Число ]
Поэтому элемент матрицы можно прочитать или записать так
Матрица [ Число_1 ] [ Число_2 ]
Первое число указывает строку матрицы, второе – столбец.
Доступ к столбцу матрицы не определен.
Методы
Как это ни странно, но метод копирования для матриц произвольного размера не определен.
Функция
invert Матрица
вычисляет обратную матрицу, то есть такую, которая при умножении на исходную дает единичную. Следует только отметить, что обращение производится “на месте”, то есть если записать такой скрипт
m1 = invert m
где m – матрица произвольного размера, то не следует думать, что Вы получите две матрицы, прямую и обратную. На самом деле и матрица m и матрица m1 будут иметь одно и то же значение. Строго говоря, реально у Вас получится одна матрица с разными именами m и m1, как это и описано в главе “Присвоение значения по ссылке”. Поэтому при работе с матрицами операцией присвоения надо пользоваться с осторожностью. Еще одна особенность обращения матриц состоит в том, что оно определено только для “квадратных” матриц, у которых число строк равно числу столбцов.
Транспонирование матрицы осуществляется с помощью функции
transpose Матрица
Результатом является матрица, у которой элемент в строке i и столбце j равен элементу в строке j и столбце i исходной матрицы. Транспонирование так же осуществляется “на месте”.
Функция
clear Матрица
освобождает память, занимаемую указанной матрицей, и устанавливает ее размерность ноль на ноль.
Если надо увеличить или уменьшить размерность матрицы, то для этого используется функция
setSize Матрица Число_1 Число_2
Первое число задает новое количество строк, второе – столбцов. Элементы старой матрицы при этом не сохраняются, указанная матрица, получив новую размерность, заполняется “мусором”.
Проще всего заполнить матрицу с помощью функции
identity Матрица
при этом указанная матрица заполнится нулями, а диагональные элементы получат значение 1.0. Последняя функция картирована, то есть может работать как с одиночной матрицей, так и с массивом, составленным из матриц.