[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 ¶ms, 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 ¶ms, 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 ¶ms, MFContext &context) const override;
};
+class MF_ContextVertexPosition final : public MultiFunction {
+ public:
+ MF_ContextVertexPosition();
+ void call(const MFMask &mask, MFParams ¶ms, 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