[Bf-blender-cvs] [a40b4d5439f] temp-derived-node-tree-refactor: construct contexts

Jacques Lucke noreply at git.blender.org
Wed Mar 3 09:57:02 CET 2021


Commit: a40b4d5439f69fd05f56b4a8f6b542472ec33985
Author: Jacques Lucke
Date:   Wed Mar 3 08:33:14 2021 +0100
Branches: temp-derived-node-tree-refactor
https://developer.blender.org/rBa40b4d5439f69fd05f56b4a8f6b542472ec33985

construct contexts

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

M	source/blender/nodes/NOD_XXX_node_tree.hh
M	source/blender/nodes/intern/xxx_node_tree.cc

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

diff --git a/source/blender/nodes/NOD_XXX_node_tree.hh b/source/blender/nodes/NOD_XXX_node_tree.hh
index fbc9bdf1c5a..314bad1993f 100644
--- a/source/blender/nodes/NOD_XXX_node_tree.hh
+++ b/source/blender/nodes/NOD_XXX_node_tree.hh
@@ -25,7 +25,7 @@ class XXXNodeTree;
 class XXXNodeTreeContextInfo {
  private:
   XXXNodeTreeContextInfo *parent_;
-  NodeTreeRef *tree_;
+  const NodeTreeRef *tree_;
   Map<const NodeRef *, XXXNodeTreeContextInfo *> children_;
 
   friend XXXNodeTree;
@@ -64,10 +64,13 @@ class XXXNodeTree {
   XXXNodeTreeContextInfo *root_context_info_;
 
  public:
-  XXXNodeTree(bNodeTree *btree, NodeTreeRefMap &node_tree_refs);
+  XXXNodeTree(bNodeTree &btree, NodeTreeRefMap &node_tree_refs);
   ~XXXNodeTree();
 
  private:
+  XXXNodeTreeContextInfo &construct_context_info_recursively(XXXNodeTreeContextInfo *parent,
+                                                             bNodeTree &btree,
+                                                             NodeTreeRefMap &node_tree_refs);
   void destruct_context_info_recursively(XXXNodeTreeContextInfo *context_info);
 };
 
diff --git a/source/blender/nodes/intern/xxx_node_tree.cc b/source/blender/nodes/intern/xxx_node_tree.cc
index af6a50ebaf9..c966024077b 100644
--- a/source/blender/nodes/intern/xxx_node_tree.cc
+++ b/source/blender/nodes/intern/xxx_node_tree.cc
@@ -18,8 +18,31 @@
 
 namespace blender::nodes {
 
-XXXNodeTree::XXXNodeTree(bNodeTree *btree, NodeTreeRefMap &node_tree_refs)
+XXXNodeTree::XXXNodeTree(bNodeTree &btree, NodeTreeRefMap &node_tree_refs)
 {
+  root_context_info_ = &this->construct_context_info_recursively(nullptr, btree, node_tree_refs);
+}
+
+XXXNodeTreeContextInfo &XXXNodeTree::construct_context_info_recursively(
+    XXXNodeTreeContextInfo *parent, bNodeTree &btree, NodeTreeRefMap &node_tree_refs)
+{
+  XXXNodeTreeContextInfo &context_info = *allocator_.construct<XXXNodeTreeContextInfo>();
+  context_info.parent_ = parent;
+  context_info.tree_ = &get_tree_ref_from_map(node_tree_refs, btree);
+
+  for (const NodeRef *node : context_info.tree_->nodes()) {
+    if (node->is_group_node()) {
+      bNode *bnode = node->bnode();
+      bNodeTree *child_btree = reinterpret_cast<bNodeTree *>(bnode->id);
+      if (child_btree != nullptr) {
+        XXXNodeTreeContextInfo &child = this->construct_context_info_recursively(
+            &context_info, *child_btree, node_tree_refs);
+        context_info.children_.add_new(node, &child);
+      }
+    }
+  }
+
+  return context_info;
 }
 
 XXXNodeTree::~XXXNodeTree()



More information about the Bf-blender-cvs mailing list