[Bf-blender-cvs] [28fc08bff95] functions: replace Append to List and Combine Lists nodes with Pack List
Jacques Lucke
noreply at git.blender.org
Wed Mar 20 18:06:36 CET 2019
Commit: 28fc08bff95e00297ccddb6f08f5ea19542a3b88
Author: Jacques Lucke
Date: Wed Mar 20 18:06:27 2019 +0100
Branches: functions
https://developer.blender.org/rB28fc08bff95e00297ccddb6f08f5ea19542a3b88
replace Append to List and Combine Lists nodes with Pack List
===================================================================
D release/scripts/startup/function_nodes/nodes/append_to_list.py
D release/scripts/startup/function_nodes/nodes/combine_lists.py
R078 release/scripts/startup/function_nodes/nodes/create_list.py release/scripts/startup/function_nodes/nodes/pack_list.py
M release/scripts/startup/function_nodes/socket_decl.py
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
===================================================================
diff --git a/release/scripts/startup/function_nodes/nodes/append_to_list.py b/release/scripts/startup/function_nodes/nodes/append_to_list.py
deleted file mode 100644
index b321bd5d3f5..00000000000
--- a/release/scripts/startup/function_nodes/nodes/append_to_list.py
+++ /dev/null
@@ -1,17 +0,0 @@
-import bpy
-from .. base import FunctionNode
-from .. socket_decl import ListSocketDecl
-
-class AppendToListNode(bpy.types.Node, FunctionNode):
- bl_idname = "fn_AppendToListNode"
- bl_label = "Append to List"
-
- active_type: ListSocketDecl.Property()
-
- def get_sockets(self):
- return [
- ListSocketDecl("list", "List", "active_type", "LIST"),
- ListSocketDecl("value", "Value", "active_type", "BASE"),
- ], [
- ListSocketDecl("list", "List", "active_type", "LIST"),
- ]
\ No newline at end of file
diff --git a/release/scripts/startup/function_nodes/nodes/combine_lists.py b/release/scripts/startup/function_nodes/nodes/combine_lists.py
deleted file mode 100644
index 1aa3519440c..00000000000
--- a/release/scripts/startup/function_nodes/nodes/combine_lists.py
+++ /dev/null
@@ -1,17 +0,0 @@
-import bpy
-from .. base import FunctionNode
-from .. socket_decl import ListSocketDecl
-
-class CombineListsNode(bpy.types.Node, FunctionNode):
- bl_idname = "fn_CombineListsNode"
- bl_label = "Combine Lists"
-
- active_type: ListSocketDecl.Property()
-
- def get_sockets(self):
- return [
- ListSocketDecl("list1", "List 1", "active_type", "LIST"),
- ListSocketDecl("list2", "List 2", "active_type", "LIST"),
- ], [
- ListSocketDecl("list", "List", "active_type", "LIST"),
- ]
\ No newline at end of file
diff --git a/release/scripts/startup/function_nodes/nodes/create_list.py b/release/scripts/startup/function_nodes/nodes/pack_list.py
similarity index 78%
rename from release/scripts/startup/function_nodes/nodes/create_list.py
rename to release/scripts/startup/function_nodes/nodes/pack_list.py
index fb3b7289fb2..3c657d10a07 100644
--- a/release/scripts/startup/function_nodes/nodes/create_list.py
+++ b/release/scripts/startup/function_nodes/nodes/pack_list.py
@@ -4,9 +4,9 @@ from .. base import FunctionNode
from .. socket_decl import PackListDecl, FixedSocketDecl
from .. sockets import type_infos
-class CreateListNode(bpy.types.Node, FunctionNode):
- bl_idname = "fn_CreateListNode"
- bl_label = "Create List"
+class PackListNode(bpy.types.Node, FunctionNode):
+ bl_idname = "fn_PackListNode"
+ bl_label = "Pack List"
active_type: StringProperty(default="Float")
variadic: PackListDecl.Property()
diff --git a/release/scripts/startup/function_nodes/socket_decl.py b/release/scripts/startup/function_nodes/socket_decl.py
index 0e7f61bdd72..f20afea1556 100644
--- a/release/scripts/startup/function_nodes/socket_decl.py
+++ b/release/scripts/startup/function_nodes/socket_decl.py
@@ -133,7 +133,11 @@ class PackListDecl(SocketDeclBase):
class PackListPropertyGroup(bpy.types.PropertyGroup):
bl_idname = "fn_PackListPropertyGroup"
- state: StringProperty(default="BASE")
+ state: EnumProperty(
+ default="BASE",
+ items=[
+ ("BASE", "Base", "", "NONE", 0),
+ ("LIST", "Base", "", "NONE", 1)])
identifier_prefix: StringProperty()
class AnyVariadicDecl(SocketDeclBase):
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 a355f3d75ca..ac5b80a333c 100644
--- a/source/blender/functions/frontends/data_flow_nodes/test_nodes.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/test_nodes.cpp
@@ -104,6 +104,51 @@ namespace FN { namespace DataFlowNodes {
builder.map_sockets(node, bnode);
}
+ static void insert_pack_list_node(
+ Builder &builder,
+ const BuilderContext ctx,
+ bNode *bnode)
+ {
+ SharedType &base_type = ctx.type_from_rna(bnode, "active_type");
+
+ PointerRNA ptr;
+ ctx.get_rna(bnode, &ptr);
+ int input_amount = RNA_collection_length(&ptr, "variadic");
+
+ auto &empty_fn = Functions::empty_list(base_type);
+ Node *node = builder.insert_function(empty_fn);
+
+ int index = 0;
+ RNA_BEGIN(&ptr, itemptr, "variadic")
+ {
+ Node *new_node;
+ int state = RNA_enum_get(&itemptr, "state");
+ if (state == 0) {
+ /* single value case */
+ auto &append_fn = Functions::append_to_list(base_type);
+ new_node = builder.insert_function(append_fn);
+ builder.insert_link(node->output(0), new_node->input(0));
+ builder.map_input(new_node->input(1), bnode, index);
+ }
+ else if (state == 1) {
+ /* list case */
+ auto &combine_fn = Functions::combine_lists(base_type);
+ new_node = builder.insert_function(combine_fn);
+ builder.insert_link(node->output(0), new_node->input(0));
+ builder.map_input(new_node->input(1), bnode, index);
+ }
+ else {
+ BLI_assert(false);
+ new_node = nullptr;
+ }
+ node = new_node;
+ index++;
+ }
+ RNA_END;
+
+ builder.map_output(node->output(0), bnode, 0);
+ }
+
void register_node_inserters(GraphInserters &inserters)
{
inserters.reg_node_function("fn_CombineVectorNode", Functions::combine_vector);
@@ -118,6 +163,7 @@ namespace FN { namespace DataFlowNodes {
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);
+ inserters.reg_node_inserter("fn_PackListNode", insert_pack_list_node);
}
} }
\ No newline at end of file
diff --git a/source/blender/functions/functions/lists.cpp b/source/blender/functions/functions/lists.cpp
index e41358e3885..6d539012758 100644
--- a/source/blender/functions/functions/lists.cpp
+++ b/source/blender/functions/functions/lists.cpp
@@ -8,6 +8,29 @@ namespace FN { namespace Functions {
using namespace Types;
+ template<typename T>
+ class CreateEmptyList : public TupleCallBody {
+ void call(Tuple &UNUSED(fn_in), Tuple &fn_out) const override
+ {
+ auto list = SharedList<T>::New();
+ fn_out.move_in(0, list);
+ }
+ };
+
+ template<typename T>
+ SharedFunction build_create_empty_list_function(
+ SharedType &base_type,
+ SharedType &list_type)
+ {
+ std::string name = "Create Empty " + base_type->name() + " List";
+ auto fn = SharedFunction::New(name, Signature({}, {
+ OutputParameter("List", list_type),
+ }));
+ fn->add_body(new CreateEmptyList<T>());
+ return fn;
+ }
+
+
template<typename T>
class AppendToList : public TupleCallBody {
void call(Tuple &fn_in, Tuple &fn_out) const override
@@ -113,6 +136,7 @@ namespace FN { namespace Functions {
using FunctionPerType = SmallMap<SharedType, SharedFunction>;
struct ListFunctions {
+ FunctionPerType m_create_empty;
FunctionPerType m_append;
FunctionPerType m_get_element;
FunctionPerType m_combine;
@@ -124,6 +148,9 @@ namespace FN { namespace Functions {
SharedType &base_type,
SharedType &list_type)
{
+ functions.m_create_empty.add(
+ base_type,
+ build_create_empty_list_function<T>(base_type, list_type));
functions.m_append.add(
base_type,
build_append_function<T>(base_type, list_type));
@@ -151,6 +178,13 @@ namespace FN { namespace Functions {
/* Access List Functions
*************************************/
+ SharedFunction &empty_list(SharedType &base_type)
+ {
+ FunctionPerType &functions = get_list_functions().m_create_empty;
+ BLI_assert(functions.contains(base_type));
+ return functions.lookup_ref(base_type);
+ }
+
SharedFunction &append_to_list(SharedType &base_type)
{
FunctionPerType &functions = get_list_functions().m_append;
diff --git a/source/blender/functions/functions/lists.hpp b/source/blender/functions/functions/lists.hpp
index 922f53b2af2..09a211f7e18 100644
--- a/source/blender/functions/functions/lists.hpp
+++ b/source/blender/functions/functions/lists.hpp
@@ -4,6 +4,7 @@
namespace FN { namespace Functions {
+ SharedFunction &empty_list(SharedType &base_type);
SharedFunction &append_to_list(SharedType &base_type);
SharedFunction &get_list_element(SharedType &base_type);
SharedFunction &combine_lists(SharedType &base_type);
More information about the Bf-blender-cvs
mailing list