[Bf-blender-cvs] [68b8979137e] functions: new Vector from Value node

Jacques Lucke noreply at git.blender.org
Wed Dec 18 13:53:44 CET 2019


Commit: 68b8979137ef252d4c25b2c8ecb3ec3cdc396559
Author: Jacques Lucke
Date:   Wed Dec 18 12:39:02 2019 +0100
Branches: functions
https://developer.blender.org/rB68b8979137ef252d4c25b2c8ecb3ec3cdc396559

new Vector from Value node

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

M	release/scripts/startup/nodes/function_nodes/vector.py
M	source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc
M	source/blender/functions/intern/multi_functions/mixed.cc
M	source/blender/functions/intern/multi_functions/mixed.h

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

diff --git a/release/scripts/startup/nodes/function_nodes/vector.py b/release/scripts/startup/nodes/function_nodes/vector.py
index 70ccc055964..34c99a0d333 100644
--- a/release/scripts/startup/nodes/function_nodes/vector.py
+++ b/release/scripts/startup/nodes/function_nodes/vector.py
@@ -4,6 +4,17 @@ from .. base import FunctionNode
 from .. node_builder import NodeBuilder
 
 
+class VectorFromValueNode(bpy.types.Node, FunctionNode):
+    bl_idname = "fn_VectorFromValueNode"
+    bl_label = "Vector from Value"
+
+    use_list__value: NodeBuilder.VectorizedProperty()
+
+    def declaration(self, builder: NodeBuilder):
+        builder.vectorized_input("value", "use_list__value", "Value", "Values", "Float")
+        builder.vectorized_output("vector", ["use_list__value"], "Vector", "Vectors", "Vector")
+
+
 class CombineVectorNode(bpy.types.Node, FunctionNode):
     bl_idname = "fn_CombineVectorNode"
     bl_label = "Combine Vector"
diff --git a/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc b/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc
index 03296564076..a77b90bf9a8 100644
--- a/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc
+++ b/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc
@@ -33,6 +33,11 @@ static void INSERT_separate_vector(VNodeMFNetworkBuilder &builder)
   builder.set_vectorized_constructed_matching_fn<MF_SeparateVector>({"use_list__vector"});
 }
 
+static void INSERT_vector_from_value(VNodeMFNetworkBuilder &builder)
+{
+  builder.set_vectorized_constructed_matching_fn<MF_VectorFromValue>({"use_list__value"});
+}
+
 static void INSERT_list_length(VNodeMFNetworkBuilder &builder)
 {
   const CPPType &type = builder.cpp_type_from_property("active_type");
@@ -529,6 +534,7 @@ void add_inlined_tree_node_mapping_info(VTreeMultiFunctionMappings &mappings)
   mappings.xnode_inserters.add_new("fn_SeparateColorNode", INSERT_separate_color);
   mappings.xnode_inserters.add_new("fn_CombineVectorNode", INSERT_combine_vector);
   mappings.xnode_inserters.add_new("fn_SeparateVectorNode", INSERT_separate_vector);
+  mappings.xnode_inserters.add_new("fn_VectorFromValueNode", INSERT_vector_from_value);
   mappings.xnode_inserters.add_new("fn_SwitchNode", INSERT_switch);
   mappings.xnode_inserters.add_new("fn_SelectNode", INSERT_select);
   mappings.xnode_inserters.add_new("fn_ListLengthNode", INSERT_list_length);
diff --git a/source/blender/functions/intern/multi_functions/mixed.cc b/source/blender/functions/intern/multi_functions/mixed.cc
index 6ee1684001b..bef1d2bed5c 100644
--- a/source/blender/functions/intern/multi_functions/mixed.cc
+++ b/source/blender/functions/intern/multi_functions/mixed.cc
@@ -132,6 +132,24 @@ void MF_SeparateVector::call(MFMask mask, MFParams params, MFContext UNUSED(cont
   }
 }
 
+MF_VectorFromValue::MF_VectorFromValue()
+{
+  MFSignatureBuilder signature = this->get_builder("Vector from Value");
+  signature.single_input<float>("Value");
+  signature.single_output<float3>("Vector");
+}
+
+void MF_VectorFromValue::call(MFMask mask, MFParams params, MFContext UNUSED(context)) const
+{
+  VirtualListRef<float> values = params.readonly_single_input<float>(0, "Value");
+  MutableArrayRef<float3> r_vectors = params.uninitialized_single_output<float3>(1, "Vector");
+
+  for (uint i : mask.indices()) {
+    float value = values[i];
+    r_vectors[i] = {value, value, value};
+  }
+}
+
 MF_FloatArraySum::MF_FloatArraySum()
 {
   MFSignatureBuilder signature = this->get_builder("Float Array Sum");
diff --git a/source/blender/functions/intern/multi_functions/mixed.h b/source/blender/functions/intern/multi_functions/mixed.h
index 89b73faf634..479f1592fd1 100644
--- a/source/blender/functions/intern/multi_functions/mixed.h
+++ b/source/blender/functions/intern/multi_functions/mixed.h
@@ -30,6 +30,12 @@ class MF_SeparateVector final : public MultiFunction {
   void call(MFMask mask, MFParams params, MFContext context) const override;
 };
 
+class MF_VectorFromValue final : public MultiFunction {
+ public:
+  MF_VectorFromValue();
+  void call(MFMask mask, MFParams params, MFContext context) const override;
+};
+
 class MF_FloatArraySum final : public MultiFunction {
  public:
   MF_FloatArraySum();



More information about the Bf-blender-cvs mailing list