[Bf-blender-cvs] [a0cff9838a3] functions: utility to get nodes with idname

Jacques Lucke noreply at git.blender.org
Tue Jul 2 16:11:55 CEST 2019


Commit: a0cff9838a3d857e6e8018f7bbca474664f2fcb4
Author: Jacques Lucke
Date:   Tue Jul 2 15:05:38 2019 +0200
Branches: functions
https://developer.blender.org/rBa0cff9838a3d857e6e8018f7bbca474664f2fcb4

utility to get nodes with idname

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

M	source/blender/blenkernel/BKE_node_tree.hpp
M	source/blender/blenkernel/intern/node_tree.cpp
M	source/blender/simulations/bparticles/c_wrapper.cpp
M	tests/gtests/functions/CMakeLists.txt

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

diff --git a/source/blender/blenkernel/BKE_node_tree.hpp b/source/blender/blenkernel/BKE_node_tree.hpp
index 2542b70e25b..68c4c1ac864 100644
--- a/source/blender/blenkernel/BKE_node_tree.hpp
+++ b/source/blender/blenkernel/BKE_node_tree.hpp
@@ -2,6 +2,7 @@
 
 #include "DNA_node_types.h"
 
+#include "BLI_string_ref.hpp"
 #include "BLI_array_ref.hpp"
 #include "BLI_small_map.hpp"
 #include "BLI_small_vector.hpp"
@@ -13,10 +14,11 @@ using BLI::ArrayRef;
 using BLI::ListBaseWrapper;
 using BLI::SmallMap;
 using BLI::SmallVector;
+using BLI::StringRef;
 
-using bNodeList = ListBaseWrapper<struct bNode, true>;
-using bLinkList = ListBaseWrapper<struct bNodeLink, true>;
-using bSocketList = ListBaseWrapper<struct bNodeSocket, true>;
+using bNodeList = ListBaseWrapper<struct bNode *, true>;
+using bLinkList = ListBaseWrapper<struct bNodeLink *, true>;
+using bSocketList = ListBaseWrapper<struct bNodeSocket *, true>;
 
 class BNodeTreeLookup {
  public:
@@ -33,10 +35,13 @@ class BNodeTreeLookup {
     return m_data_links;
   }
 
+  SmallVector<bNode *> nodes_with_idname(StringRef idname);
+
  private:
   bool is_reroute(bNode *bnode);
   bNodeSocket *try_find_data_origin(bNodeSocket *bsocket);
 
+  SmallVector<bNode *> m_nodes;
   SmallMap<bNodeSocket *, bNode *> m_node_by_socket;
   SmallMap<bNodeSocket *, bNodeSocket *> m_direct_origin;
   SmallVector<DataLink> m_data_links;
diff --git a/source/blender/blenkernel/intern/node_tree.cpp b/source/blender/blenkernel/intern/node_tree.cpp
index 8eb7dbe8681..5469f3d5c89 100644
--- a/source/blender/blenkernel/intern/node_tree.cpp
+++ b/source/blender/blenkernel/intern/node_tree.cpp
@@ -2,9 +2,9 @@
 
 namespace BKE {
 
-BNodeTreeLookup::BNodeTreeLookup(bNodeTree *btree)
+BNodeTreeLookup::BNodeTreeLookup(bNodeTree *btree) : m_nodes(btree->nodes, true)
 {
-  for (bNode *bnode : bNodeList(&btree->nodes)) {
+  for (bNode *bnode : m_nodes) {
     for (bNodeSocket *bsocket : bSocketList(&bnode->inputs)) {
       m_node_by_socket.add(bsocket, bnode);
     }
@@ -54,4 +54,15 @@ bool BNodeTreeLookup::is_reroute(bNode *bnode)
   return STREQ(bnode->idname, "NodeReroute");
 }
 
+SmallVector<bNode *> BNodeTreeLookup::nodes_with_idname(StringRef idname)
+{
+  SmallVector<bNode *> result;
+  for (bNode *bnode : m_nodes) {
+    if (bnode->idname == idname) {
+      result.append(bnode);
+    }
+  }
+  return result;
+}
+
 }  // namespace BKE
diff --git a/source/blender/simulations/bparticles/c_wrapper.cpp b/source/blender/simulations/bparticles/c_wrapper.cpp
index 0ff9c7f5412..10ae8414f56 100644
--- a/source/blender/simulations/bparticles/c_wrapper.cpp
+++ b/source/blender/simulations/bparticles/c_wrapper.cpp
@@ -14,6 +14,7 @@
 #include "BKE_bvhutils.h"
 #include "BKE_mesh.h"
 #include "BKE_customdata.h"
+#include "BKE_node_tree.hpp"
 
 #include "DNA_mesh_types.h"
 #include "DNA_meshdata_types.h"
@@ -33,6 +34,7 @@
 
 using namespace BParticles;
 
+using BKE::BNodeTreeLookup;
 using BLI::ArrayRef;
 using BLI::float3;
 using BLI::SmallVector;
@@ -218,6 +220,11 @@ class ModifierStepDescription : public StepDescription {
   }
 };
 
+// ModifierStepDescription *step_description_from_node_tree(bNodeTree *btree)
+// {
+//   BNodeTreeLookup btree_lookup(btree);
+// }
+
 void BParticles_simulate_modifier(NodeParticlesModifierData *npmd,
                                   Depsgraph *UNUSED(depsgraph),
                                   BParticlesState state_c)
diff --git a/tests/gtests/functions/CMakeLists.txt b/tests/gtests/functions/CMakeLists.txt
index a41144d7937..9467433f147 100644
--- a/tests/gtests/functions/CMakeLists.txt
+++ b/tests/gtests/functions/CMakeLists.txt
@@ -23,6 +23,7 @@ set(INC
   ..
   ../../../source/blender/blenlib
   ../../../source/blender/functions
+  ../../../source/blender/makesdna
   ../../../intern/guardedalloc
   ${LLVM_INCLUDE_DIRS}
 )



More information about the Bf-blender-cvs mailing list