[Bf-blender-cvs] [15689a4] object_nodes: Better implementation of socket updates for list-style node.

Lukas Tönne noreply at git.blender.org
Fri Dec 4 13:36:48 CET 2015


Commit: 15689a42fbb4e8615e28d3f77b48b098739e0d7e
Author: Lukas Tönne
Date:   Fri Dec 4 13:35:20 2015 +0100
Branches: object_nodes
https://developer.blender.org/rB15689a42fbb4e8615e28d3f77b48b098739e0d7e

Better implementation of socket updates for list-style node.

The previous implementation was based on recreating links and did not work
very well when reordering connections, because the insert_link callback does
not allow changing the link target.

===================================================================

M	release/scripts/startup/bl_operators/object_nodes.py

===================================================================

diff --git a/release/scripts/startup/bl_operators/object_nodes.py b/release/scripts/startup/bl_operators/object_nodes.py
index 23a8c9a..b3025ea 100644
--- a/release/scripts/startup/bl_operators/object_nodes.py
+++ b/release/scripts/startup/bl_operators/object_nodes.py
@@ -612,45 +612,27 @@ class GeometryMeshCombineNode(GeometryNodeBase, ObjectNode):
             if link.to_node == self:
                 input_links[link.to_socket] = (link, link.from_socket)
 
-        # map input indices to a compacted list
-        input_map = []
-        last = 0
-        for i, socket in enumerate(self.inputs):
-            if socket == insert:
-                last += 1
-            input_map.append(last)
-            if socket in input_links:
-                last += 1
-        # add one for placeholder socket
-        input_map.append(last)
-        
-        # ensure correct number of sockets
-        num_inputs = len(self.inputs)
-        # remove unused sockets at the end ...
-        for i in range(last+1, num_inputs):
-            self.inputs.remove(self.inputs[i])
-        # ... or add sockets if necessary
-        for i in range(num_inputs, last+1):
+        # remove unconnected sockets
+        for socket in self.inputs:
+            if socket not in input_links and socket != insert:
+                self.inputs.remove(socket)
+            else:
+                socket.is_placeholder = False
+
+        # shift sockets to make room for a new link
+        if insert is not None:
             self.inputs.new('GeometrySocket', "")
-        # set socket 'placeholder' flag
-        for socket in self.inputs[:-1]:
-            socket.is_placeholder = False
-        self.inputs[-1].is_placeholder = True
-
-        # remove invalid links
-        for i, socket in enumerate(self.inputs):
-            if input_map[i] != i:
+            nsocket = self.inputs[-1]
+            for socket in reversed(self.inputs[:-1]):
                 link, from_socket = input_links.get(socket, (None, None))
-                if link:
+                if link is not None:
                     ntree.links.remove(link)
+                    ntree.links.new(from_socket, nsocket)
+                nsocket = socket
+                if socket == insert:
+                    break
 
-        # add corrected links
-        for i, socket in enumerate(self.inputs):
-            if input_map[i] != i:
-                to_socket = self.inputs[input_map[i]]
-                link, from_socket = input_links.get(socket, (None, None))
-                if from_socket:
-                    ntree.links.new(from_socket, to_socket)
+        self.add_extender()
 
     def update(self):
         self.update_inputs()




More information about the Bf-blender-cvs mailing list