[Bf-blender-cvs] [bee737bbad5] functions: store list with non-reroute and non-frame nodes explicitely

Jacques Lucke noreply at git.blender.org
Thu Jul 4 16:46:07 CEST 2019


Commit: bee737bbad54a74b5c94711435b163658647f2c2
Author: Jacques Lucke
Date:   Thu Jul 4 14:03:06 2019 +0200
Branches: functions
https://developer.blender.org/rBbee737bbad54a74b5c94711435b163658647f2c2

store list with non-reroute and non-frame nodes explicitely

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

M	source/blender/blenkernel/BKE_node_tree.hpp
M	source/blender/blenkernel/intern/node_tree.cpp
M	source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp

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

diff --git a/source/blender/blenkernel/BKE_node_tree.hpp b/source/blender/blenkernel/BKE_node_tree.hpp
index e14230c4c20..d41d69ce911 100644
--- a/source/blender/blenkernel/BKE_node_tree.hpp
+++ b/source/blender/blenkernel/BKE_node_tree.hpp
@@ -66,22 +66,37 @@ class IndexedNodeTree {
     return rna;
   }
 
+  /**
+   * Get all nodes that are in the btree->nodes list.
+   */
   ArrayRef<bNode *> original_nodes() const
   {
     return m_original_nodes;
   }
 
+  /**
+   * Get all links that are in the btree->links list.
+   */
   ArrayRef<bNodeLink *> original_links() const
   {
     return m_original_links;
   }
 
+  /**
+   * Get all nodes that are not reroutes or frames.
+   */
+  ArrayRef<bNode *> actual_nodes() const
+  {
+    return m_actual_nodes;
+  }
+
   ArrayRef<SingleOriginLink> single_origin_links() const;
   ArrayRef<bNode *> nodes_with_idname(StringRef idname) const;
   ArrayRef<SocketWithNode> linked(bNodeSocket *bsocket) const;
 
  private:
   bool is_reroute(bNode *bnode) const;
+  bool is_frame(bNode *bnode) const;
 
   void find_connected_sockets_left(bNodeSocket *bsocket,
                                    SmallVector<SocketWithNode> &r_sockets) const;
@@ -91,6 +106,7 @@ class IndexedNodeTree {
   bNodeTree *m_btree;
   SmallVector<bNode *> m_original_nodes;
   SmallVector<bNodeLink *> m_original_links;
+  SmallVector<bNode *> m_actual_nodes;
   SmallMap<bNodeSocket *, bNode *> m_node_by_socket;
   SmallMultiMap<bNodeSocket *, SocketWithNode> m_direct_links;
   SmallMultiMap<bNodeSocket *, SocketWithNode> m_links;
diff --git a/source/blender/blenkernel/intern/node_tree.cpp b/source/blender/blenkernel/intern/node_tree.cpp
index 09b8b3a269b..423cc50620f 100644
--- a/source/blender/blenkernel/intern/node_tree.cpp
+++ b/source/blender/blenkernel/intern/node_tree.cpp
@@ -17,6 +17,9 @@ IndexedNodeTree::IndexedNodeTree(bNodeTree *btree)
 
   for (bNode *bnode : m_original_nodes) {
     m_nodes_by_idname.add(bnode->idname, bnode);
+    if (!this->is_reroute(bnode) && !this->is_frame(bnode)) {
+      m_actual_nodes.append(bnode);
+    }
   }
 
   for (bNodeLink *blink : m_original_links) {
@@ -73,6 +76,11 @@ bool IndexedNodeTree::is_reroute(bNode *bnode) const
   return STREQ(bnode->idname, "NodeReroute");
 }
 
+bool IndexedNodeTree::is_frame(bNode *bnode) const
+{
+  return STREQ(bnode->idname, "NodeFrame");
+}
+
 /* Queries
  *******************************************************/
 
diff --git a/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp b/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
index 58dd0ac7c1f..7ebfac09c61 100644
--- a/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
@@ -20,11 +20,6 @@ static bool is_output_node(const bNode *bnode)
   return STREQ(bnode->idname, "fn_FunctionOutputNode");
 }
 
-static bool is_reroute_node(const bNode *bnode)
-{
-  return STREQ(bnode->idname, "NodeReroute");
-}
-
 static void insert_input_node(BTreeGraphBuilder &builder, bNode *bnode)
 {
   FunctionBuilder fn_builder;
@@ -57,13 +52,10 @@ static void insert_output_node(BTreeGraphBuilder &builder, bNode *bnode)
 
 static bool insert_functions_for_bnodes(BTreeGraphBuilder &builder, GraphInserters &inserters)
 {
-  for (bNode *bnode : builder.indexed_btree().original_nodes()) {
+  for (bNode *bnode : builder.indexed_btree().actual_nodes()) {
     if (is_input_node(bnode) || is_output_node(bnode)) {
       continue;
     }
-    if (is_reroute_node(bnode)) {
-      continue;
-    }
 
     if (!inserters.insert_node(builder, bnode)) {
       return false;



More information about the Bf-blender-cvs mailing list