Add helper function to node_utils to create links to virtual sockets #105975
@ -1,10 +1,49 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
__all__ = (
|
||||
"connect_virtual_socket",
|
||||
"find_node_input",
|
||||
)
|
||||
|
||||
|
||||
def connect_sockets(input, output):
|
||||
"""
|
||||
Connect sockets in a node tree.
|
||||
|
||||
This is useful because the links created through the normal Python API are
|
||||
invalid when one of the sockets is a virtual socket (grayed out sockets in
|
||||
Group Input and Group Output nodes).
|
||||
|
||||
It replaces node_tree.links.new(input, output)
|
||||
"""
|
||||
import bpy
|
||||
|
||||
# Swap sockets if they are not passed in the proper order
|
||||
if input.is_output and not output.is_output:
|
||||
input, output = output, input
|
||||
|
||||
input_node = output.node
|
||||
|
||||
output_node = input.node
|
||||
|
||||
if input_node.id_data is not output_node.id_data:
|
||||
print("Sockets do not belong to the same node tree")
|
||||
return
|
||||
|
||||
if type(input) == type(output) == bpy.types.NodeSocketVirtual:
|
||||
print("Cannot connect two virtual sockets together")
|
||||
return
|
||||
|
||||
if output_node.type == 'GROUP_OUTPUT' and type(input) == bpy.types.NodeSocketVirtual:
|
||||
output_node.id_data.outputs.new(type(output).__name__, output.name)
|
||||
input = output_node.inputs[-2]
|
||||
|
||||
if input_node.type == 'GROUP_INPUT' and type(output) == bpy.types.NodeSocketVirtual:
|
||||
output_node.id_data.inputs.new(type(input).__name__, input.name)
|
||||
output = input_node.outputs[-2]
|
||||
|
||||
return input_node.id_data.links.new(input, output)
|
||||
|
||||
|
||||
# XXX Names are not unique. Returns the first match.
|
||||
def find_node_input(node, name):
|
||||
for input in node.inputs:
|
||||
|
Loading…
Reference in New Issue
Block a user
Probably it worth to mention that performance of the function is
O(len(node_group.nodes))
because you calloutput.node
. Also in some casesoutput.node
can return None.