В КУРСЕ?

Разбираемся в теме

Python в Maya: какие объекты обработает скрипт, если ничего не выделено?

Скрипт для Maya часто начинает работу с выделенных объектов. Но пустое выделение, одинаковые имена в разных группах и выбор компонентов могут изменить ожидаемый результат. Полезный первый инструмент составляет отчёт и помогает увидеть, с чем он собирается работать. Разберём такую проверку на простой схеме сцены. Самостоятельное упражнение можно выполнить на бумаге без установки приложения.

Сначала договоритесь о входе

Определите назначение инструмента одной фразой: перечислить выделенные узлы преобразования и их типы. Это уже точнее, чем обработать всё нужное. В модуле maya.cmds команда ls возвращает имена объектов; параметр selection ограничивает выбор текущим выделением. Без такого ограничения запрос может охватить гораздо больше сцены. Если ничего не выделено, инструмент должен выдать понятное сообщение. Автоматически заменять пустой список всей сценой опасно для предсказуемости: пользователь не задавал такой переход.

Имя и путь отвечают на разные вопросы

В разных ветвях иерархии могут находиться объекты с одинаковым коротким именем. Представьте группу мебели и группу декора, в каждой есть узел item. Для человека различие видно по расположению в дереве. Скрипту тоже нужна однозначная ссылка. Параметр long команды ls возвращает полные пути для объектов иерархии DAG. Путь помогает различить текущие ветви, но не становится вечным идентификатором: переименование или перемещение узла может его изменить. Поэтому отчёт следует понимать как снимок состояния сцены.

Узел преобразования и форма

Объект в сцене может включать узел преобразования и связанный с ним узел формы. Параметры положения относятся к преобразованию, геометрические данные связаны с формой. Для отчёта нужно заранее решить, какой уровень интересует инструмент. Фильтр transforms у ls помогает ограничить список узлами преобразования, а nodeType позволяет узнать тип конкретного узла. Выбранные вершины и грани требуют отдельного решения: отвергнуть такой ввод, объяснить ограничение или явно преобразовать выбор по заранее определённому правилу. Молчаливые догадки затрудняют проверку.

Отчёт отделяет поиск от изменений

На первом этапе достаточно вывести количество найденных элементов и по одной записи для каждого. Не добавляйте в эту же проверку переименование, удаление или изменение атрибутов. Тогда проще сопоставить ожидаемый список с фактическим. До запуска будущей изменяющей версии понадобится проверить сцену заново: между просмотром отчёта и действием пользователь мог поменять выделение. Полезно также решить, важен ли порядок элементов. Обычный список выделения нельзя без проверки считать точной историей щелчков, особенно при работе с компонентами.

Попробуйте на практике

Спроектируйте отчёт для вымышленной сцены с повторяющимися именами.

  1. Нарисуйте две группы, furniture и decor, и поместите в каждую по узлу item; отдельно добавьте узел cameraRig.
  2. Запишите полные пути к двум item, чтобы их можно было различить независимо от короткого имени.
  3. Обозначьте три ситуации: выделен один item, выделены оба item и выделение пусто.
  4. Для каждой ситуации составьте ожидаемый отчёт: количество элементов, их пути и сообщение при отсутствии результата.
  5. Добавьте случай выбора грани и явно укажите, что ваш первый вариант инструмента принимает только целые узлы преобразования.

Как проверить результат. Два одинаково названных узла различаются по пути. Пустой выбор не превращается в обработку всей сцены, а ограничение по типу входа видно в описании инструмента.

Частые вопросы

Зачем начинать с отчёта, если нужны изменения?

Он позволяет отдельно проверить, правильно ли найдены цели. Ошибку выбора проще заметить до добавления действий, меняющих сцену.

Можно ли сохранить имена и использовать их позже?

Можно, но перед действием нужно заново проверить соответствие текущей сцене. Сохранённая строка не гарантирует, что узел существует и означает то же самое.

Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.

Зарегистрируйтесь, чтобы уточнить возможность доступа к этому материалу

Зарегистрироваться
← К списку материалов