[Bf-blender-cvs] [afe19d51e3c] functions: remember placeholder nodes after they are created

Jacques Lucke noreply at git.blender.org
Fri Aug 2 19:15:25 CEST 2019


Commit: afe19d51e3c085fe41749b4454d7aacc4f150f7b
Author: Jacques Lucke
Date:   Fri Aug 2 18:57:19 2019 +0200
Branches: functions
https://developer.blender.org/rBafe19d51e3c085fe41749b4454d7aacc4f150f7b

remember placeholder nodes after they are created

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

M	source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
M	source/blender/functions/frontends/data_flow_nodes/vtree_data_graph.hpp
M	source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp
M	source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.hpp

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

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 f1ecfa91954..d5854c27898 100644
--- a/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
@@ -7,28 +7,6 @@
 namespace FN {
 namespace DataFlowNodes {
 
-static void insert_placeholder_node(VTreeDataGraphBuilder &builder, VirtualNode *vnode)
-{
-  FunctionBuilder fn_builder;
-  for (VirtualSocket *vsocket : vnode->inputs()) {
-    if (builder.is_data_socket(vsocket)) {
-      SharedType &type = builder.query_socket_type(vsocket);
-      fn_builder.add_input(vsocket->name(), type);
-    }
-  }
-  for (VirtualSocket *vsocket : vnode->outputs()) {
-    if (builder.is_data_socket(vsocket)) {
-      SharedType &type = builder.query_socket_type(vsocket);
-      fn_builder.add_output(vsocket->name(), type);
-    }
-  }
-
-  auto fn = fn_builder.build(vnode->name());
-  fn->add_body<VNodePlaceholderBody>(vnode);
-  BuilderNode *node = builder.insert_function(fn);
-  builder.map_data_sockets(node, vnode);
-}
-
 static bool insert_functions_for_bnodes(VTreeDataGraphBuilder &builder)
 {
   auto &inserters = MAPPING_node_inserters();
@@ -40,7 +18,7 @@ static bool insert_functions_for_bnodes(VTreeDataGraphBuilder &builder)
     }
 
     if (builder.has_data_socket(vnode)) {
-      insert_placeholder_node(builder, vnode);
+      builder.insert_placeholder(vnode);
     }
   }
   return true;
@@ -70,9 +48,10 @@ static bool insert_links(VTreeDataGraphBuilder &builder)
   return true;
 }
 
-static void insert_unlinked_inputs(VTreeDataGraphBuilder &builder, InputInserter &input_inserter)
+class SeparateNodeInputs : public UnlinkedInputsHandler {
+ public:
+  void handle(VTreeDataGraphBuilder &builder, InputInserter &inserter) override
 {
-
   for (VirtualNode *vnode : builder.vtree().nodes()) {
     Vector<VirtualSocket *> vsockets;
     Vector<BuilderInputSocket *> sockets;
@@ -89,7 +68,7 @@ static void insert_unlinked_inputs(VTreeDataGraphBuilder &builder, InputInserter
 
     if (vsockets.size() > 0) {
       Vector<BuilderOutputSocket *> new_origins(vsockets.size());
-      input_inserter.insert(builder, vsockets, new_origins);
+        inserter.insert(builder, vsockets, new_origins);
       builder.insert_links(new_origins, sockets);
     }
   }
diff --git a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph.hpp b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph.hpp
index a5f3ea584ce..460fdc7fa00 100644
--- a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph.hpp
+++ b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph.hpp
@@ -67,11 +67,13 @@ class VTreeDataGraph {
 class VNodePlaceholderBody : public FunctionBody {
  private:
   VirtualNode *m_vnode;
+  Vector<VirtualSocket *> m_vsocket_inputs;
 
  public:
   static const uint FUNCTION_BODY_ID = 4;
 
-  VNodePlaceholderBody(VirtualNode *vnode) : m_vnode(vnode)
+  VNodePlaceholderBody(VirtualNode *vnode, Vector<VirtualSocket *> vsocket_inputs)
+      : m_vnode(vnode), m_vsocket_inputs(std::move(vsocket_inputs))
   {
   }
 
@@ -79,6 +81,11 @@ class VNodePlaceholderBody : public FunctionBody {
   {
     return m_vnode;
   }
+
+  ArrayRef<VirtualSocket *> inputs()
+  {
+    return m_vsocket_inputs;
+  }
 };
 
 }  // namespace DataFlowNodes
diff --git a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp
index 11a8b7e6970..0bc9871de2d 100644
--- a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp
@@ -126,6 +126,39 @@ BuilderNode *VTreeDataGraphBuilder::insert_function(SharedFunction &fn, VirtualN
   return m_graph_builder.insert_function(fn, source);
 }
 
+BuilderNode *VTreeDataGraphBuilder::insert_placeholder(VirtualNode *vnode)
+{
+  FunctionBuilder fn_builder;
+
+  Vector<VirtualSocket *> vsocket_inputs;
+  for (VirtualSocket *vsocket : vnode->inputs()) {
+    if (this->is_data_socket(vsocket)) {
+      vsocket_inputs.append(vsocket);
+      SharedType &type = this->query_socket_type(vsocket);
+      fn_builder.add_input(vsocket->name(), type);
+    }
+  }
+
+  for (VirtualSocket *vsocket : vnode->outputs()) {
+    if (this->is_data_socket(vsocket)) {
+      SharedType &type = this->query_socket_type(vsocket);
+      fn_builder.add_output(vsocket->name(), type);
+    }
+  }
+
+  auto fn = fn_builder.build(vnode->name());
+  fn->add_body<VNodePlaceholderBody>(vnode, std::move(vsocket_inputs));
+  BuilderNode *node = this->insert_function(fn);
+  this->map_data_sockets(node, vnode);
+  m_placeholder_nodes.append(node);
+  return node;
+}
+
+ArrayRef<BuilderNode *> VTreeDataGraphBuilder::placeholder_nodes()
+{
+  return m_placeholder_nodes;
+}
+
 void VTreeDataGraphBuilder::insert_link(BuilderOutputSocket *from, BuilderInputSocket *to)
 {
   m_graph_builder.insert_link(from, to);
diff --git a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.hpp b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.hpp
index feb0e73f643..48c28546403 100644
--- a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.hpp
+++ b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.hpp
@@ -23,6 +23,7 @@ class VTreeDataGraphBuilder {
   Vector<BuilderSocket *> m_socket_map;
   Vector<SharedType> m_type_by_vsocket;
   std::unique_ptr<TypeMappings> &m_type_mappings;
+  Vector<BuilderNode *> m_placeholder_nodes;
   DataGraphBuilder m_graph_builder;
 
  public:
@@ -35,16 +36,14 @@ class VTreeDataGraphBuilder {
     return m_socket_map;
   }
 
-  /* Insert Function */
   BuilderNode *insert_function(SharedFunction &fn);
   BuilderNode *insert_matching_function(SharedFunction &fn, VirtualNode *vnode);
   BuilderNode *insert_function(SharedFunction &fn, VirtualNode *vnode);
+  BuilderNode *insert_placeholder(VirtualNode *vnode);
 
-  /* Insert Link */
   void insert_link(BuilderOutputSocket *from, BuilderInputSocket *to);
   void insert_links(ArrayRef<BuilderOutputSocket *> from, ArrayRef<BuilderInputSocket *> to);
 
-  /* Socket Mapping */
   void map_input_socket(BuilderInputSocket *socket, VirtualSocket *vsocket);
   void map_output_socket(BuilderOutputSocket *socket, VirtualSocket *vsocket);
   void map_sockets(BuilderNode *node, VirtualNode *vnode);
@@ -54,22 +53,14 @@ class VTreeDataGraphBuilder {
   BuilderOutputSocket *lookup_output_socket(VirtualSocket *vsocket);
   bool verify_data_sockets_mapped(VirtualNode *vnode) const;
 
-  /* Type Mapping */
   SharedType &type_by_name(StringRef data_type) const;
-
-  /* Query Node Tree */
   VirtualNodeTree &vtree() const;
-
-  /* Query Socket Information */
   bool is_data_socket(VirtualSocket *vsocket) const;
   SharedType &query_socket_type(VirtualSocket *vsocket) const;
-
-  /* Query Node Information */
   SharedType &query_type_property(VirtualNode *vnode, StringRefNull prop_name) const;
   bool has_data_socket(VirtualNode *vnode) const;
-
-  /* Query RNA */
   SharedType &type_from_rna(PointerRNA &rna, StringRefNull prop_name) const;
+  ArrayRef<BuilderNode *> placeholder_nodes();
 
   std::string to_dot();
   void to_dot__clipboard();



More information about the Bf-blender-cvs mailing list