[Bf-blender-cvs] [3c519d49176] functions: new Join Text List node

Jacques Lucke noreply at git.blender.org
Thu Dec 19 13:21:51 CET 2019


Commit: 3c519d491768b2a92ba0ac3410c150df31a5e798
Author: Jacques Lucke
Date:   Thu Dec 19 12:58:07 2019 +0100
Branches: functions
https://developer.blender.org/rB3c519d491768b2a92ba0ac3410c150df31a5e798

new Join Text List node

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

M	release/scripts/startup/nodes/function_nodes/text.py
M	source/blender/blenlib/BLI_virtual_list_ref.h
M	source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc
M	source/blender/functions/intern/multi_functions/mixed.cc
M	source/blender/functions/intern/multi_functions/mixed.h

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

diff --git a/release/scripts/startup/nodes/function_nodes/text.py b/release/scripts/startup/nodes/function_nodes/text.py
index 894d6cdb1d4..e70b66a4439 100644
--- a/release/scripts/startup/nodes/function_nodes/text.py
+++ b/release/scripts/startup/nodes/function_nodes/text.py
@@ -9,3 +9,12 @@ class TextLengthNode(bpy.types.Node, FunctionNode):
     def declaration(self, builder: NodeBuilder):
         builder.fixed_input("text", "Text", "Text")
         builder.fixed_output("length", "Length", "Integer")
+
+
+class JoinTextListNode(bpy.types.Node, FunctionNode):
+    bl_idname = "fn_JoinTextListNode"
+    bl_label = "Join Text List"
+
+    def declaration(self, builder: NodeBuilder):
+        builder.fixed_input("texts", "Texts", "Text List")
+        builder.fixed_output("text", "Text", "Text")
diff --git a/source/blender/blenlib/BLI_virtual_list_ref.h b/source/blender/blenlib/BLI_virtual_list_ref.h
index ae3b75b7a32..7826181a509 100644
--- a/source/blender/blenlib/BLI_virtual_list_ref.h
+++ b/source/blender/blenlib/BLI_virtual_list_ref.h
@@ -175,6 +175,11 @@ template<typename T> class VirtualListRef {
     BLI_assert(false);
     return false;
   }
+
+  IndexRange index_iterator() const
+  {
+    return IndexRange(m_virtual_size);
+  }
 };
 
 }  // namespace BLI
diff --git a/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc b/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc
index 8c5ab3a997f..b8ccae57040 100644
--- a/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc
+++ b/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc
@@ -515,11 +515,16 @@ static void INSERT_sample_object_surface(VNodeMFNetworkBuilder &builder)
   builder.set_constructed_matching_fn<MF_SampleObjectSurface>(value == 1);
 }
 
-static void INSERT_FindNonClosePointsNode(VNodeMFNetworkBuilder &builder)
+static void INSERT_find_non_close_points(VNodeMFNetworkBuilder &builder)
 {
   builder.set_constructed_matching_fn<MF_FindNonClosePoints>();
 }
 
+static void INSERT_join_text_list(VNodeMFNetworkBuilder &builder)
+{
+  builder.set_constructed_matching_fn<MF_JoinTextList>();
+}
+
 void add_inlined_tree_node_mapping_info(VTreeMultiFunctionMappings &mappings)
 {
   mappings.xnode_inserters.add_new("fn_CombineColorNode", INSERT_combine_color);
@@ -559,7 +564,7 @@ void add_inlined_tree_node_mapping_info(VTreeMultiFunctionMappings &mappings)
   mappings.xnode_inserters.add_new("fn_ValueNode", INSERT_value);
   mappings.xnode_inserters.add_new("fn_EmitterTimeInfoNode", INSERT_emitter_time_info);
   mappings.xnode_inserters.add_new("fn_SampleObjectSurfaceNode", INSERT_sample_object_surface);
-  mappings.xnode_inserters.add_new("fn_FindNonClosePointsNode", INSERT_FindNonClosePointsNode);
+  mappings.xnode_inserters.add_new("fn_FindNonClosePointsNode", INSERT_find_non_close_points);
 
   mappings.xnode_inserters.add_new("fn_AddFloatsNode", INSERT_add_floats);
   mappings.xnode_inserters.add_new("fn_MultiplyFloatsNode", INSERT_multiply_floats);
@@ -591,6 +596,8 @@ void add_inlined_tree_node_mapping_info(VTreeMultiFunctionMappings &mappings)
   mappings.xnode_inserters.add_new("fn_BooleanAndNode", INSERT_boolean_and);
   mappings.xnode_inserters.add_new("fn_BooleanOrNode", INSERT_boolean_or);
   mappings.xnode_inserters.add_new("fn_BooleanNotNode", INSERT_boolean_not);
+
+  mappings.xnode_inserters.add_new("fn_JoinTextListNode", INSERT_join_text_list);
 }
 
 };  // namespace FN
diff --git a/source/blender/functions/intern/multi_functions/mixed.cc b/source/blender/functions/intern/multi_functions/mixed.cc
index df92a4ff213..fb229a66680 100644
--- a/source/blender/functions/intern/multi_functions/mixed.cc
+++ b/source/blender/functions/intern/multi_functions/mixed.cc
@@ -868,4 +868,28 @@ void MF_FindNonClosePoints::call(IndexMask mask, MFParams params, MFContext UNUS
   }
 }
 
+MF_JoinTextList::MF_JoinTextList()
+{
+  MFSignatureBuilder signature = this->get_builder("Join Text List");
+  signature.vector_input<std::string>("Texts");
+  signature.single_output<std::string>("Text");
+}
+
+void MF_JoinTextList::call(IndexMask mask, MFParams params, MFContext UNUSED(context)) const
+{
+  VirtualListListRef<std::string> text_lists = params.readonly_vector_input<std::string>(0,
+                                                                                         "Texts");
+  MutableArrayRef<std::string> r_texts = params.uninitialized_single_output<std::string>(1,
+                                                                                         "Text");
+
+  for (uint index : mask.indices()) {
+    VirtualListRef<std::string> texts = text_lists[index];
+    std::string r_text = "";
+    for (uint i : texts.index_iterator()) {
+      r_text += texts[i];
+    }
+    new (&r_texts[index]) std::string(std::move(r_text));
+  }
+}
+
 }  // namespace FN
diff --git a/source/blender/functions/intern/multi_functions/mixed.h b/source/blender/functions/intern/multi_functions/mixed.h
index 080e0df49a6..68c7beb033d 100644
--- a/source/blender/functions/intern/multi_functions/mixed.h
+++ b/source/blender/functions/intern/multi_functions/mixed.h
@@ -196,4 +196,10 @@ class MF_FindNonClosePoints final : public MultiFunction {
   void call(IndexMask mask, MFParams params, MFContext context) const override;
 };
 
+class MF_JoinTextList final : public MultiFunction {
+ public:
+  MF_JoinTextList();
+  void call(IndexMask mask, MFParams params, MFContext context) const override;
+};
+
 }  // namespace FN



More information about the Bf-blender-cvs mailing list