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);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to