[Bf-blender-cvs] [d9097f74848] functions: initial automatic update of call node

Jacques Lucke noreply at git.blender.org
Wed Apr 3 11:56:19 CEST 2019


Commit: d9097f7484854f7fd5025a1994b4f3c09e775c00
Author: Jacques Lucke
Date:   Wed Apr 3 10:05:26 2019 +0200
Branches: functions
https://developer.blender.org/rBd9097f7484854f7fd5025a1994b4f3c09e775c00

initial automatic update of call node

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

M	release/scripts/startup/function_nodes/base.py
M	release/scripts/startup/function_nodes/declaration/tree_interface.py
M	release/scripts/startup/function_nodes/function_tree.py
M	release/scripts/startup/function_nodes/nodes/function_input.py
M	release/scripts/startup/function_nodes/nodes/function_output.py

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

diff --git a/release/scripts/startup/function_nodes/base.py b/release/scripts/startup/function_nodes/base.py
index 291b5ca64f7..739ee334122 100644
--- a/release/scripts/startup/function_nodes/base.py
+++ b/release/scripts/startup/function_nodes/base.py
@@ -80,6 +80,11 @@ class BaseNode:
         self.storage.socket_decl_map = builder.get_sockets_decl_map()
         self.storage.try_restore_socket_states()
 
+        self.on_rebuild_post()
+
+    def on_rebuild_post(self):
+        pass
+
     def _get_state(self):
         links_per_input = defaultdict(set)
         links_per_output = defaultdict(set)
diff --git a/release/scripts/startup/function_nodes/declaration/tree_interface.py b/release/scripts/startup/function_nodes/declaration/tree_interface.py
index d9aa38a3f24..3dba167858c 100644
--- a/release/scripts/startup/function_nodes/declaration/tree_interface.py
+++ b/release/scripts/startup/function_nodes/declaration/tree_interface.py
@@ -38,7 +38,7 @@ class TreeInterfaceDecl(SocketDeclBase):
         if self.in_or_out == "IN":
             data_types = [d.data_type for d in self.tree.iter_function_inputs()]
         elif self.in_or_out == "OUT":
-            data_types = [d.data_type for d in self.tree.iter_function_inputs()]
+            data_types = [d.data_type for d in self.tree.iter_function_outputs()]
         else:
             assert False
 
diff --git a/release/scripts/startup/function_nodes/function_tree.py b/release/scripts/startup/function_nodes/function_tree.py
index 7782d78a1ed..9083887eda2 100644
--- a/release/scripts/startup/function_nodes/function_tree.py
+++ b/release/scripts/startup/function_nodes/function_tree.py
@@ -14,6 +14,14 @@ class FunctionTree(bpy.types.NodeTree, BaseTree):
     bl_icon = "MOD_DATA_TRANSFER"
     bl_label = "Function Nodes"
 
+    def interface_changed(self):
+        for tree in bpy.data.node_groups:
+            if not isinstance(tree, BaseTree):
+                continue
+            for node in tree.nodes:
+                if node.bl_idname == "fn_CallNode":
+                    node.rebuild_and_try_keep_state()
+
     def iter_function_inputs(self):
         node = self.get_input_node()
         if node is None:
diff --git a/release/scripts/startup/function_nodes/nodes/function_input.py b/release/scripts/startup/function_nodes/nodes/function_input.py
index 81326231401..4326ba54d96 100644
--- a/release/scripts/startup/function_nodes/nodes/function_input.py
+++ b/release/scripts/startup/function_nodes/nodes/function_input.py
@@ -10,3 +10,6 @@ class FunctionInputNode(BaseNode, bpy.types.Node):
 
     def declaration(self, builder):
         builder.variadic_output("outputs", "variadic", "New Input")
+
+    def on_rebuild_post(self):
+        self.tree.interface_changed()
diff --git a/release/scripts/startup/function_nodes/nodes/function_output.py b/release/scripts/startup/function_nodes/nodes/function_output.py
index 4a6b99e851e..c4a2eb75fb4 100644
--- a/release/scripts/startup/function_nodes/nodes/function_output.py
+++ b/release/scripts/startup/function_nodes/nodes/function_output.py
@@ -9,4 +9,7 @@ class FunctionOutputNode(BaseNode, bpy.types.Node):
     variadic: SocketBuilder.VariadicProperty()
 
     def declaration(self, builder):
-        builder.variadic_input("inputs", "variadic", "New Output")
\ No newline at end of file
+        builder.variadic_input("inputs", "variadic", "New Output")
+
+    def on_rebuild_post(self):
+        self.tree.interface_changed()
\ No newline at end of file



More information about the Bf-blender-cvs mailing list