Содержание
Общие положения скриптинга
Срабатывание кнопки скрипта в туллбаре в сочетании с Shift
Нажмите радиокнопку с Maxscript в командной панели
Если ошибка сравнения чисел и получается false. Maxscript иногда возвращает округлённое значение, а у себя держит это за дробное число с плавающей точкой.
Нажимаем на любую кнопку панели Modify
Помещаем в буфер обмена имя файла и дату в обратном порядке и расширение для архиватора
Запуск внешнего скрипта как функции
Отправляем нажатие клавиш и хоткеев в активное окно (в сам 3dsMax)
Универсальные единые функции подсчёта вершин и полигонов для любого количества и типов объектов.
Как получить дескриптор любой кнопки чтобы нажать её скриптом
Перехват окна на примере STL Import и виртуальное нажатие в нём элементов UI
Функции-“синонимы”
Открытие роллаута на позиции прошлого закрытия
Нормализованные XYZ векторы камеры въюпорта
Функция проверки пуста ли папка
Русский (кириллица) в редакторе MaxScript
Фильтр по классу SplineShape, LinearShape, line
Применение структур.
|
|
Универсальные методы работы Edit_Poly и Editable_Poly
Тестовый пример для понимания работы со структурами
Структурой создана зависимость работы одного диалога от состояния другого
Value > MAXWrapper > Node
Viewport Redraw Callback Mechanism
Node Event событий System Коллбэк событий объекта
Сообщения windows.sendMessage, UIAccessor.sendMessage
Разбираемся. Пример. Ссылки
Управление элементами интерфейса 3dsMax.UIAccessor
Делаем окно роллаута “поверх определённого окна”
dialogMonitorOps.getWindowHandle()
radiobuttons
Конвертация текста в число и выполнение текста как кода
Заставим кнопку нажаться автоматически без использования функций
Интерактивность спиннера
Гиперссылка в роллауте
Быстро выделить объекты по имени
Подгрузка функции из файла.
Аббревиатуры
Сортировка массива пузырьком
Пример фильтра нескольких объектов по признаку.
Передаём функции переменную
Битовые массивы. Применение множеств
В битовом массиве проверка наличия элемента вместо finditem
Получение открытых вершн
Получение открытых рёбер
Способ формирования массива
Учимся Скрывать/открывать обновление командной панели Modify при выполнении скрипта
Использование функции полосы прогресса
Устанавливаем позицию вершины под модификатором Edit_Poly
Доступ к объектам и подобъектам под модификатором Edit_Poly
Работа с двумерными массивами.
Меняем местами значение двух переменных
Работа с интерфейсами (свойствами) функций.
Меняем местами подэлементы двумерного массива
Немножко логики и интересный способ присвоения значений переменным.
Работа с внешним текстовым файлом
1) Основные операции с файлом
2) Создание нового файла
|
|
3) Открытие файла:
Выполнение следующего кода если не выполнился или выполнился код
и доступ к геометрии
Выделение вершин функцией в Edit_Poly
В рамках улучшения понимания MaxScriptHelp, разбираемся с одним из методов.
А теперь рассмотрим ещё один грамм гранита науки касательно справки MaxScript и использования модификатора Edit_Poly
Организуем структуру
Организуем элемент интерфейса.
Выпадающий свиток dropDownList
PushPrompt. Messagebox. QueryBox
“%”в MaxScript
Рассадка одного объекта на вершины другого объекта
Рассчитывается угол между объектами (повёрнут ли один объект в сторону другого)
Поворачиваем объект с помощью кватерниона
Матрицы трансформаций
Сравнение элементов массивов
Циклы
Массивы
Общие положения скриптинга
_______________________________________________________________
1) Каждое выражение, которое добавляется в скрипт надо проверять в "песочнице", то-есть вводить выражение в Maxscript Editor с тестовыми параметрами и смотреть, что возвращает листенер.
Ещё раз:
ДЛЯ КАЖДОГО
СЛОВА
СТРОКИ кода
НАДО
ПРОВЕРЯТЬ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Это связано с тем, что очень легко пропустить какой то аргумент, или предположил, что функция максскрипта должна вернуть то что хочешь, а получаешь что то другое. Если каждое выражение в конструкции кода проходит проверку в эдиторе, то проблем не будет. Кроме того, код становится осмысленным, идёт полное понимание того, то происходит в процессе выполнения скрипта и никаких танцев с бубном!
2) Скрипт лучше всего писать конструируя его таким образом, что сначала перечисляются сложные функции как модули, из которых потом будет состоять более простенькая конструкция самого скрипта.
3) Переменные из тела самого скрипта не передаются функциям, поэтому переменные должны быть объявлены перед функцией, в которой присутствует эта переменная.
Пример:
macroScript...
(
---functions---
fn A_fn = (
aaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaa
)
fn B_fn= (
bbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb
)
fn С_fn= (
ccccccccccccccccccccc
ccccccccccccccccccccc
ccccccccccccccccccccc
)
---script---
if A_fn() then B_fn() else C_fn()
)
4) Лишние скобки не нужны и всё следующее перечисленное в скобках не нуждается если:
- это единственная функция с несколькими параметрами, которые эта функция ожидает.
- если это конструкции
if()then()else()
if()then()
if()do()
case <expr> of ()
try()catch()
for () do|collect ()
while()do()
do()while()
5) В функциях можно использовать другие функции, эти другие функции должны располагаться в коде перед (выше) той функции, в которой они будут использоваться. По сути принцип схож с объявлением переменных.
Срабатывание кнопки скрипта в туллбаре в сочетании с Shift
Кнопки скрипта в туллбаре - это типа вот эти
Можно запрограммировать дополнительное событие на нажатие этой кнопки в сочетании с нажатием на Shift
if keyboard.shiftPressed then () else ()
Так вот особенность в том что это можно сделать только с кнопкой Shift
И экспериментально выявлено что
if keyboard.altPressed
if keyboard.escPressed
if keyboard.controlPressed
Не работают.
_______________________________________________________________