[Bf-blender-cvs] [f1dfadb3cbf] functions-experimental-refactor: initial MFContext usage

Jacques Lucke noreply at git.blender.org
Sun Nov 3 14:31:05 CET 2019


Commit: f1dfadb3cbfd48ffff37f30990748506eb3af217
Author: Jacques Lucke
Date:   Sun Nov 3 14:12:34 2019 +0100
Branches: functions-experimental-refactor
https://developer.blender.org/rBf1dfadb3cbfd48ffff37f30990748506eb3af217

initial MFContext usage

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

M	release/scripts/startup/nodes/function_nodes/object_mesh.py
M	source/blender/functions2/FN_multi_function_context.h
M	source/blender/functions2/intern/multi_functions/mixed.cc
M	source/blender/functions2/intern/multi_functions/mixed.h
M	source/blender/functions2/intern/vtree_multi_function_network/builder.h
M	source/blender/functions2/intern/vtree_multi_function_network/mappings_nodes.cc
M	source/blender/modifiers/intern/MOD_functiondeform_cxx.cc

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

diff --git a/release/scripts/startup/nodes/function_nodes/object_mesh.py b/release/scripts/startup/nodes/function_nodes/object_mesh.py
index 14dde09f618..5250e7ebbad 100644
--- a/release/scripts/startup/nodes/function_nodes/object_mesh.py
+++ b/release/scripts/startup/nodes/function_nodes/object_mesh.py
@@ -9,3 +9,11 @@ class ObjectMeshNode(bpy.types.Node, FunctionNode):
     def declaration(self, builder):
         builder.fixed_input("object", "Object", "Object")
         builder.fixed_output("vertex_locations", "Vertex Locations", "Vector List")
+
+
+class VertexInfo(bpy.types.Node, FunctionNode):
+    bl_idname = "fn_VertexInfoNode"
+    bl_label = "Vertex Info"
+
+    def declaration(self, builder):
+        builder.fixed_output("position", "Position", "Vector")
diff --git a/source/blender/functions2/FN_multi_function_context.h b/source/blender/functions2/FN_multi_function_context.h
index bbb940228d5..1036e35b364 100644
--- a/source/blender/functions2/FN_multi_function_context.h
+++ b/source/blender/functions2/FN_multi_function_context.h
@@ -1,9 +1,13 @@
 #ifndef __FN_MULTI_FUNCTION_CONTEXT_H__
 #define __FN_MULTI_FUNCTION_CONTEXT_H__
 
+#include "BLI_math_cxx.h"
+
 namespace FN {
 
 class MFContext {
+ public:
+  ArrayRef<BLI::float3> vertex_positions;
 };
 
 }  // namespace FN
diff --git a/source/blender/functions2/intern/multi_functions/mixed.cc b/source/blender/functions2/intern/multi_functions/mixed.cc
index 15f6ff3b7de..0e9fdb35624 100644
--- a/source/blender/functions2/intern/multi_functions/mixed.cc
+++ b/source/blender/functions2/intern/multi_functions/mixed.cc
@@ -324,4 +324,21 @@ void MF_SimpleVectorize::call(const MFMask &mask, MFParams &params, MFContext &c
   }
 }
 
+MF_ContextVertexPosition::MF_ContextVertexPosition()
+{
+  MFSignatureBuilder signature("Vertex Position");
+  signature.single_output<float3>("Position");
+  this->set_signature(signature);
+}
+
+void MF_ContextVertexPosition::call(const MFMask &mask, MFParams &params, MFContext &context) const
+{
+  MutableArrayRef<float3> positions = params.single_output<float3>(0, "Position");
+  ArrayRef<float3> context_positions = context.vertex_positions;
+
+  for (uint i : mask.indices()) {
+    positions[i] = context_positions[i];
+  }
+}
+
 }  // namespace FN
diff --git a/source/blender/functions2/intern/multi_functions/mixed.h b/source/blender/functions2/intern/multi_functions/mixed.h
index 4aaed4689d6..d6d3d0c5af6 100644
--- a/source/blender/functions2/intern/multi_functions/mixed.h
+++ b/source/blender/functions2/intern/multi_functions/mixed.h
@@ -112,4 +112,10 @@ class MF_SimpleVectorize final : public MultiFunction {
   void call(const MFMask &mask, MFParams &params, MFContext &context) const override;
 };
 
+class MF_ContextVertexPosition final : public MultiFunction {
+ public:
+  MF_ContextVertexPosition();
+  void call(const MFMask &mask, MFParams &params, MFContext &context) const override;
+};
+
 }  // namespace FN
diff --git a/source/blender/functions2/intern/vtree_multi_function_network/builder.h b/source/blender/functions2/intern/vtree_multi_function_network/builder.h
index 79ebda47fef..a54c1a8b7d5 100644
--- a/source/blender/functions2/intern/vtree_multi_function_network/builder.h
+++ b/source/blender/functions2/intern/vtree_multi_function_network/builder.h
@@ -230,7 +230,7 @@ class VTreeMFNetworkBuilder : BLI::NonCopyable, BLI::NonMovable {
 
   std::unique_ptr<VTreeMFNetwork> build()
   {
-    // m_builder->to_dot__clipboard();
+    m_builder->to_dot__clipboard();
 
     Array<int> socket_ids(m_vtree.socket_count(), -1);
     for (uint vsocket_id = 0; vsocket_id < m_vtree.socket_count(); vsocket_id++) {
diff --git a/source/blender/functions2/intern/vtree_multi_function_network/mappings_nodes.cc b/source/blender/functions2/intern/vtree_multi_function_network/mappings_nodes.cc
index c411a6e5e22..22b3987d175 100644
--- a/source/blender/functions2/intern/vtree_multi_function_network/mappings_nodes.cc
+++ b/source/blender/functions2/intern/vtree_multi_function_network/mappings_nodes.cc
@@ -136,6 +136,13 @@ static void INSERT_text_length(VTreeMFNetworkBuilder &builder, const VNode &vnod
   builder.add_function(fn, {0}, {1}, vnode);
 }
 
+static void INSERT_vertex_info(VTreeMFNetworkBuilder &builder, const VNode &vnode)
+{
+  const MultiFunction &fn = builder.allocate<FN::MF_ContextVertexPosition>(
+      "context vertex positions function");
+  builder.add_function(fn, {}, {0}, vnode);
+}
+
 void add_vtree_node_mapping_info(VTreeMultiFunctionMappings &mappings)
 {
   mappings.vnode_inserters.add_new("fn_FloatMathNode", INSERT_float_math);
@@ -147,6 +154,7 @@ void add_vtree_node_mapping_info(VTreeMultiFunctionMappings &mappings)
   mappings.vnode_inserters.add_new("fn_GetListElementNode", INSERT_get_list_element);
   mappings.vnode_inserters.add_new("fn_ObjectTransformsNode", INSERT_object_location);
   mappings.vnode_inserters.add_new("fn_TextLengthNode", INSERT_text_length);
+  mappings.vnode_inserters.add_new("fn_VertexInfoNode", INSERT_vertex_info);
 }
 
 };  // namespace FN
diff --git a/source/blender/modifiers/intern/MOD_functiondeform_cxx.cc b/source/blender/modifiers/intern/MOD_functiondeform_cxx.cc
index 2164430522e..4d1ca16a54d 100644
--- a/source/blender/modifiers/intern/MOD_functiondeform_cxx.cc
+++ b/source/blender/modifiers/intern/MOD_functiondeform_cxx.cc
@@ -60,6 +60,7 @@ void MOD_functiondeform_do(FunctionDeformModifierData *fdmd, float (*vertexCos)[
   params.add_single_output<float3>(output_vectors);
 
   MFContext context;
+  context.vertex_positions = ArrayRef<float3>((float3 *)vertexCos, numVerts);
   function.call(IndexRange(numVerts).as_array_ref(), params.build(), context);
 
   memcpy(vertexCos, output_vectors.begin(), output_vectors.size() * sizeof(float3));



More information about the Bf-blender-cvs mailing list