Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'release/scripts/startup/nodeitems_builtins.py')
-rw-r--r--release/scripts/startup/nodeitems_builtins.py45
1 files changed, 42 insertions, 3 deletions
diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py
index 09820291222..f130a79ede0 100644
--- a/release/scripts/startup/nodeitems_builtins.py
+++ b/release/scripts/startup/nodeitems_builtins.py
@@ -94,9 +94,6 @@ def node_group_items(context):
yield NodeItemCustom(draw=group_tools_draw)
- yield NodeItem("NodeGroupInput", poll=group_input_output_item_poll)
- yield NodeItem("NodeGroupOutput", poll=group_input_output_item_poll)
-
yield NodeItemCustom(draw=lambda self, layout, context: layout.separator())
def contains_group(nodetree, group):
@@ -123,6 +120,40 @@ def node_group_items(context):
settings={"node_tree": "bpy.data.node_groups[%r]" % group.name})
+def node_group_input_items(context):
+ if context is None:
+ return
+ space = context.space_data
+ if not space:
+ return
+ ntree = space.edit_tree
+ if not ntree:
+ return
+
+ for i, iosock in enumerate(ntree.inputs):
+ settings = dict()
+ settings["use_extension_socket"] = "False"
+ for k, _ in enumerate(ntree.inputs):
+ settings["outputs[{}].hide".format(k)] = "False" if k == i else "True"
+ yield NodeItem("NodeGroupInput", label=iosock.name, settings=settings, poll=group_input_output_item_poll)
+
+
+def node_group_output_items(context):
+ if context is None:
+ return
+ space = context.space_data
+ if not space:
+ return
+ ntree = space.edit_tree
+ if not ntree:
+ return
+
+ # Node groups are not added as single-socket nodes currently, because only one node can be active output.
+ # Dividing group output between multiple nodes will require changes to the "active output" concept (NODE_DO_OUTPUT flag).
+
+ yield NodeItem("NodeGroupOutput", poll=group_input_output_item_poll)
+
+
# only show input/output nodes inside node groups
def group_input_output_item_poll(context):
space = context.space_data
@@ -294,6 +325,8 @@ shader_node_categories = [
NodeItem("ShaderNodeScript"),
]),
ShaderNodeCategory("SH_NEW_GROUP", "Group", items=node_group_items),
+ ShaderNodeCategory("SH_NEW_GROUP_INPUTS", "Group Inputs", items=node_group_input_items),
+ ShaderNodeCategory("SH_NEW_GROUP_OUTPUTS", "Group Outputs", items=node_group_output_items),
ShaderNodeCategory("SH_NEW_LAYOUT", "Layout", items=[
NodeItem("NodeFrame"),
NodeItem("NodeReroute"),
@@ -409,6 +442,8 @@ compositor_node_categories = [
NodeItem("CompositorNodeCornerPin"),
]),
CompositorNodeCategory("CMP_GROUP", "Group", items=node_group_items),
+ CompositorNodeCategory("CMP_GROUP_INPUTS", "Group Inputs", items=node_group_input_items),
+ CompositorNodeCategory("CMP_GROUP_OUTPUTS", "Group Outputs", items=node_group_output_items),
CompositorNodeCategory("CMP_LAYOUT", "Layout", items=[
NodeItem("NodeFrame"),
NodeItem("NodeReroute"),
@@ -466,6 +501,8 @@ texture_node_categories = [
NodeItem("TextureNodeAt"),
]),
TextureNodeCategory("TEX_GROUP", "Group", items=node_group_items),
+ TextureNodeCategory("TEX_GROUP_INPUTS", "Group Inputs", items=node_group_input_items),
+ TextureNodeCategory("TEX_GROUP_OUTPUTS", "Group Outputs", items=node_group_output_items),
TextureNodeCategory("TEX_LAYOUT", "Layout", items=[
NodeItem("NodeFrame"),
NodeItem("NodeReroute"),
@@ -596,6 +633,8 @@ geometry_node_categories = [
NodeItem("GeometryNodeVolumeToMesh"),
]),
GeometryNodeCategory("GEO_GROUP", "Group", items=node_group_items),
+ GeometryNodeCategory("GEO_GROUP_INPUTS", "Group Inputs", items=node_group_input_items),
+ GeometryNodeCategory("GEO_GROUP_OUTPUTS", "Group Outputs", items=node_group_output_items),
GeometryNodeCategory("GEO_LAYOUT", "Layout", items=[
NodeItem("NodeFrame"),
NodeItem("NodeReroute"),