[Bf-blender-cvs] [b1d1a58c77f] master: Geometry Nodes: improve operators for node editor header
Hans Goudey
noreply at git.blender.org
Wed Dec 2 15:54:37 CET 2020
Commit: b1d1a58c77fb165855c3ff8c13fdebe3d4297db8
Author: Hans Goudey
Date: Tue Dec 1 21:35:26 2020 +0100
Branches: master
https://developer.blender.org/rBb1d1a58c77fb165855c3ff8c13fdebe3d4297db8
Geometry Nodes: improve operators for node editor header
This allows users to create new modifiers directly from the
Geometry Nodes Editor.
===================================================================
M release/scripts/startup/bl_operators/geometry_nodes.py
M release/scripts/startup/bl_ui/space_node.py
===================================================================
diff --git a/release/scripts/startup/bl_operators/geometry_nodes.py b/release/scripts/startup/bl_operators/geometry_nodes.py
index 374bd4161a7..23926f28ab0 100644
--- a/release/scripts/startup/bl_operators/geometry_nodes.py
+++ b/release/scripts/startup/bl_operators/geometry_nodes.py
@@ -18,6 +18,20 @@
import bpy
+def geometry_node_group_empty_new(context):
+ group = bpy.data.node_groups.new("Geometry Nodes", 'GeometryNodeTree')
+ group.inputs.new('NodeSocketGeometry', "Geometry")
+ group.outputs.new('NodeSocketGeometry', "Geometry")
+ input_node = group.nodes.new('NodeGroupInput')
+ output_node = group.nodes.new('NodeGroupOutput')
+ output_node.is_active_output = True
+
+ input_node.location.x = -200 - input_node.width
+ output_node.location.x = 200
+
+ group.links.new(output_node.inputs[0], input_node.outputs[0])
+
+ return group
def geometry_modifier_poll(context) -> bool:
ob = context.object
@@ -28,11 +42,34 @@ def geometry_modifier_poll(context) -> bool:
return True
+class NewGeometryNodeModifier(bpy.types.Operator):
+ """Create a new modifier with a new geometry node group"""
+
+ bl_idname = "node.new_geometry_node_modifier"
+ bl_label = "New Geometry Node Modifier"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ @classmethod
+ def poll(cls, context):
+ return geometry_modifier_poll(context)
+
+ def execute(self, context):
+ modifier = context.object.modifiers.new("Empty", "NODES")
+
+ if not modifier:
+ return {'CANCELLED'}
+
+ group = geometry_node_group_empty_new(context)
+ modifier.node_group = group
+
+ return {'FINISHED'}
+
+
+class NewGeometryNodeTreeAssign(bpy.types.Operator):
+ """Create a new geometry node group and assign it the the active modifier"""
-class NewGeometryNodeTree(bpy.types.Operator):
- """Create a new geometry node tree"""
- bl_idname = "node.new_geometry_node_tree"
- bl_label = "New Geometry Node Tree"
+ bl_idname = "node.new_geometry_node_group_assign"
+ bl_label = "Assign New Geometry Node Group"
bl_options = {'REGISTER', 'UNDO'}
@classmethod
@@ -40,21 +77,18 @@ class NewGeometryNodeTree(bpy.types.Operator):
return geometry_modifier_poll(context)
def execute(self, context):
- group = bpy.data.node_groups.new("Geometry Nodes", 'GeometryNodeTree')
- group.inputs.new('NodeSocketGeometry', "Geometry")
- group.outputs.new('NodeSocketGeometry', "Geometry")
- input_node = group.nodes.new('NodeGroupInput')
- output_node = group.nodes.new('NodeGroupOutput')
- output_node.is_active_output = True
+ modifier = context.object.modifiers.active
- input_node.location.x = -200 - input_node.width
- output_node.location.x = 200
+ if not modifier:
+ return {'CANCELLED'}
- group.links.new(output_node.inputs[0], input_node.outputs[0])
+ group = geometry_node_group_empty_new(context)
+ modifier.node_group = group
return {'FINISHED'}
classes = (
- NewGeometryNodeTree,
+ NewGeometryNodeModifier,
+ NewGeometryNodeTreeAssign,
)
diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py
index 4cd38831cdf..9ad454d49e1 100644
--- a/release/scripts/startup/bl_ui/space_node.py
+++ b/release/scripts/startup/bl_ui/space_node.py
@@ -154,7 +154,20 @@ class NODE_HT_header(Header):
elif snode.tree_type == 'GeometryNodeTree':
NODE_MT_editor_menus.draw_collapsible(context, layout)
layout.separator_spacer()
- layout.template_ID(snode, "node_tree", new="node.new_geometry_node_tree")
+
+ ob = context.object
+
+ row = layout.row()
+ if snode.pin:
+ row.enabled = False
+ row.template_ID(snode, "node_tree", new="node.new_geometry_node_group_assign")
+ elif ob:
+ active_modifier = ob.modifiers.active
+ if active_modifier and active_modifier.type == "NODES":
+ row.template_ID(active_modifier, "node_group", new="node.new_geometry_node_group_assign")
+ else:
+ row.template_ID(snode, "node_tree", new="node.new_geometry_node_modifier")
+
else:
# Custom node tree is edited as independent ID block
More information about the Bf-blender-cvs
mailing list