Fake-bpy-module

Автокомплит кода сильно упрощает работу при написании скриптов или разработке аддонов для Blender. Один из лучших на сегодня модулей автокомплита разрабатывается Nutti. Последнее обновление: 20190718.

Проект размещается на GitHub автора: https://github.com/nutti/fake-bpy-module

Для удобства установки модули распространяются через pip или в виде pre-generated zip-архива. Так же автор предоставляет генератор модулей, с помощью которого можно собрать модули автокомплита самостоятельно.

Декоратор для отложенного обновления нодового дерева

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

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

Автор кода: Skarn

Читать далее «Декоратор для отложенного обновления нодового дерева»

Класс для создания нодов по их типу

Класс для удобного создания нодов по их типу.

Автор кода: Skarn

Читать далее «Класс для создания нодов по их типу»

Как узнать, включен ли режим просмотра Local View в окне 3D View

Следующая команда вернет список окон 3D_VIEW в которых включен режим работы Local View:

 

Как управлять видимостью объектов во вьюпорте и при рендере

Самый простой способ заставить нужный объект появляться и исчезать — назначить ему ключи анимации. Для этого нужно навести курсор на значок глаза (видимость во вьюпорте) или фотоаппарата (видимость при рендере) в окне «Outliner», нажать клавишу «i» и далее в Graph Editor управлять созданным ключом так же, как с обычными ключами анимации.

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

«hide_viewport» property cannot be animated

или

«hide_render» property cannot be animated

Однако с помощью Blender Python API видимостью таких объектов можно управлять.

Читать далее «Как управлять видимостью объектов во вьюпорте и при рендере»

Модули для автокомплита Blender API

Nutti, автор проекта fake-bpy-modules, перевел установку модулей автокомплита Blender Python API на платформу pip. Установка через pip быстрее и проще, однако иногда бывает нужно просто скопировать файлы модулей автокомплита в нужное место, а на GitHib Nutti они теперь не размещаются.

Копии файлов автокомплита для Blender версий 2.79 и 2.80 можно скачать отсюда напрямую: https://github.com/Korchy/blender_autocomplete

Как получить глобальные координаты вертекса

Чтобы получить координаты вертекса в глобальной системе координат сцены если мастшаб объекта не применялся, нужно умножить локальные координаты вертекса на матрицу трансформации объекта:

 

Правила наименования классов в Blender 2.8 API

В API Blender 2.8 ужесточаются требования к наименованию классов и их идентификаторов. Имя класса должно соответствовать следующему шаблону:

Где {SEPARATOR} — две буквы, обозначающие принадлежность класса к определенному типу (от какого типа наследуется класс):

  • HT — Заголовок
  • MT — Меню
  • OT — Оператор
  • PT — Панель
  • UL — Список UI

Идентификатор класса «bl_idname» должен соответствовать имени класса.

Читать далее «Правила наименования классов в Blender 2.8 API»

Изменения в регистрации аддонов через API в Blender 2.8

В Blender 2.7 регистрация и разрегистрация аддонов через Python API производилась через Window manager — wm:

В Blender 2.8 API операторы работы с аддонами перенесены в preferences:

 

Положение 3D курсора в Blender 2.8 Python API

Свойство, указывающее на местоположение 3D-курсора

в Blender 2.8 перенесено в объект курсора

При попытке обращения к позиции курсора через «context.scene.cursor_location» Blender выдаст ошибку:

‘Scene’ object has no attribute ‘cursor_location’

Создание свойств для аддона

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

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

Создадим простейший аддон и добавим ему глобальный параметр, поместив его в панель свойств аддона:

Читать далее «Создание свойств для аддона»

Умножение матриц, векторов, кватернионов в Blender 2.8 Python API

В Blender 2.7 для умножения матриц, кватернионов и векторов использовался оператор «*» (звездочка). В Blender 2.8 API он заменен на оператор «@» (ат).

При попытке использования оператора «*» для умножения матриц, векторов или кватернионов, Blender 2.8 сигнализирует ошибкой:

Element-wise multiplication: not supported between ‘Matrix’ and ‘Matrix’ types

Пример использования оператора «@»:

 

Доступ к элементам привязки в Blender 2.8 Python API

Свойство, указывающее на выбранный тип привязки в Blender 2.7

в Blender 2.8 изменилось на

 

Указание центральной точки в Blender 2.8 Python API

Указание опорной точки в Blender 2.7

в Blender 2.8 API перемещено в:

 

Свойство use_drag_immediately в Blender 2.8 Python API

Свойство use_drag_immediately в Blender 2.7

в Blender 2.8 API перемещено в

 

Переключение системы координат в Blender 2.8 Python API

Обращение к текущей используемой системе координат, которое в Blender 2.7 осуществлялось через

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

 

Как сделать объект (меш) активным в Blender 2.8 Python API

Для того, чтобы сделать меш (объект) активным в Blender 2.8 Python API вместо своства context.scene используется context.view_layer.

При попытке сделать меш активным через «bpy.context.scene.objects.active» Blender сигнализирует ошибкой:

AttributeError: bpy_prop_collection: attribute «active» not found

Чтобы сделать объект активным, нужно использовать следующую команду:

 

Выбор объекта (меша) в Blender 2.8 Python API

В связи с изменениями Blender API в версии 2.8 выбор меша (объекта) теперь осуществляется с помощью геттера/сеттера.

При попытке проверить выбран ли объект через «bpy.context.active_object.select» Blender сигнализирует ошибкой:

AttributeError: ‘Object’ object has no attribute ‘select’

Для проверки, является ли объект выбранным в Blender 2.8 нужно использовать геттер:

Для того, чтобы выделить объект в Blender 2.8 нужно использовать сеттер:

Для снятия выбора нужно использовать тот же сеттер:

 

Портирование аддона для Blender 2.7 в Blender 2.8

В API последней версии Blender 2.8 разработчики внесли множество изменений, поэтому практически все скрипты и аддоны, написанные для более ранних версий Blender (2.7 и ниже), перестали работать. Для того, чтобы пользоваться полюбившимися аддонами в новой версии Blender, их нужно портировать — исправить их код для корректной работы с новым API Blender.

Изменения, которые необходимо внести в код аддона, чтобы он заработал в Blender 2.80:

Читать далее «Портирование аддона для Blender 2.7 в Blender 2.8»

Является ли свойство объекта read-only — только для чтения

Для того, чтобы проверить, является ли какое-либо свойство любого объекта Blender (меша, нода, модификатора и т.д.) read-only — «только для чтения», нужно выполнить следующие действия:

  1. Для проверки через функцию is_property_readonly нужно выполнить команду вида:

<объект>.is_property_readonly(‘<название свойства>’)

  1. Для проверки через структуру rna нужно выполнить команду вида:

<объект>.bl_rna.properties[‘<название свойства>’].is_readonly

Например свойство меша is_editmode (находится ли меш в режиме редактирования) для активного меша:

Как узнать, в какой версии Blender был создан blend-файл

Для того, чтобы узнать, в какой версии Blender был сохранен blend-файл, нужно:

  • Открыть файл в Blender
  • В окне Python Console выполнить команду:

или можно открыть blend-файл для просмотра в любом текстовом редакторе, напрмер Notepad++. Версия Blender будет указана в первых 15 символах.

Также версию открытого blend-файла можно посмотеть в окно Outliner в блоке Data Blocks:

Как узнать версию установленного в Blender аддона

Полный список установленных в Blender аддонов можно получить с помощью addon_utils:

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

Где ADD-ON_NAME — имя нужного аддона.

Если у аддона отсутствует указание версии, будет возвращет результат

 

Изучаем петли (loops)

В общем понимании «петля» или в терминологии 3D – «луп» (с английского loop – петля) обычно представляет собой последовательное выделение нескольких точек, ребер или полигонов меша.

Однако во внутренней структуре меша присутствует отдельный элемент, который тоже называется «луп» (будем придерживаться терминологии) и представляет собой условную комбинацию одного вертекса с одним ребром меша. Попробуем разобраться, для чего нужны эти «лупы».

Читать далее «Изучаем петли (loops)»

Как передать дополнительные параметры в скрипт или аддон при запуске Blender из командной строки

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

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

Создание переключателя Radiobutton в интерфейсе аддона Blender

Переключатели состояний или так называемые Radio button — «радиокнопки» используют в случае, если нужно ограничить выбор какого-либо значения одним вариантом из нескольких имеющихся. В интерфейсе Blender есть множество подобных кнопок, например переключение между цветным и черно-белым режимами рендера или назначение режима маппинга текстуры к объекту. Подобные кнопки можно создавать и в интерфейсе разрабатываемых для Blender аддонов.

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

Читать далее «Создание переключателя Radiobutton в интерфейсе аддона Blender»