[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