[Bf-blender-cvs] [fa306a3c4a6] functions: more generic float math node

Jacques Lucke noreply at git.blender.org
Wed Feb 20 17:21:23 CET 2019


Commit: fa306a3c4a6d8e930fbe9603abe45b66a6757483
Author: Jacques Lucke
Date:   Wed Feb 20 15:25:04 2019 +0100
Branches: functions
https://developer.blender.org/rBfa306a3c4a6d8e930fbe9603abe45b66a6757483

more generic float math node

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

M	release/scripts/startup/function_nodes/menu.py
M	release/scripts/startup/function_nodes/nodes/__init__.py
D	release/scripts/startup/function_nodes/nodes/add_floats.py
A	release/scripts/startup/function_nodes/nodes/float_math.py
M	source/blender/functions/nodes/test_nodes.cpp

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

diff --git a/release/scripts/startup/function_nodes/menu.py b/release/scripts/startup/function_nodes/menu.py
index d588a959264..bdeb40c0020 100644
--- a/release/scripts/startup/function_nodes/menu.py
+++ b/release/scripts/startup/function_nodes/menu.py
@@ -12,7 +12,7 @@ def draw_menu(self, context):
     insert_node(layout, "fn_FunctionInputNode", "Function Input")
     insert_node(layout, "fn_FunctionOutputNode", "Function Output")
     layout.separator()
-    insert_node(layout, "fn_AddFloatsNode", "Add Floats")
+    insert_node(layout, "fn_FloatMathNode", "Float Math")
     insert_node(layout, "fn_CombineVectorNode", "Combine Vector")
     insert_node(layout, "fn_SeparateVectorNode", "Separate Vector")
     insert_node(layout, "fn_ObjectTransformsNode", "Object Transforms")
diff --git a/release/scripts/startup/function_nodes/nodes/__init__.py b/release/scripts/startup/function_nodes/nodes/__init__.py
index bd1fcec971d..948fb549c2f 100644
--- a/release/scripts/startup/function_nodes/nodes/__init__.py
+++ b/release/scripts/startup/function_nodes/nodes/__init__.py
@@ -2,7 +2,7 @@ from . import (
     function_input,
     function_output,
 
-    add_floats,
+    float_math,
     combine_vector,
     separate_vector,
     object_transforms,
diff --git a/release/scripts/startup/function_nodes/nodes/add_floats.py b/release/scripts/startup/function_nodes/nodes/add_floats.py
deleted file mode 100644
index f6b83cbb13b..00000000000
--- a/release/scripts/startup/function_nodes/nodes/add_floats.py
+++ /dev/null
@@ -1,16 +0,0 @@
-import bpy
-from .. base import FunctionNode
-
-class AddFloatsNode(bpy.types.Node, FunctionNode):
-    bl_idname = "fn_AddFloatsNode"
-    bl_label = "Add Floats"
-
-    def get_sockets(self):
-        return [
-            ("fn_FloatSocket", "A"),
-            ("fn_FloatSocket", "B"),
-        ], [
-            ("fn_FloatSocket", "Result"),
-        ]
-
-bpy.utils.register_class(AddFloatsNode)
\ No newline at end of file
diff --git a/release/scripts/startup/function_nodes/nodes/float_math.py b/release/scripts/startup/function_nodes/nodes/float_math.py
new file mode 100644
index 00000000000..586bbb04cf6
--- /dev/null
+++ b/release/scripts/startup/function_nodes/nodes/float_math.py
@@ -0,0 +1,29 @@
+import bpy
+from bpy.props import *
+from .. base import FunctionNode
+
+operation_items = [
+    ("ADD", "Add", "", "", 1),
+    ("MULTIPLY", "Multiply", "", "", 2),
+]
+
+class FloatMathNode(bpy.types.Node, FunctionNode):
+    bl_idname = "fn_FloatMathNode"
+    bl_label = "Float Math"
+
+    operation = EnumProperty(
+        name="Operation",
+        items=operation_items)
+
+    def get_sockets(self):
+        return [
+            ("fn_FloatSocket", "A"),
+            ("fn_FloatSocket", "B"),
+        ], [
+            ("fn_FloatSocket", "Result"),
+        ]
+
+    def draw(self, layout):
+        layout.prop(self, "operation", text="")
+
+bpy.utils.register_class(FloatMathNode)
\ No newline at end of file
diff --git a/source/blender/functions/nodes/test_nodes.cpp b/source/blender/functions/nodes/test_nodes.cpp
index 09553099f74..4ebc206e59f 100644
--- a/source/blender/functions/nodes/test_nodes.cpp
+++ b/source/blender/functions/nodes/test_nodes.cpp
@@ -36,6 +36,15 @@ namespace FN { namespace Nodes {
 		}
 	};
 
+	class MultiplyFloats : public FN::TupleCallBody {
+		void call(const FN::Tuple &fn_in, FN::Tuple &fn_out) const override
+		{
+			float a = fn_in.get<float>(0);
+			float b = fn_in.get<float>(1);
+			fn_out.set<float>(0, a * b);
+		}
+	};
+
 	class ObjectTransforms : public FN::TupleCallBody {
 	private:
 		Object *m_object;
@@ -99,6 +108,18 @@ namespace FN { namespace Nodes {
 		return fn;
 	}
 
+	LAZY_INIT_REF_STATIC__NO_ARG(SharedFunction, get_multiply_floats_function)
+	{
+		auto fn = SharedFunction::New("Multiply Floats", Signature({
+			InputParameter("A", get_float_type()),
+			InputParameter("B", get_float_type()),
+		}, {
+			OutputParameter("Vector", get_float_type()),
+		}));
+		fn->add_body(new MultiplyFloats());
+		return fn;
+	}
+
 	static void insert_object_transforms_node(
 		bNodeTree *btree,
 		bNode *bnode,
@@ -117,12 +138,39 @@ namespace FN { namespace Nodes {
 		map_node_sockets(socket_map, bnode, node);
 	}
 
+	static SharedFunction &get_float_math_function(int operation)
+	{
+		switch (operation)
+		{
+			case 1: return get_add_floats_function();
+			case 2: return get_multiply_floats_function();
+			default:
+				BLI_assert(false);
+				return *(SharedFunction *)nullptr;
+		}
+	}
+
+	static void insert_float_math_node(
+		bNodeTree *btree,
+		bNode *bnode,
+		SharedDataFlowGraph &graph,
+		SocketMap &socket_map)
+	{
+		PointerRNA ptr;
+		RNA_pointer_create(&btree->id, &RNA_Node, bnode, &ptr);
+		int operation = RNA_enum_get(&ptr, "operation");
+
+		SharedFunction &fn = get_float_math_function(operation);
+		const Node *node = graph->insert(fn);
+		map_node_sockets(socket_map, bnode, node);
+	}
+
 	void initialize_node_inserters()
 	{
-		register_node_function_getter__no_arg("fn_AddFloatsNode", get_add_floats_function);
 		register_node_function_getter__no_arg("fn_CombineVectorNode", get_combine_vector_function);
 		register_node_function_getter__no_arg("fn_SeparateVectorNode", get_separate_vector_function);
 		register_node_inserter("fn_ObjectTransformsNode", insert_object_transforms_node);
+		register_node_inserter("fn_FloatMathNode", insert_float_math_node);
 	}
 
 } }
\ No newline at end of file



More information about the Bf-blender-cvs mailing list