I wan't to create a node group "testgroup1" inside "testgroup0" using python script can anybody explain me how to do that?
1 Answer
$\begingroup$
$\endgroup$
Here is some Python functions to manipulate groups and group instances.
Principally, there is two aspects:
- Groups are stored in Blender's data in
bpy.data.node_groups - Inside a material or another group, a group needs to be instantiated so that it is link to this material or other group
The code is commented below:
import bpy
def create_material( name, use_nodes = True, clear = True ):
"""
Create a material of the given name.
Parameters:
name (string): the name of the material to create
use_nodes (bool, default True): if True the material is ready to have nodes
clear (bool, default True): if True clear default nodes
Returns:
material: The created material
"""
material = bpy.data.materials.new( name )
material.use_nodes = use_nodes
# Materials are created with two default nodes, so we may want to clear them
if clear:
clear_material( material )
return material
def clear_material( material ):
"""
Remove all node of the given material
Parameters:
material (material): the material to clear
"""
if material.node_tree:
material.node_tree.links.clear()
material.node_tree.nodes.clear()
def create_group( name ):
"""
Create a group in Blender's data
Parameters:
name (string): the name of the material
Returns:
group (group): the created group
"""
group = bpy.data.node_groups.new( name, 'ShaderNodeTree' )
return group
def instanciate_group( nodes, group ):
"""
Instanciate a group inside a node tree
Parameters
nodes: the nodes of the node tree in which the group is to instantiate
group: the group to instanciate
Returns:
instance: the created group instance
"""
instance = nodes.new( type = 'ShaderNodeGroup' )
instance.node_tree = group
return instance
# Example:
# Create a material
material = create_material( "mat" )
# Create group0
group0 = create_group( "group0" )
# Create group1
group1 = create_group( "group1" )
# Instantiate the group0 into the material
group0_instance = instanciate_group( material.node_tree.nodes, group0 )
# Instantiate the group1 into group0
group1_instance = instanciate_group( group0.nodes, group1 )