[Bf-blender-cvs] [39ebd2fd1f8] functions: more general function tree dependency discovery

Jacques Lucke noreply at git.blender.org
Tue Jul 16 18:20:06 CEST 2019


Commit: 39ebd2fd1f84714afec2e17f345b5c1f46b0cd36
Author: Jacques Lucke
Date:   Tue Jul 16 12:57:30 2019 +0200
Branches: functions
https://developer.blender.org/rB39ebd2fd1f84714afec2e17f345b5c1f46b0cd36

more general function tree dependency discovery

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

M	release/scripts/startup/nodes/base.py
M	release/scripts/startup/nodes/bparticle_nodes/custom_emitter.py
M	release/scripts/startup/nodes/function_nodes/call.py
M	release/scripts/startup/nodes/function_tree.py

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

diff --git a/release/scripts/startup/nodes/base.py b/release/scripts/startup/nodes/base.py
index 6e3638815ea..e8ffac11c82 100644
--- a/release/scripts/startup/nodes/base.py
+++ b/release/scripts/startup/nodes/base.py
@@ -105,6 +105,10 @@ class BaseNode:
     def draw_advanced(self, layout):
         pass
 
+    def iter_dependency_trees(self):
+        return
+        yield
+
     def invoke_function(self,
             layout, function_name, text,
             *, icon="NONE", settings=tuple()):
diff --git a/release/scripts/startup/nodes/bparticle_nodes/custom_emitter.py b/release/scripts/startup/nodes/bparticle_nodes/custom_emitter.py
index f0f02720950..fe0abd881b3 100644
--- a/release/scripts/startup/nodes/bparticle_nodes/custom_emitter.py
+++ b/release/scripts/startup/nodes/bparticle_nodes/custom_emitter.py
@@ -14,7 +14,14 @@ class CustomEmitterNode(bpy.types.Node, FunctionNode):
     )
 
     def declaration(self, builder: SocketBuilder):
+        if self.function_tree:
+            builder.tree_interface_input("inputs", self.function_tree, 'IN')
+
         builder.emitter_output("emitter", "Emitter")
 
     def draw(self, layout):
         layout.prop(self, "function_tree", text="")
+
+    def iter_dependency_trees(self):
+        if self.function_tree is not None:
+            yield self.function_tree
diff --git a/release/scripts/startup/nodes/function_nodes/call.py b/release/scripts/startup/nodes/function_nodes/call.py
index 35e04ae1643..9efb3f71218 100644
--- a/release/scripts/startup/nodes/function_nodes/call.py
+++ b/release/scripts/startup/nodes/function_nodes/call.py
@@ -20,3 +20,7 @@ class CallNode(bpy.types.Node, FunctionNode):
 
     def draw(self, layout):
         layout.prop(self, "function_tree", text="")
+
+    def iter_dependency_trees(self):
+        if self.function_tree is not None:
+            yield self.function_tree
diff --git a/release/scripts/startup/nodes/function_tree.py b/release/scripts/startup/nodes/function_tree.py
index 296f3b219b5..8f00d47cb41 100644
--- a/release/scripts/startup/nodes/function_tree.py
+++ b/release/scripts/startup/nodes/function_tree.py
@@ -11,10 +11,10 @@ FunctionOutput = namedtuple("FunctionOutput",
 
 class TreeWithFunctionNodes:
     def iter_dependency_trees(self):
+        trees = set()
         for node in self.nodes:
-            if node.bl_idname == "fn_CallNode":
-                if node.function_tree is not None:
-                    yield node.function_tree
+            trees.update(node.iter_dependency_trees())
+        yield from trees
 
 class FunctionTree(bpy.types.NodeTree, BaseTree, TreeWithFunctionNodes):
     bl_idname = "FunctionTree"



More information about the Bf-blender-cvs mailing list