
- •С чего начать
- •Переменные и присвоение им значений
- •Области видимости
- •Настойчивые переменные
- •Изменяемый тип переменных
- •Присвоение значения по ссылке
- •Выделение памяти и уборка мусора
- •Имена переменных
- •Литералы
- •Числовые литералы
- •Строковые литералы
- •Литералы времени
- •Литералы имен объектов
- •Литералы точек в двумерном и трехмерном пространстве
- •Литералы массивов
- •Выражения
- •Простые выражения
- •Математические выражения
- •Порядок выполнения операций в математических выражениях
- •Полиморфизм
- •Выражения сравнения
- •Логические операции
- •Сокращенное выполнение логических выражений
- •Позиционированные и именованные параметры
- •Приоритет вызова функций
- •Написание вызова функции в несколько строк
- •Другой способ вызова функций
- •Контекстные выражения
- •Комментарии
- •Обращение из одного скрипта к другим
- •Управление порядком выполнения операторов
- •Пропуск выполнения цикла
- •Собственная обработка ошибок
- •Оформление функций
- •Переменная, содержащая функцию
- •Параметры функций
- •Принудительное завершение функции
- •Определение структур
- •Создание функций, локальных внутри структуры
- •Базовые классы maxScript Класс Value
- •Операторы
- •Литералы
- •Операторы
- •Свойства
- •Операторы
- •Точка в трехмерном пространстве
- •Литералы
- •Конструкторы
- •Свойства
- •Операторы
- •Литерал
- •Конструкторы
- •Свойства
- •Произвольный поворот
- •Литералы
- •Конструкторы
- •Операторы
- •Свойства
- •Углы Эйлера
- •Операторы
- •Свойства
- •Прямоугольник
- •Литералы
- •Конструкторы
- •Свойства
- •Операторы
- •Функция
- •Массив_чисел
- •Вспомогательные методы Функция
- •Функция
- •Можно открыть зашифрованный файл, используя функцию
- •Свойства
- •Свойства
- •Особенности работы с ключами анимации
- •Массив параметров
- •Конструкторы
- •Свойства
- •Операторы
- •Множества
- •Шаблонные группы
- •Свойства
- •Операторы
- •Функции для работы с группами
- •Наборы объектов
- •Конструкторы
- •Свойства
- •Операторы
- •Функции, работающие с наборами
- •Дополнительные сведения
- •Конструкторы
- •Свойства
- •Операторы
- •Прочие функции
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Литералы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Конструкторы
- •Свойства
- •Операторы
- •Прочие функции
- •Скрипт-утилиты
- •Панель скрипт-утилиты
- •Составные части тела свитка
- •Создание перемещаемых окон
- •Видимость локальных переменных, структур, функций и компонент интерфейса из кода свитка
- •Доступ к локальным переменным и прочим элементам утилит и свитков из внешнего кода
- •Компоненты пользовательского интерфейса
- •Название_компонента Имя_переменной Символьная_строка
- •Общие свойства компонентов пользовательского интерфейса
- •Общие параметры компонентов пользовательского интерфейса
- •Типы компонентов пользовательского интерфейса Для примера рассмотрим утилиту, использующую все возможные компоненты пользовательского интерфейса
- •Битовая карта
- •Параметры
- •Свойства
- •События
- •Параметры
- •Параметры
- •Свойства
- •События
- •Параметры
- •Свойства
- •События
- •Выпадающий список
- •Параметры
- •Свойства
- •События
- •Свойства
- •События
- •Кнопка выбора текстурной карты
- •Параметры
- •Свойства
- •События
- •Кнопка выбора материала
- •Параметры
- •Свойства
- •События
- •Список с возможностью множественного выбора
- •Параметры
- •Свойства
- •События
- •Кнопка выбора объекта
- •Параметры
- •Свойства
- •События
- •Задатчик
- •Параметры
- •Свойства
- •События
- •Параметры
- •Свойства
- •События
- •Кнопки с картинками
- •Скрипт контекстного меню
- •Тело контекстного меню
- •Пункт меню
- •Разделитель
- •Подменю
- •Макро скрипты
- •Создание файлов с иконками
- •Средства работы с мышью
- •Остановить работу средства можно вызовом функции
- •Правила оформления средств работы с мышью
- •События
- •Скрипт плугины
- •Правила построения скрипт-плугина
- •Внесение изменений в плугин
- •Урок 1. Твердые тела
- •Создание набора твердых тел
- •Добавление тел к набору
Настойчивые переменные
Именно так “настойчивый”, переводится с английского слово persistent. Более подробный словарь дает, правда, перевод “постоянный”, но “постоянные переменные” звучит диковато. Настойчивость их заключается в том, что глобальные переменные, объявленные со словом persistent, запоминаются при сохранении сцены в файл и восстанавливаются при открытии этого файла. Впрочем, отделаться от этих настырных объектов не трудно, достаточно выполнить скрипт
persistents.remove <имя переменной>
При этом сама переменная никуда не девается, просто перестает быть настойчивой. А если вы хотите, чтобы все настойчивые переменные перестали быть таковыми, достаточно выполнить
persistents.removeAll()
Если же Вас интересует список всех настойчивых переменных, то к Вашим услугам функция
persistents.show()
Разберем такой скрипт
persistents.removeAll()
persistent global a=10,b=20,c=30
persistents.show()
persistents.remove #a
persistents.show()
persistents.removeAll()
persistents.show()
print a
print b
print c
Первый оператор удаляет все ранее созданные настойчивые переменные. Второй объявляет таковыми три переменных – a, b и c. Третий выводит список всех настойчивых переменных, в нем должно быть три упомянутых элемента. Четвертый оператор удаляет из списка переменную a. Знак # перед именем переменной не случаен, без него ничего не получится. Что он означает, разберем позднее, когда речь пойдет об именах переменных. Далее снова выводится список настойчивых переменных, чтобы убедиться, что a в нем отсутствует. Затем удаляем из списка настойчивых все переменные, и убеждаемся, что этот список пуст. После этого на экран выводятся все переменные, чтобы убедится, что их значения остались в целости и сохранности.
У настойчивых переменных есть одна тонкость. Рассмотрим следующий скрипт.
persistent global b,sm
b = box()
sm = standard()
Вкратце он делает следующее – создает коробочку b и стандартный материал sm. Теперь выполним его и сохраним сцену. После того, как мы перезапустили 3ds max и загрузили сохраненную сцену, то по свойствам настойчивых переменных логично было бы ожидать, что значения b и sm сохранились, но это не совсем так. Сохранилось значение только b, а sm будет иметь значение undefined. Слегка дополним скрипт
persistent global b,sm
b = box()
sm = standard()
b.material = sm
Вот теперь все будет работать правильно. Вся разница в последней строке, где материал sm применяется к коробочке b. Иными словами, если настойчивая переменная содержит объект 3ds max, но этот объект не содержится непосредственно в сцене, то значение такой переменной не сохраняется и, соответственно, не восстанавливается. В первом случае переменная sm содержала материал, который не использовался ни одним объектом сцены, ее значение и не сохранилось. Во втором случае этот материал использовался коробочкой b, и результат не замедлил проявиться.
Изменяемый тип переменных
MAXScript обладает следующей особенностью. Если в других языках каждая переменная объявляется явно или неявно, как переменная некого фиксированного типа, например, целого или текстового, то здесь каждая переменная может изменять свой тип во время выполнения программы. Например:
x = 4.5 -- сейчас x – вещественное число
x = “Hello, world” -- а сейчас – строка
Более того, элементы одного и того же массива так же могут иметь разный тип.
a[1] = 12
a[2] = 13.5
a[3] = “Character Line”