[Bf-blender-cvs] [e8187d58e59] functions: Map Range node
Jacques Lucke
noreply at git.blender.org
Mon Feb 25 10:30:52 CET 2019
Commit: e8187d58e597ee60e17ac3fbff67b0b61d3c62c7
Author: Jacques Lucke
Date: Fri Feb 22 15:09:47 2019 +0100
Branches: functions
https://developer.blender.org/rBe8187d58e597ee60e17ac3fbff67b0b61d3c62c7
Map Range node
===================================================================
M release/scripts/startup/function_nodes/menu.py
M release/scripts/startup/function_nodes/nodes/__init__.py
M release/scripts/startup/function_nodes/nodes/float_math.py
A release/scripts/startup/function_nodes/nodes/map_range.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 ccc33a89e4b..47fc6e8bdc6 100644
--- a/release/scripts/startup/function_nodes/menu.py
+++ b/release/scripts/startup/function_nodes/menu.py
@@ -18,6 +18,7 @@ def draw_menu(self, context):
insert_node(layout, "fn_VectorDistanceNode", "Vector Distance")
insert_node(layout, "fn_ClampNode", "Clamp")
insert_node(layout, "fn_RandomNumberNode", "Random Number")
+ insert_node(layout, "fn_MapRangeNode", "Map Range")
insert_node(layout, "fn_ObjectTransformsNode", "Object Transforms")
def insert_node(layout, type, text, settings = {}, icon = "NONE"):
diff --git a/release/scripts/startup/function_nodes/nodes/__init__.py b/release/scripts/startup/function_nodes/nodes/__init__.py
index 67de0140269..56ead29f394 100644
--- a/release/scripts/startup/function_nodes/nodes/__init__.py
+++ b/release/scripts/startup/function_nodes/nodes/__init__.py
@@ -9,4 +9,5 @@ from . import (
vector_distance,
clamp,
random_number,
+ map_range,
)
\ 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
index d5c3c149e89..f6b506529cb 100644
--- a/release/scripts/startup/function_nodes/nodes/float_math.py
+++ b/release/scripts/startup/function_nodes/nodes/float_math.py
@@ -15,7 +15,8 @@ class FloatMathNode(bpy.types.Node, FunctionNode):
operation: EnumProperty(
name="Operation",
- items=operation_items)
+ items=operation_items,
+ )
def get_sockets(self):
return [
diff --git a/release/scripts/startup/function_nodes/nodes/map_range.py b/release/scripts/startup/function_nodes/nodes/map_range.py
new file mode 100644
index 00000000000..2a16c3691d2
--- /dev/null
+++ b/release/scripts/startup/function_nodes/nodes/map_range.py
@@ -0,0 +1,20 @@
+import bpy
+from bpy.props import *
+from .. base import FunctionNode
+
+class MapRangeNode(bpy.types.Node, FunctionNode):
+ bl_idname = "fn_MapRangeNode"
+ bl_label = "Map Rante"
+
+ def get_sockets(self):
+ return [
+ ("fn_FloatSocket", "Value"),
+ ("fn_FloatSocket", "From Min"),
+ ("fn_FloatSocket", "From Max"),
+ ("fn_FloatSocket", "To Min"),
+ ("fn_FloatSocket", "To Max"),
+ ], [
+ ("fn_FloatSocket", "Value"),
+ ]
+
+bpy.utils.register_class(MapRangeNode)
\ 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 b77fa5ca7d9..7f64e6421fc 100644
--- a/source/blender/functions/nodes/test_nodes.cpp
+++ b/source/blender/functions/nodes/test_nodes.cpp
@@ -97,6 +97,32 @@ namespace FN { namespace Nodes {
}
};
+ class MapRange : public TupleCallBody {
+ void call(const Tuple &fn_in, Tuple &fn_out) const override
+ {
+ float value = fn_in.get<float>(0);
+ float from_min = fn_in.get<float>(1);
+ float from_max = fn_in.get<float>(2);
+ float to_min = fn_in.get<float>(3);
+ float to_max = fn_in.get<float>(4);
+
+ float from_range = from_max - from_min;
+ float to_range = to_max - to_min;
+
+ float result;
+ if (from_range == 0) {
+ result = to_min;
+ }
+ else {
+ float t = (value - from_min) / from_range;
+ CLAMP(t, 0.0f, 1.0f);
+ result = t * to_range + to_min;
+ }
+
+ fn_out.set<float>(0, result);
+ }
+ };
+
class ObjectTransforms : public TupleCallBody {
private:
Object *m_object;
@@ -212,6 +238,21 @@ namespace FN { namespace Nodes {
return fn;
}
+ LAZY_INIT_REF_STATIC__NO_ARG(SharedFunction, get_map_range_function)
+ {
+ auto fn = SharedFunction::New("Map Range", Signature({
+ InputParameter("Value", get_float_type()),
+ InputParameter("From Min", get_float_type()),
+ InputParameter("From Max", get_float_type()),
+ InputParameter("To Min", get_float_type()),
+ InputParameter("To Max", get_float_type()),
+ }, {
+ OutputParameter("Value", get_float_type()),
+ }));
+ fn->add_body(new MapRange());
+ return fn;
+ }
+
static void insert_object_transforms_node(
bNodeTree *btree,
bNode *bnode,
@@ -284,6 +325,7 @@ namespace FN { namespace Nodes {
register_node_function_getter__no_arg("fn_SeparateVectorNode", get_separate_vector_function);
register_node_function_getter__no_arg("fn_VectorDistanceNode", get_vector_distance_function);
register_node_function_getter__no_arg("fn_RandomNumberNode", get_random_number_function);
+ register_node_function_getter__no_arg("fn_MapRangeNode", get_map_range_function);
register_node_inserter("fn_ObjectTransformsNode", insert_object_transforms_node);
register_node_inserter("fn_FloatMathNode", insert_float_math_node);
register_node_inserter("fn_ClampNode", insert_clamp_node);
More information about the Bf-blender-cvs
mailing list