[Bf-blender-cvs] [7fa6389d62f] functions: Get List Element and Append to List node

Jacques Lucke noreply at git.blender.org
Sun Mar 10 16:28:45 CET 2019


Commit: 7fa6389d62f32291036efe8383d0383126231335
Author: Jacques Lucke
Date:   Sun Mar 10 15:38:11 2019 +0100
Branches: functions
https://developer.blender.org/rB7fa6389d62f32291036efe8383d0383126231335

Get List Element and Append to List node

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

A	release/scripts/startup/function_nodes/nodes/append_to_list.py
A	release/scripts/startup/function_nodes/nodes/get_list_element.py
M	release/scripts/startup/function_nodes/sockets.py
M	source/blender/functions/frontends/data_flow_nodes/test_nodes.cpp
M	source/blender/functions/functions/lists.cpp

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

diff --git a/release/scripts/startup/function_nodes/nodes/append_to_list.py b/release/scripts/startup/function_nodes/nodes/append_to_list.py
new file mode 100644
index 00000000000..8a8031d755c
--- /dev/null
+++ b/release/scripts/startup/function_nodes/nodes/append_to_list.py
@@ -0,0 +1,14 @@
+import bpy
+from .. base import FunctionNode
+
+class AppendToListNode(bpy.types.Node, FunctionNode):
+    bl_idname = "fn_AppendToListNode"
+    bl_label = "Append to List"
+
+    def get_sockets(self):
+        return [
+            ("fn_FloatListSocket", "List"),
+            ("fn_FloatSocket", "Value"),
+        ], [
+            ("fn_FloatListSocket", "List"),
+        ]
\ No newline at end of file
diff --git a/release/scripts/startup/function_nodes/nodes/get_list_element.py b/release/scripts/startup/function_nodes/nodes/get_list_element.py
new file mode 100644
index 00000000000..ea64a6e7792
--- /dev/null
+++ b/release/scripts/startup/function_nodes/nodes/get_list_element.py
@@ -0,0 +1,15 @@
+import bpy
+from .. base import FunctionNode
+
+class GetListElementNode(bpy.types.Node, FunctionNode):
+    bl_idname = "fn_GetListElementNode"
+    bl_label = "Get List Element"
+
+    def get_sockets(self):
+        return [
+            ("fn_FloatListSocket", "List"),
+            ("fn_IntegerSocket", "Index"),
+            ("fn_FloatSocket", "Fallback"),
+        ], [
+            ("fn_FloatSocket", "Value"),
+        ]
\ No newline at end of file
diff --git a/release/scripts/startup/function_nodes/sockets.py b/release/scripts/startup/function_nodes/sockets.py
index 3d6ab91e94d..d019515b3d0 100644
--- a/release/scripts/startup/function_nodes/sockets.py
+++ b/release/scripts/startup/function_nodes/sockets.py
@@ -41,3 +41,8 @@ class VectorSocket(bpy.types.NodeSocket, DataSocket):
 
     def draw_property(self, layout, node, text):
         layout.column().prop(self, "value", text=text)
+
+class FloatListSocket(bpy.types.NodeSocket, DataSocket):
+    bl_idname = "fn_FloatListSocket"
+    bl_label = "Float List Socket"
+    color = (0, 0.3, 0.5, 0.5)
\ No newline at end of file
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 540b470842a..a2e113553ed 100644
--- a/source/blender/functions/frontends/data_flow_nodes/test_nodes.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/test_nodes.cpp
@@ -71,6 +71,26 @@ namespace FN { namespace DataFlowNodes {
 		builder.map_output(min_node->output(0), bnode, 0);
 	}
 
+	static void insert_append_list_node(
+		Builder &builder,
+		const BuilderContext UNUSED(ctx),
+		bNode *bnode)
+	{
+		SharedFunction &append_float = Functions::append_float();
+		Node *node = builder.insert_function(append_float);
+		builder.map_sockets(node, bnode);
+	}
+
+	static void insert_get_list_element_node(
+		Builder &builder,
+		const BuilderContext UNUSED(ctx),
+		bNode *bnode)
+	{
+		SharedFunction &get_float = Functions::get_float_list_element();
+		Node *node = builder.insert_function(get_float);
+		builder.map_sockets(node, bnode);
+	}
+
 	void register_node_inserters(GraphInserters &inserters)
 	{
 		inserters.reg_node_function("fn_CombineVectorNode", Functions::combine_vector);
@@ -78,9 +98,12 @@ namespace FN { namespace DataFlowNodes {
 		inserters.reg_node_function("fn_VectorDistanceNode", Functions::separate_vector);
 		inserters.reg_node_function("fn_RandomNumberNode", Functions::random_number);
 		inserters.reg_node_function("fn_MapRangeNode", Functions::map_range);
+
 		inserters.reg_node_inserter("fn_ObjectTransformsNode", insert_object_transforms_node);
 		inserters.reg_node_inserter("fn_FloatMathNode", insert_float_math_node);
 		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);
 	}
 
 } }
\ No newline at end of file
diff --git a/source/blender/functions/functions/lists.cpp b/source/blender/functions/functions/lists.cpp
index aff411ad4ca..d8f50a03659 100644
--- a/source/blender/functions/functions/lists.cpp
+++ b/source/blender/functions/functions/lists.cpp
@@ -30,12 +30,12 @@ namespace FN { namespace Functions {
 			int32_t index = fn_in.get<int32_t>(1);
 
 			if (index >= 0 && index < list->size()) {
-				List<T> *list_ = list.ptr();
+				const List<T> *list_ = list.ptr();
 				T value = (*list_)[index];
 				fn_out.move_in(0, value);
 			}
 			else {
-				T fallback = fn_in.relocate_out<T>(0);
+				T fallback = fn_in.relocate_out<T>(2);
 				fn_out.move_in(0, fallback);
 			}
 		}



More information about the Bf-blender-cvs mailing list