Python

Creating the same UI panels in different Blender areas with no code duplication

To create several identical UI panels with the same set of fields and buttons in different areas in Blender, the easiest way is to copy the panel code and replace the parameters that determine in which area the panel will be shown.

The main disadvantage of this method is code duplication, which can make difficulties in the future – when editing panels, changes must be made to each copy of the code, instead of changing it at once for all panels.

Displaying icons with the unknown id in the UI

To display an icon next to a property, text label, or on the operator button in the UI, we need to specify its identifier in the “icon” or “icon_value” parameter. But not all types of icons have their identifiers known in advance. For example, we cannot predefine the icon’s identifiers for procedural textures and materials because they are generated at runtime.

To get the identifier of such a dynamic icon, we can use the “icon” method of the “UILayout” class.

Autocomplete for developing Blender add-ons in the Eclipse IDE

The Eclipse IDE, like PyCharm, and Visual Studio Code, is one of the most popular IDEs for development, including Blender add-ons development. To improve the convenience of developing Blender add-ons in the Eclipse IDE, we can add an autocomplete to it – the code completion for the Blender Python API.

By the Pavel Geraskin tips.

How to show parameters ​​from Geometry Nodes inputs on a custom UI panel

Input parameters from Blender Geometry Nodes are automatically placed on the “Geometry Nodes” modifier panel in the “Properties” window on the modifier tab. However, this tab is not always open, and it is not always convenient to switch to it to adjust values. For quick access to the input parameters of Geometry Nodes, we can duplicate them on the custom panel in the 3D Viewport window.

Operators for globally hiding objects in all project scenes

To hide an object in the 3D Viewport window for the current scene we use the “object.hide_view_set” operator, which calls when we clicking the icon with an “eye” in the outliner. However, to hide the object in the viewport for all scenes of the project at once (clicking on the icon with the “monitor” image) a special operator is not provided. We can make it ourselves.

 

How to apply transformations to a mesh with the Blender Python API

To apply all transformations to an object, all its vertices must be multiplied by its global matrix, the matrix itself must be made identity.

To apply all transformations to the active mesh, we need to execute the following:

Message Bus

In Blender API there is a module that we can use to track the changes of any object’s properties available through the Python API. This module names “Message Bus”.

Let’s look at how we can make an event handler function to track changes to a property. For example – the location of the 3D cursor.

Setting colors for Blender collections with the Python API

Since Blender 2.9, the ability to assign color tags has been added for collections. Collection with such tag is displaying in a specific color in the outliner.

The collection color tag value is stored in its “color_tag” property. To change the color label of a collection, we need to assign a certain value to this property.

For example, to mark the current active collection in green: