API

Создание одинаковых панелей UI в разных окнах Blender без дублирования кода

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

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

Создание скрытого оператора

Иногда бывает необходимо зарегистрировать оператор так, чтобы пользователь не мог вызвать его напрямую. Например, если данный оператор предполагается вызывать только из другого оператора после выполнения ряда проверок или дополнительных действий.

Особенность обращения к объектам в depsgrapth update

При использовании обработчика depsgraph_update выполнение действий с объектами, переданными в обработчик, не дает полного результата. Например, изменяя какие-нибудь свойства объекта обращаясь к нему через object.id, они могут быть изменены не полностью.

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”. Для того, чтобы изменить цветовую метку у коллекции, нужно присвоить этому свойству определенное значение.

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