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

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

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

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

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

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

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

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

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

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

Читать далее «Переопределение контекста»

Как сменить текущий инструмент при помощи Blender Python API

Для того, чтобы переключить активный инструмент из Т-панели в окне 3D вьюпорта нужно вызвать соответствующий оператор в параметре “name” которого нужно передать идентификатор idname требуемого инструмента.

Например для того, чтобы включить выделение окружностью Select Circle нужно вызвать оператор:

Читать далее «Как сменить текущий инструмент при помощи Blender Python API»

Как подключить Python-модуль по абсолютному пути

Модули, используемые в скриптах и аддонах Blender, располагаются или в той же директории, что и сам скрипт или аддон, или в директории установки Blender по пути “версия_blender\python\lib\”. Однако возможно подключить для работы и модуль, расположенный в другом месте на жестком диске.

Для этого нужно подключить модуль по его абсолютному пути.

Читать далее «Как подключить Python-модуль по абсолютному пути»

Как привязать меш к кости с сохранением текущего положения

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

Читать далее «Как привязать меш к кости с сохранением текущего положения»

Как переместить кость арматуры на место кости другой арматуры

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

Для этого нужно выполнить следующий код:

Читать далее «Как переместить кость арматуры на место кости другой арматуры»

Расчет Bounding Sphere для объектов

Чаще всего для быстрых упрощенных расчетов с геометрией объектов используются их Bounding Box – минимальный параллелепипед, в который вписан данный объект. Однако. иногда большую точность и простоту в расчетах может дать Bounding Sphere – минимальная сфера, в которую можно вписать объект. И если размеры и расположение Bounding Box доступно в Blender для любого объекта сразу, Bounding Sphere необходимо рассчитывать самостоятельно.

Напишем функцию, которая на основании переданного объекта вернет нам координаты центра и радиус описывающей его Bounding Sphere.

Читать далее «Расчет Bounding Sphere для объектов»

Особенности инвертирования матриц

Попытка инвертировать матрицу преобразования при помощи метода inverted() может привести к ошибке, если, например, на объект, для которого вычисляется исходная матрица оказывает влияние какой-нибудь ограничитель.

В этом случае Blender сгенерирует ошибку вида:

ValueError: Matrix.invert(ed): matrix does not have an inverse

Читать далее «Особенности инвертирования матриц»

Многострочный текст в панелях интерфейса Blender

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

Для начала создадим простейшую панель в N-панели окне вьюпорта 3D Viewport и разместим на ней текстовый элемент label с нужным текстом.

Читать далее «Многострочный текст в панелях интерфейса Blender»

Как получить количество треугольников для меша

Чтобы получить количество вертексов, ребер и полигонов меша, можно просто взять их количество из нужного блока данных: vertices, edges и polygons. Однако в структуре меша нет отдельного блока данных под треугольники.

Для того, чтобы получить количество треугольников в меше, нужно выполнить следующий код:

Читать далее «Как получить количество треугольников для меша»

Вертикальный и горизонтальный углы FOV камеры

Камера в Blender всегда определяется двумя углами поля видимости FOV – вертикальным и горизонтальным.

Один из них всегда задается пользователем через параметр камеры – Feild of View (или комбинации параметров Focal Length и Sensor Width).

Читать далее «Вертикальный и горизонтальный углы FOV камеры»

Автокомплит для Blender 2.92

Обновление fake-bpy-modules – модулей автокомплита Blender Python API от Nutti. Добавлена ветка для Blender 2.92.

Последний релиз от 04.03.2020

GitHub автора: https://github.com/nutti/fake-bpy-module

Файлы отдельно (без установки через pip) https://github.com/Korchy/blender_autocomplete

Особенности использования матрицы масштаба

Для того, чтобы манипулировать трансформациями объектов при помощи матриц в Blender включен модуль “mathutils” в котором определен класс “Matrix”. С помощью этого класса можно удобно создавать нужные матрицы трансформаций – перемещения, поворота и масштаба.

Для создания матрицы масштабирования используется следующая команда:

Читать далее «Особенности использования матрицы масштаба»

Локализация аддонов Blender – через API

Классический способ локализации аддона Blender (перевода аддона на разные языки) удобен тем, что для него требуется всего лишь одно обращение к Blender python API – получение текущей используемой локали. Он хорош своей независимостью, однако Blender не был бы Blender-ом, если бы не предоставил пользователям возможность локализации аддонов через свой API.

Принцип создания мультиязычных аддонов с использованием Blender python API по сути мало отличается от классического. Нам точно так же необходимо создать словарь со всеми вариантами перевода текстовых строк, используемых в нашем аддоне, и в дальнейшем пользоваться им для перевода.

Читать далее «Локализация аддонов Blender – через API»

Как получить данные меша с учетом модификаторов

При обращении к геометрии меша – его точкам, ребрам и полигонам, Blender оперирует исходными данными без учета наложенных на объект модификаторов.

Например количество точек для активного объекта, которое можно получить с помощью команды:

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

Читать далее «Как получить данные меша с учетом модификаторов»

Как сделать кнопку перехода по url-адресу в интерфейсе Blender

Для того, чтобы выполнить переход по url-адресу из Blender – открыть нужный адрес в браузере, можно воспользоваться системным оператором wm.url_open.

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

Читать далее «Как сделать кнопку перехода по url-адресу в интерфейсе Blender»

Как получить данные сцены через контекст

Если нужно одновременно иметь доступ и к текущему контексту, например для работы с операторами, и к данным сцены, например для работы с мешами, мы обращаемся к двум предопределенным в Blender Python API структурам: “bpy.context” и “bpy.data”.

Например мы можем передать указатели на эти две структуры в функцию:

Однако в структуре контекста “bpy.context” уже есть ссылка с именем “blend_data”, которая указывает на данные сцены. С помощью этого указателя можно обращаться к данным сцены, не передавая его отдельно в явном виде.

Как снять выделение с точек меша

Для меша в Blender можно снимать и устанавливать выделение точек через свойство “select” для каждой точки.

Однако для снятия выделения с точки недостаточно установить значение свойства “select” точки равным “False”.

Читать далее «Как снять выделение с точек меша»

Локализация аддонов Blender – классическая

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

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

Читать далее «Локализация аддонов Blender – классическая»