Python

Bounding Box

Bounding Box – это прямоугольный параллелепипед, описанный вокруг всех точек меша. Обычно Bounding Box используется для

упрощенного просчета физического взаимодействия объектов, например, столкновений.

Использование в UI иконок с неизвестным заранее id

Для отображения в UI рядом со свойством, текстовым лейблом или на кнопке оператора соответствующей иконки нужно указать ее идентификатор в параметре icon или icon_value. Но не для всех видов иконок их идентификаторы заранее известны. Например, нельзя заранее определить id для генерирующихся в рантайме иконок процедурных текстур и материалов.

Для того, чтобы получить идентификатор такой динамической иконки в UI, можно воспользоваться методом icon класса UILayout.

Установка Python-пакетов через pip в Blender на Windows 10

Если для работы в Blender необходимо установить дополнительные пакеты модулей на Python, которые не установлены в Blender по умолчанию, вы можете сделать это через pip.

Однако, если вы работаете на операционной системе Windows 10, интерпретатор Python устанавливает новые пакеты не в директорию установки Blender, а в персональную директорию пользователя Windows.

Автокомплит для разработки аддонов Blender в Eclipse IDE

Eclipse IDE, наравне с PyCharm и Visual Studio Code, является одной из наиболее популярных IDE для разработки, в том числе и аддонов для Blender. Для повышения удобства разработки под Blender в Eclipse IDE в нее можно подключить автокомплит – автодополнение кода для Blender Python API.

По заметкам Павла Гераськина.

Группировка данных в подпанелях

Для того, чтобы разбить интерфейс пользователя UI на несколько визуальных групп, чаще всего в Blender API просто регистрируют несколько отдельных панелей и объединяют их вместе, заданием одинакового параметра “bl_category”. В этом случае мы получаем несколько панелей, расположенных вертикально, которые можно сворачивать и разворачивать независимо друг от друга.

Как получить доступ к кастомному атрибуту, созданному в Geometry Nodes

Механизм Geometry Nodes в Blender позволяет легко создавать для объектов дополнительные кастомные атрибуты и помещать в них нужные данные. Однако прямого доступа к таким атрибутам нет.

Как сделать копию объекта при помощи Blender Python API

Создать копию объекта в сцене можно двумя путями:

  1. Вызывая оператор дублирования объекта,
  2. Используя метод copy() самого объекта.

Как вынести на пользовательскую панель значения со входов Geometry Nodes

Входные параметры в Blender Geometry Nodes автоматически выносятся на панель модификатора “Geometry Nodes” в окне Properties на вкладке модификатора. Однако далеко не всегда нужная вкладка открыта, и не всегда удобно переключаться на нее для их регулировки. Для быстрого доступа к входным параметрам Geometry Nodes их можно продублировать в пользовательской панели в окне 3D Viewport.

Хоткей для выбора активной камеры

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

Оператор для скрытия объекта во всех сценах

Для того, чтобы скрыть объект в окне 3D Viewport только для текущей сцены мы все пользуемся оператором object.hide_view_set, вызов которого равносилен нажатию на иконку с глазом в аутлайнере. Однако для того, чтобы скрыть объект во вьюпорте сразу для всех сцен проекта – нажатие на иконку с изображением монитора, специального оператора не предусмотрено. Сделаем его сами.

Как вынести динамически заданное свойство объекта на пользовательскую панель

В Blender API рекомендуется задавать дополнительные свойства для объектов через классы, предопределенные в bpy.props. Например для добавления целочисленного свойства используется класс bpy.props.IntProperty. Такие свойства удобны, хорошо работают и легко выносятся на панели пользовательского интерфейса.

Как применить трансформации к мешу с помощью Blender Python API

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

Шина передачи сообщений

В API Blender существует модуль, с помощью которого можно отслеживать изменение любого свойства, доступного через Python API. Этот модуль – шина передачи данных или “Message Bus”.

 

Рассмотрим, как можно создать функцию-обработчик события для отслеживания изменения какого-либо свойства. Например – местоположения 3D курсора в сцене.

Как присвоить цветовые метки коллекциям с помощью Blender Python API

Начиная с версии Blender 2.9 для коллекций добавлена возможность назначать цветовые метки – отображение а аутлайнере определенным цветом.

Значение цветовой метки коллекции хранится в ее свойстве “color_tag”. Для того, чтобы изменить цветовую метку у коллекции, нужно присвоить этому свойству определенное значение.

Например, для пометки текущей активной коллекции зеленым цветом:

Оператор для переключения чекбоксов

Оператор wm.context_toggle предназначен для переключения состояния чекбоксов в интерфейсе Blender. С его помощью можно настроить быстрое переключение любых чекбоксов в любых окнах и панелях.

Для примера настроим включение/выключение отображения сетки (wireframe) во вьюпорте.

Как найти, в какой коллекции размещен нужный объект

Если нужный объект расположен в скрытой коллекции, в больших сценах бывает сложно его найти.

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

Например для камеры:

Этот код вернет список камер и коллекций в которых они размещены.

Переопределение контекста

Некоторые операторы в Blender можно вызывать только в той рабочей области, для которой они предназначены.

Если вызывать, например, оператор, предназначенный только для работы в области 3D вьюпорта в Python-консоли, оператор или просто не выполнится:

или вернет сообщение о неверном контексте:

Однако выполнить операторы в “не родной” рабочей области все же можно. Для этого в любой оператор можно передать первым неявным параметром указание на контекст рабочей области, в которой должен быть выполнен этот оператор. Этот параметр обычно называют “переопределенный контекст”.