[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