[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