2

I'm creating a number of objects in a loop, how can I assign an existing Geometry Node group to these created objects?

I've tried to assign data.node_group.name the name of the group but that just renames the existing group!

import bpy

for i in range(1): bpy.ops.mesh.primitive_cube_add(size=2, location=(i2, i2, 0)) bpy.ops.transform.resize(value=(1,1,1)) bpy.ops.object.modifier_add(type='NODES') # This adds the GeometryNodes modifier data = bpy.context.object.modifiers.get("GeometryNodes")

Assign 'MY GEOMETRY NODE GROUP' to the GeometryNodes modifier

data.node_group.name = "MY GEOMETRY NODE GROUP"

Any help would be appreciated.

Thanks.

Maj
  • 153
  • 1
  • 6

2 Answers2

4

You can get an existing node group using:

ng = bpy.data.node_groups['your node group']

Adding a Geometry Node modifier:

modifier=o.modifiers.new("MyName", "NODES")

(where o is your object)

The modifier is added, but adding it also creates a new node group that you can delete by:

 bpy.data.node_groups.remove(modifier.node_group)

Then you can add the 'MY GEOMETRY NODE GROUP' by:

modifier.node_group = bpy.data.node_groups['MY GEOMETRY NODE GROUP']
lemon
  • 60,295
  • 3
  • 66
  • 136
1

You can use the modifier_copy_to_selected operator with a context override :

object_to_copy_from = bpy.context.active_object
objects_to_copy_to = bpy.context.selected_objects

override = { "active_object": object_to_copy_from, "selected_objects": objects_to_copy_to }

bpy.ops.object.modifier_copy_to_selected(override, modifier="GeometryNodes")

Gorgious
  • 30,723
  • 2
  • 44
  • 101