
- •С чего начать
- •Переменные и присвоение им значений
- •Области видимости
- •Настойчивые переменные
- •Изменяемый тип переменных
- •Присвоение значения по ссылке
- •Выделение памяти и уборка мусора
- •Имена переменных
- •Литералы
- •Числовые литералы
- •Строковые литералы
- •Литералы времени
- •Литералы имен объектов
- •Литералы точек в двумерном и трехмерном пространстве
- •Литералы массивов
- •Выражения
- •Простые выражения
- •Математические выражения
- •Порядок выполнения операций в математических выражениях
- •Полиморфизм
- •Выражения сравнения
- •Логические операции
- •Сокращенное выполнение логических выражений
- •Позиционированные и именованные параметры
- •Приоритет вызова функций
- •Написание вызова функции в несколько строк
- •Другой способ вызова функций
- •Контекстные выражения
- •Комментарии
- •Обращение из одного скрипта к другим
- •Управление порядком выполнения операторов
- •Пропуск выполнения цикла
- •Собственная обработка ошибок
- •Оформление функций
- •Переменная, содержащая функцию
- •Параметры функций
- •Принудительное завершение функции
- •Определение структур
- •Создание функций, локальных внутри структуры
- •Базовые классы maxScript Класс Value
- •Операторы
- •Литералы
- •Операторы
- •Свойства
- •Операторы
- •Точка в трехмерном пространстве
- •Литералы
- •Конструкторы
- •Свойства
- •Операторы
- •Литерал
- •Конструкторы
- •Свойства
- •Произвольный поворот
- •Литералы
- •Конструкторы
- •Операторы
- •Свойства
- •Углы Эйлера
- •Операторы
- •Свойства
- •Прямоугольник
- •Литералы
- •Конструкторы
- •Свойства
- •Операторы
- •Функция
- •Массив_чисел
- •Вспомогательные методы Функция
- •Функция
- •Можно открыть зашифрованный файл, используя функцию
- •Свойства
- •Свойства
- •Особенности работы с ключами анимации
- •Массив параметров
- •Конструкторы
- •Свойства
- •Операторы
- •Множества
- •Шаблонные группы
- •Свойства
- •Операторы
- •Функции для работы с группами
- •Наборы объектов
- •Конструкторы
- •Свойства
- •Операторы
- •Функции, работающие с наборами
- •Дополнительные сведения
- •Конструкторы
- •Свойства
- •Операторы
- •Прочие функции
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Литералы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Прочие функции
- •Скрипт-утилиты
- •Панель скрипт-утилиты
- •Составные части тела свитка
- •Создание перемещаемых окон
- •Видимость локальных переменных, структур, функций и компонент интерфейса из кода свитка
- •Доступ к локальным переменным и прочим элементам утилит и свитков из внешнего кода
- •Компоненты пользовательского интерфейса
- •Название_компонента Имя_переменной Символьная_строка
- •Общие свойства компонентов пользовательского интерфейса
- •Общие параметры компонентов пользовательского интерфейса
- •Типы компонентов пользовательского интерфейса Для примера рассмотрим утилиту, использующую все возможные компоненты пользовательского интерфейса
- •Битовая карта
- •Параметры
- •Свойства
- •События
- •Параметры
- •Параметры
- •Свойства
- •События
- •Параметры
- •Свойства
- •События
- •Выпадающий список
- •Параметры
- •Свойства
- •События
- •Свойства
- •События
- •Кнопка выбора текстурной карты
- •Параметры
- •Свойства
- •События
- •Кнопка выбора материала
- •Параметры
- •Свойства
- •События
- •Список с возможностью множественного выбора
- •Параметры
- •Свойства
- •События
- •Кнопка выбора объекта
- •Параметры
- •Свойства
- •События
- •Задатчик
- •Параметры
- •Свойства
- •События
- •Параметры
- •Свойства
- •События
- •Кнопки с картинками
- •Скрипт контекстного меню
- •Тело контекстного меню
- •Пункт меню
- •Разделитель
- •Подменю
- •Макро скрипты
- •Создание файлов с иконками
- •Средства работы с мышью
- •Остановить работу средства можно вызовом функции
- •Правила оформления средств работы с мышью
- •События
- •Скрипт плугины
- •Правила построения скрипт-плугина
- •Внесение изменений в плугин
- •Урок 1. Твердые тела
- •Создание набора твердых тел
- •Добавление тел к набору
Литералы
Литералы, или иными словами константы, записанные в тексте программы, могут использоваться, например, для присвоения начальных значений переменным. Поскольку переменные могут содержать данные разных типов, то разных типов могут быть и литералы.
Числовые литералы
MAXScript поддерживает два типа числовых данных – с плавающей точкой, называемые еще вещественными, и целые 32-х битовые. Целые могут быть записаны в десятичной или в шестнадцатеричной форме. Например
0.128
2.56
-0.03
0.2e-8
вещественные числа, а
123
-5
0x12E
целые. Последнее число записано в шестнадцатеричной системе счисления. В этом случае ему предшествует два символа – ноль и малое икс.
Строковые литералы
Строковые литералы используются для записи символьных строк и окружаются двойными кавычками. Например:
“I can’t speak English”
строковый литерал
Для записи в строковом литерале некоторых управляющих символов или тех же двойных кавычек применяется знак обратного слеша - \
\” – двойные кавычки
\n – переход на новую строку
\r – возврат каретки
\t – знак табуляции
\? – вопросительный знак
\* - звездочка
\\ - обратный слеш
\% - знак процента
Чтобы ввести в строковый литерал символ, которого нет на клавиатуре, можно использовать последнее стандартное сочетание с обратным слешем.
\x<две шестнадцатеричные цифры>
Например
text = “Copyright \xA9 2002, Petrov & Co”
вставляет в текст символ ©, шестнадцатеричный код которого – A9. Поскольку в именах файлов часто используются знаки обратного слеша, в MAXScript принято записывать их примерно так
path = “c:\\3dsmax4\\meshes”
хотя допускается заменять два обратных слеша на один прямой и записать тот же литерал так
path = “c:/3dsmax4/meshes”
Литералы времени
Работая с анимацией, трудно обойтись без времени. В MAXScript время измеряется в минутах, секундах, фреймах и тиках (tick). В одной секунде 4800 тиков или тридцать фреймов. Возможны два формата записи времени. Первый может выглядеть примерно так
2.8s – две и восемь десятых секунды
3m5s2f4t – три минуты, пять секунд, два фрейма, четыре тика
73f – семьдесят три фрейма
Второй пишется так – сначала минуты, через двоеточие секунды, через точку фреймы. Тики в такой записи не указываются. Например
2:6.28 – то же самое, что 2m6s28f
0:0.73 – то же самое, что 73f
Литералы имен объектов
Поскольку MAXScript предназначен для работы с объектами, составляющими сцену, логично иметь возможность работы с именами этих объектов и, соответственно, иметь литералы, обозначающие имена объектов. Для этого записывается имя объекта, то самое, которое появляется в списке при выборе объекта в 3ds max, а к нему слева приписывается знак $. Например
$box01
Поскольку объекты часто объединяются в иерархии, для их обозначения применяются такие литералы
$man/torso/hand
то есть данным литералом поименован объект hand, который является дочерним по отношению к объекту torso, который в свою очередь происходит от объекта man.
С помощью литералов имен объектов можно выбрать и целую группу объектов с похожими именами. Для этого используются символы * и ?. Например литерал
$box*
обозначает все объекты, имена которых начинаются с box. При этом звездочку можно ставить не только в конце, но и в любом месте литерала и даже в нескольких местах. Например, такая строка
$*box*
именует все объекты, в имени которых сочетание букв box находится в любом месте имени. Очень удобно использовать символ * при работе с иерархиями объектов. Например, литерал
$man/*
выберет всех прямых потомков объекта man.
Если Вам надо выбрать не только прямых, но всех прочих потомков какого-либо объекта на всех уровнях иерархии, то для этого используют такую запись
$man/…/*
или, что то же самое
$man…*
При этом если надо найти всех потомков, чьи имена начинаются, например, на букву h, то можно написать
$man…h*
Разница между символами * и ? следующая. Если символ * заменяет любую группу символов, то ? любой одиночный символ. Представим себе сцену, в которой содержатся три объекта: box1, box2 и box16. В этом случае скрипт
hide box*
скроет все объекты сцены, а
hide box?
только box1 и box2.
кроме того, существует и один специальный литерал - $. Он означает все выбранные объекты сцены. Например
hide $
скроет все выбранные в данный момент объекты. Однако эту возможность следует использовать с осторожностью, так как в случае, если в сцене нет выбранных объектов, такой скрипт выдаст ошибку. Для работы с выделенными объектами лучше использовать переменную selection. Например
hide selection
выполнит ту же самую работу аккуратнее.
В именах объектов могут использоваться пробелы или специальные символы. В таком случае для написания подобных имен, как и для имен переменных, используются одинарные кавычки. Например
$’Snow man’
При этом в число символов, защищаемых кавычками, не входят * и ?. Поэтому если Вы хотите именовать объекты, в имени которых содержатся эти символы, используйте обратный слеш. Например, имя объекта konjak*** запишется так
$’konjak\*\*\*’
Символ пробела, защищаемый кавычками, может быть заменен символом подчеркивания “_”. Например, приведенные ниже литералы обозначают имя одного и того же объекта
$’Snow Man’
$Snow_Man