Передача параметров в оператор
При создании собственных операторов иногда бывает нужно передавать в них определенные значения – вызывать операторы с параметрами.
Передаваемый параметр должен быть определен, как свойство оператора.
При создании собственных операторов иногда бывает нужно передавать в них определенные значения – вызывать операторы с параметрами.
Передаваемый параметр должен быть определен, как свойство оператора.
Для переноса выделения с UV-развертки на меш достаточно вспомнить, что развертка напрямую связана с мешем через мешлупы.
Чтобы перенести выделение с развертки на меш нужно пройти по полигонам меша, проверить, какие мешлупы выделены и выделить соответствующие им точки на самом меше.
Список вертексов, входящих в группу с определенным именем можно получить следующим образом:
1 2 |
[vert for vert in bpy.context.object.data.vertices if bpy.context.object.vertex_groups['vertex_group_name'].index in [i.group for i in vert.groups]] # [bpy.data.meshes['Cube'].vertices[0], bpy.data.meshes['Cube'].vertices[1], ... |
Автокомплит кода сильно упрощает работу при написании скриптов или разработке аддонов для Blender. Один из лучших на сегодня модулей автокомплита разрабатывается Nutti. Последнее обновление: 20190718.
Проект размещается на GitHub автора: https://github.com/nutti/fake-bpy-module
Для удобства установки модули распространяются через pip или в виде pre-generated zip-архива. Так же автор предоставляет генератор модулей, с помощью которого можно собрать модули автокомплита самостоятельно.
Если в панелях интерфейса аддона присутствует поле, значение которого меняет что-то в нодовом дереве, при изменении значения в этом поле нодовое дерево каждый раз перекомпилируется. Если пользователь меняет значение в таком поле зажав и двигая мышкой, слишком частая перекомпиляция нодового дерева приведет к заметным подвисаниям Blender.
Проблему лагов можно решить, используя декораторы для отложенного обновления нодового дерева.
Автор кода: Skarn
Декоратор для отложенного обновления нодового дереваRead More »
Класс для удобного создания нодов по их типу.
Автор кода: Skarn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
class NodeTreeBuilder: def __init__( self , node_tree : bpy.types.NodeTree , x : float = -200 , y : float = -200 , delimeter : float = 300 ): self._x = x self._y = y self.tree = node_tree self.delimeter = delimeter self.purge_tree() def purge_tree(self): for node in self.tree.nodes: self.tree.nodes.remove(node) def add_node( self , node_type : str , node_name : str , column : int , row : int , node_descr : str = "" ): node = self.tree.nodes.new(node_type) node.name = node_name node.label = node_descr if node_descr else node_name node.location = (self.delimeter * column + self._x, -self.delimeter * row + self._y) return node |
Следующая команда вернет список окон 3D_VIEW в которых включен режим работы Local View:
1 2 3 |
[area for area in bpy.context.screen.areas if area.type =='VIEW_3D' and area.spaces[0].local_view] # [bpy.data.screens['Layout']...Area] |
Самый простой способ заставить нужный объект появляться и исчезать – назначить ему ключи анимации. Для этого нужно навести курсор на значок глаза (видимость во вьюпорте) или фотоаппарата (видимость при рендере) в окне “Outliner”, нажать клавишу “i” и далее в Graph Editor управлять созданным ключом так же, как с обычными ключами анимации.
Но такой способ доступен не всегда. Например, для коллекций нельзя назначить ключи анимации видимости, Blender выдаст ошибки вида:
“hide_viewport” property cannot be animated
или
“hide_render” property cannot be animated
Однако с помощью Blender Python API видимостью таких объектов можно управлять.
Как управлять видимостью объектов во вьюпорте и при рендереRead More »
Nutti, автор проекта fake-bpy-modules, перевел установку модулей автокомплита Blender Python API на платформу pip. Установка через pip быстрее и проще, однако иногда бывает нужно просто скопировать файлы модулей автокомплита в нужное место, а на GitHib Nutti они теперь не размещаются.
Копии файлов автокомплита для Blender версий 2.79 и 2.80 можно скачать отсюда напрямую: https://github.com/Korchy/blender_autocomplete
Чтобы получить координаты вертекса в глобальной системе координат сцены если мастшаб объекта не применялся, нужно умножить локальные координаты вертекса на матрицу трансформации объекта:
1 2 3 |
object = bpy.data.objects['_MY_OBJECT_'] v_local = object.data.vertices[_VERT_NUMBER_].co # local vertex coordinate v_global = object.matrix_world @ v_local # global vertex coordinates |