
- •С чего начать
- •Переменные и присвоение им значений
- •Области видимости
- •Настойчивые переменные
- •Изменяемый тип переменных
- •Присвоение значения по ссылке
- •Выделение памяти и уборка мусора
- •Имена переменных
- •Литералы
- •Числовые литералы
- •Строковые литералы
- •Литералы времени
- •Литералы имен объектов
- •Литералы точек в двумерном и трехмерном пространстве
- •Литералы массивов
- •Выражения
- •Простые выражения
- •Математические выражения
- •Порядок выполнения операций в математических выражениях
- •Полиморфизм
- •Выражения сравнения
- •Логические операции
- •Сокращенное выполнение логических выражений
- •Позиционированные и именованные параметры
- •Приоритет вызова функций
- •Написание вызова функции в несколько строк
- •Другой способ вызова функций
- •Контекстные выражения
- •Комментарии
- •Обращение из одного скрипта к другим
- •Управление порядком выполнения операторов
- •Пропуск выполнения цикла
- •Собственная обработка ошибок
- •Оформление функций
- •Переменная, содержащая функцию
- •Параметры функций
- •Принудительное завершение функции
- •Определение структур
- •Создание функций, локальных внутри структуры
- •Базовые классы maxScript Класс Value
- •Операторы
- •Литералы
- •Операторы
- •Свойства
- •Операторы
- •Точка в трехмерном пространстве
- •Литералы
- •Конструкторы
- •Свойства
- •Операторы
- •Литерал
- •Конструкторы
- •Свойства
- •Произвольный поворот
- •Литералы
- •Конструкторы
- •Операторы
- •Свойства
- •Углы Эйлера
- •Операторы
- •Свойства
- •Прямоугольник
- •Литералы
- •Конструкторы
- •Свойства
- •Операторы
- •Функция
- •Массив_чисел
- •Вспомогательные методы Функция
- •Функция
- •Можно открыть зашифрованный файл, используя функцию
- •Свойства
- •Свойства
- •Особенности работы с ключами анимации
- •Массив параметров
- •Конструкторы
- •Свойства
- •Операторы
- •Множества
- •Шаблонные группы
- •Свойства
- •Операторы
- •Функции для работы с группами
- •Наборы объектов
- •Конструкторы
- •Свойства
- •Операторы
- •Функции, работающие с наборами
- •Дополнительные сведения
- •Конструкторы
- •Свойства
- •Операторы
- •Прочие функции
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Литералы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Прочие функции
- •Скрипт-утилиты
- •Панель скрипт-утилиты
- •Составные части тела свитка
- •Создание перемещаемых окон
- •Видимость локальных переменных, структур, функций и компонент интерфейса из кода свитка
- •Доступ к локальным переменным и прочим элементам утилит и свитков из внешнего кода
- •Компоненты пользовательского интерфейса
- •Название_компонента Имя_переменной Символьная_строка
- •Общие свойства компонентов пользовательского интерфейса
- •Общие параметры компонентов пользовательского интерфейса
- •Типы компонентов пользовательского интерфейса Для примера рассмотрим утилиту, использующую все возможные компоненты пользовательского интерфейса
- •Битовая карта
- •Параметры
- •Свойства
- •События
- •Параметры
- •Параметры
- •Свойства
- •События
- •Параметры
- •Свойства
- •События
- •Выпадающий список
- •Параметры
- •Свойства
- •События
- •Свойства
- •События
- •Кнопка выбора текстурной карты
- •Параметры
- •Свойства
- •События
- •Кнопка выбора материала
- •Параметры
- •Свойства
- •События
- •Список с возможностью множественного выбора
- •Параметры
- •Свойства
- •События
- •Кнопка выбора объекта
- •Параметры
- •Свойства
- •События
- •Задатчик
- •Параметры
- •Свойства
- •События
- •Параметры
- •Свойства
- •События
- •Кнопки с картинками
- •Скрипт контекстного меню
- •Тело контекстного меню
- •Пункт меню
- •Разделитель
- •Подменю
- •Макро скрипты
- •Создание файлов с иконками
- •Средства работы с мышью
- •Остановить работу средства можно вызовом функции
- •Правила оформления средств работы с мышью
- •События
- •Скрипт плугины
- •Правила построения скрипт-плугина
- •Внесение изменений в плугин
- •Урок 1. Твердые тела
- •Создание набора твердых тел
- •Добавление тел к набору
Полиморфизм
Одни и те же операции в MAXScript могут выполняться над операндами разных типов. Например, операция сложения может использоваться и с числами,
y = 2 + 1
и со строками.
y = “Visual ” + “C++”
операции определены для работы с векторами, точками трехмерного и двумерного пространства, и могут выполняться даже над операндами разных типов. Например, вполне уместно умножить число на точку в трехмерном пространстве. Подобное свойство операций называется полиморфизмом.
Выражения сравнения
Очень часто возникает необходимость сравнить результаты двух выражений. Для этого существуют специальные операции, называемые операциями сравнения. Результатом этих операций всегда является одно из логических значений – true (истина) или false (ложь). Вот список этих операций.
операнд1 = =операнд2 – равно
операнд1 ! = операнд2 – не равно
операнд1 > операнд2 – больше
операнд1 < операнд2 – меньше
операнд1 >= операнд2 – больше или равно
операнд1 <= операнд2 – меньше или равно
Операции сравнения имеют более низкий приоритет по сравнению с математическими.
Логические операции
Логические операции применяются к операндам, значения которых равны true или false. Их всего три
операнд1 or операнд2 – логическое или
операнд1 and операнд2 – логическое и
not операнд1 – логическое отрицание (унарная операция)
Логические операции имеют более низкий приоритет, нежели математические или операции сравнения и выполняются в следующем порядке.
сначала отрицание – not;
затем логическое и – and;
последним логическое или – or.
Сокращенное выполнение логических выражений
Как и многие другие языки программирования MAXScript не всегда вычисляет логические выражения полностью. Возьмем для примера выражение
( x >10 ) or ( x < 0 )
MAXScript поступит так. Вначале он вычислит значение x > 10. Предположим оно равно true. В этом случае нет необходимости вычислять второе, поскольку правила логического или таковы, что при значении одного из операндов true, результат операции будет равен true вне зависимости от значения другого. Та же картина, но наоборот, наблюдается и для логического и. Если первый операнд равен false, то значение операции будет false обязательно, поэтому второй операнд вычисляться не будет. Использовать это свойство языка можно следующим образом. Известно, что функция вычисления синуса в MAXScript при обращении к ней с неопределенным значением (undefined), выдает ошибку. Чтобы не допустить ее при вычислении некоего ограничения, можно записать такое выражение
if x != undefined and sin x > 0 then …
Если бы оба выражения вычислялись обязательно, то при неопределенном x подобный оператор выдал бы ошибку. Благодаря сокращенному вычислению, сначала будет вычислено первое выражение (x != undefined), и убедившись что оно ложно, программа пропустит группу операторов после then и будет выполняться нормально.
Обращение к функциям
Языки программирования немыслимы без механизма обращения к стандартным и разработанным программистом функциям. Не исключение и MAXScript. Правила написания собственных функций разберем позднее, а пока рассмотрим, как обратится к стандартным. Сначала указывается имя функции, а затем список параметров, которые ей передаются. Параметры перечисляются через пробел, и в общие скобки, как это делается в большинстве языков программирования, не заключаются. Например
sin x
atan2 x y
Бывают функции, которые не имеют параметров вовсе или позволяют не указывать параметры, поскольку их значения могут предполагаться по умолчанию. К таким функциям относится, например, большинство функций создания графических примитивов (подробнее об этом будет рассказано при рассмотрении правил написания функций). В этом случае нельзя обращаться к функции, просто написав ее имя, надо написать после имени открывающуюся и закрывающуюся скобку. Например, такой скрипт
sphere( )
создаст в сцене сферу, а такой
sphere
ничего не создаст, хотя и ошибки не вызовет.