Commit: 391ee167463d09b4299f9689ca8f9ed8166e15ea
Author: Jacques Lucke
Date:   Sun Mar 10 18:29:00 2019 +0100
Branches: functions
https://developer.blender.org/rB391ee167463d09b4299f9689ca8f9ed8166e15ea

new Combine Lists node

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

A       release/scripts/startup/function_nodes/nodes/combine_lists.py
M       source/blender/blenlib/BLI_small_vector.hpp
M       source/blender/functions/frontends/data_flow_nodes/test_nodes.cpp
M       source/blender/functions/functions/lists.cpp
M       source/blender/functions/functions/lists.hpp
M       source/blender/functions/types/lists.hpp

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

diff --git a/release/scripts/startup/function_nodes/nodes/combine_lists.py 
b/release/scripts/startup/function_nodes/nodes/combine_lists.py
new file mode 100644
index 00000000000..6d651c3cd39
--- /dev/null
+++ b/release/scripts/startup/function_nodes/nodes/combine_lists.py
@@ -0,0 +1,14 @@
+import bpy
+from .. base import FunctionNode
+
+class CombineListsNode(bpy.types.Node, FunctionNode):
+    bl_idname = "fn_CombineListsNode"
+    bl_label = "Combine Lists"
+
+    def get_sockets(self):
+        return [
+            ("fn_FloatListSocket", "List 1"),
+            ("fn_FloatListSocket", "List 2"),
+        ], [
+            ("fn_FloatListSocket", "List"),
+        ]
\ No newline at end of file
diff --git a/source/blender/blenlib/BLI_small_vector.hpp 
b/source/blender/blenlib/BLI_small_vector.hpp
index 92e4948da56..9044908eaa3 100644
--- a/source/blender/blenlib/BLI_small_vector.hpp
+++ b/source/blender/blenlib/BLI_small_vector.hpp
@@ -102,6 +102,13 @@ namespace BLI {
                        m_size++;
                }
 
+               void extend(const SmallVector &other)
+               {
+                       for (const T &value : other) {
+                               this->append(value);
+                       }
+               }
+
                void fill(const T &value)
                {
                        for (uint i = 0; i < m_size; i++) {
diff --git a/source/blender/functions/frontends/data_flow_nodes/test_nodes.cpp 
b/source/blender/functions/frontends/data_flow_nodes/test_nodes.cpp
index a2e113553ed..8de9a2aa0e5 100644
--- a/source/blender/functions/frontends/data_flow_nodes/test_nodes.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/test_nodes.cpp
@@ -91,6 +91,16 @@ namespace FN { namespace DataFlowNodes {
                builder.map_sockets(node, bnode);
        }
 
+       static void insert_combine_lists_node(
+               Builder &builder,
+               const BuilderContext UNUSED(ctx),
+               bNode *bnode)
+       {
+               SharedFunction &combine_float_lists = 
Functions::combine_float_lists();
+               Node *node = builder.insert_function(combine_float_lists);
+               builder.map_sockets(node, bnode);
+       }
+
        void register_node_inserters(GraphInserters &inserters)
        {
                inserters.reg_node_function("fn_CombineVectorNode", 
Functions::combine_vector);
@@ -104,6 +114,7 @@ namespace FN { namespace DataFlowNodes {
                inserters.reg_node_inserter("fn_ClampNode", insert_clamp_node);
                inserters.reg_node_inserter("fn_AppendToListNode", 
insert_append_list_node);
                inserters.reg_node_inserter("fn_GetListElementNode", 
insert_get_list_element_node);
+               inserters.reg_node_inserter("fn_CombineListsNode", 
insert_combine_lists_node);
        }
 
 } }
\ No newline at end of file
diff --git a/source/blender/functions/functions/lists.cpp 
b/source/blender/functions/functions/lists.cpp
index d8f50a03659..75624d9a84b 100644
--- a/source/blender/functions/functions/lists.cpp
+++ b/source/blender/functions/functions/lists.cpp
@@ -22,6 +22,19 @@ namespace FN { namespace Functions {
                }
        };
 
+       LAZY_INIT_REF__NO_ARG(SharedFunction, append_float)
+       {
+               auto fn = SharedFunction::New("Append Float", Signature({
+                       InputParameter("List", get_float_list_type()),
+                       InputParameter("Value", get_float_type()),
+               }, {
+                       OutputParameter("List", get_float_list_type()),
+               }));
+               fn->add_body(new AppendToList<float>());
+               return fn;
+       }
+
+
        template<typename T>
        class GetListElement : public TupleCallBody {
                void call(Tuple &fn_in, Tuple &fn_out) const override
@@ -41,18 +54,6 @@ namespace FN { namespace Functions {
                }
        };
 
-       LAZY_INIT_REF__NO_ARG(SharedFunction, append_float)
-       {
-               auto fn = SharedFunction::New("Append Float", Signature({
-                       InputParameter("List", get_float_list_type()),
-                       InputParameter("Value", get_float_type()),
-               }, {
-                       OutputParameter("List", get_float_list_type()),
-               }));
-               fn->add_body(new AppendToList<float>());
-               return fn;
-       }
-
        LAZY_INIT_REF__NO_ARG(SharedFunction, get_float_list_element)
        {
                auto fn = SharedFunction::New("Get Float List Element", 
Signature({
@@ -66,4 +67,33 @@ namespace FN { namespace Functions {
                return fn;
        }
 
+
+       template<typename T>
+       class CombineList : public TupleCallBody {
+               void call(Tuple &fn_in, Tuple &fn_out) const override
+               {
+                       auto list1 = fn_in.relocate_out<SharedList<T>>(0);
+                       auto list2 = fn_in.relocate_out<SharedList<T>>(1);
+
+                       list1 = list1->get_mutable();
+                       list1->extend(list2.ptr());
+
+                       fn_out.move_in(0, list1);
+               }
+       };
+
+       LAZY_INIT_REF__NO_ARG(SharedFunction, combine_float_lists)
+       {
+               SharedType &float_list_ty = get_float_list_type();
+
+               auto fn = SharedFunction::New("Combine Float List", Signature({
+                       InputParameter("List 1", float_list_ty),
+                       InputParameter("List 2", float_list_ty),
+               }, {
+                       OutputParameter("List", float_list_ty),
+               }));
+               fn->add_body(new CombineList<float>());
+               return fn;
+       }
+
 } } /* namespace FN::Functions */
\ No newline at end of file
diff --git a/source/blender/functions/functions/lists.hpp 
b/source/blender/functions/functions/lists.hpp
index 347ff5152b2..af7b80561d0 100644
--- a/source/blender/functions/functions/lists.hpp
+++ b/source/blender/functions/functions/lists.hpp
@@ -6,5 +6,6 @@ namespace FN { namespace Functions {
 
        SharedFunction &append_float();
        SharedFunction &get_float_list_element();
+       SharedFunction &combine_float_lists();
 
 } } /* namespace FN::Functions */
\ No newline at end of file
diff --git a/source/blender/functions/types/lists.hpp 
b/source/blender/functions/types/lists.hpp
index ab419a2f21b..1fcd0f327d9 100644
--- a/source/blender/functions/types/lists.hpp
+++ b/source/blender/functions/types/lists.hpp
@@ -39,6 +39,12 @@ namespace FN { namespace Types {
                        m_data.append(std::move(value));
                }
 
+               void extend(List *other)
+               {
+                       this->assert_mutable();
+                       m_data.extend(other->m_data);
+               }
+
                List *copy() const
                {
                        List *new_list = new List();

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to