[Bf-blender-cvs] [34a66dea4ee] functions-experimental-refactor: Combine Vector multi function

Jacques Lucke noreply at git.blender.org
Tue Oct 15 15:57:43 CEST 2019


Commit: 34a66dea4ee795e9ffb58afde2809f877d45adcd
Author: Jacques Lucke
Date:   Tue Oct 15 15:32:06 2019 +0200
Branches: functions-experimental-refactor
https://developer.blender.org/rB34a66dea4ee795e9ffb58afde2809f877d45adcd

Combine Vector multi function

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

M	release/scripts/startup/bl_operators/modifiers.py
M	source/blender/blenkernel/BKE_multi_functions.h
M	source/blender/blenkernel/intern/multi_functions.cc
M	source/blender/modifiers/intern/MOD_functiondeform_cxx.cc

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

diff --git a/release/scripts/startup/bl_operators/modifiers.py b/release/scripts/startup/bl_operators/modifiers.py
index 9f0b2df3ee7..5b19d9e4a96 100644
--- a/release/scripts/startup/bl_operators/modifiers.py
+++ b/release/scripts/startup/bl_operators/modifiers.py
@@ -25,8 +25,8 @@ class NewDeformationFunction(bpy.types.Operator, ModifierOperator):
         from nodes.node_operators import new_function_tree
         tree = new_function_tree("Deformation Function", [
             ("Vector", "Old Position"),
-            ("Integer", "Vertex Seed"),
-            ("Float", "Control")
+            ("Float", "Control 1"),
+            ("Integer", "Control 2")
         ], [
             ("Vector", "New Position"),
         ])
diff --git a/source/blender/blenkernel/BKE_multi_functions.h b/source/blender/blenkernel/BKE_multi_functions.h
index bf61e8cb3e5..75ceef1cb97 100644
--- a/source/blender/blenkernel/BKE_multi_functions.h
+++ b/source/blender/blenkernel/BKE_multi_functions.h
@@ -17,6 +17,12 @@ class MultiFunction_AddFloat3s final : public MultiFunction {
   void call(ArrayRef<uint> mask_indices, Params &params) const override;
 };
 
+class MultiFunction_CombineVector final : public MultiFunction {
+ public:
+  MultiFunction_CombineVector();
+  void call(ArrayRef<uint> mask_indices, Params &params) const override;
+};
+
 class MultiFunction_VectorDistance final : public MultiFunction {
  public:
   MultiFunction_VectorDistance();
diff --git a/source/blender/blenkernel/intern/multi_functions.cc b/source/blender/blenkernel/intern/multi_functions.cc
index 82d5892f80a..53a926147e7 100644
--- a/source/blender/blenkernel/intern/multi_functions.cc
+++ b/source/blender/blenkernel/intern/multi_functions.cc
@@ -52,6 +52,28 @@ void MultiFunction_AddFloat3s::call(ArrayRef<uint> mask_indices, Params &params)
   }
 }
 
+MultiFunction_CombineVector::MultiFunction_CombineVector()
+{
+  SignatureBuilder signature;
+  signature.readonly_single_input<float>("X");
+  signature.readonly_single_input<float>("Y");
+  signature.readonly_single_input<float>("Z");
+  signature.single_output<float3>("Vector");
+  this->set_signature(signature);
+}
+
+void MultiFunction_CombineVector::call(ArrayRef<uint> mask_indices, Params &params) const
+{
+  auto x = params.readonly_single_input<float>(0, "X");
+  auto y = params.readonly_single_input<float>(1, "Y");
+  auto z = params.readonly_single_input<float>(2, "Z");
+  auto vector = params.single_output<float3>(3, "Vector");
+
+  for (uint i : mask_indices) {
+    vector[i] = {x[i], y[i], z[i]};
+  }
+}
+
 MultiFunction_VectorDistance::MultiFunction_VectorDistance()
 {
   SignatureBuilder signature;
diff --git a/source/blender/modifiers/intern/MOD_functiondeform_cxx.cc b/source/blender/modifiers/intern/MOD_functiondeform_cxx.cc
index 14582af0bb8..991ec85670f 100644
--- a/source/blender/modifiers/intern/MOD_functiondeform_cxx.cc
+++ b/source/blender/modifiers/intern/MOD_functiondeform_cxx.cc
@@ -47,6 +47,9 @@ static std::unique_ptr<BKE::MultiFunction> get_multi_function_by_node(VirtualNod
   if (idname == "fn_VectorMathNode") {
     return BLI::make_unique<BKE::MultiFunction_AddFloat3s>();
   }
+  else if (idname == "fn_CombineVectorNode") {
+    return BLI::make_unique<BKE::MultiFunction_CombineVector>();
+  }
   else {
     BLI_assert(false);
     return {};



More information about the Bf-blender-cvs mailing list