diff options
Diffstat (limited to 'release/scripts/startup/nodeitems_builtins.py')
-rw-r--r-- | release/scripts/startup/nodeitems_builtins.py | 45 |
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"), |