Commit: 5d8036c6759cca021e3617b9350250dd5addef66
Author: Jacques Lucke
Date: Wed Dec 11 15:50:06 2019 +0100
Branches: functions
https://developer.blender.org/rB5d8036c6759cca021e3617b9350250dd5addef66
access position and normal directly in Closest surface hook node
===================================================================
M release/scripts/startup/nodes/function_nodes/object_mesh.py
M
source/blender/functions/intern/inlined_tree_multi_function_network/builder.h
M
source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc
===================================================================
diff --git a/release/scripts/startup/nodes/function_nodes/object_mesh.py
b/release/scripts/startup/nodes/function_nodes/object_mesh.py
index 3c5864ec5d2..33b602f5232 100644
--- a/release/scripts/startup/nodes/function_nodes/object_mesh.py
+++ b/release/scripts/startup/nodes/function_nodes/object_mesh.py
@@ -30,7 +30,11 @@ class ClosestLocationOnObjectNode(bpy.types.Node,
FunctionNode):
def declaration(self, builder: NodeBuilder):
builder.vectorized_input("object", "use_list__object", "Object",
"Objects", "Object")
builder.vectorized_input("position", "use_list__position", "Position",
"Positions", "Vector")
- builder.vectorized_output("closest_hook", ["use_list__object",
"use_list__position"], "Closest Hook", "Closest Hooks", "Surface Hook")
+
+ vectorize_props = ["use_list__object", "use_list__position"]
+ builder.vectorized_output("closest_hook", vectorize_props, "Closest
Hook", "Closest Hooks", "Surface Hook")
+ builder.vectorized_output("closest_position", vectorize_props,
"Closest Position", "Closest Positions", "Vector")
+ builder.vectorized_output("closest_normal", vectorize_props, "Closest
Normal", "Closest Normals", "Vector")
class GetPositionOnSurfaceNode(bpy.types.Node, FunctionNode):
diff --git
a/source/blender/functions/intern/inlined_tree_multi_function_network/builder.h
b/source/blender/functions/intern/inlined_tree_multi_function_network/builder.h
index 746106da54e..061446e1561 100644
---
a/source/blender/functions/intern/inlined_tree_multi_function_network/builder.h
+++
b/source/blender/functions/intern/inlined_tree_multi_function_network/builder.h
@@ -382,7 +382,6 @@ class VNodeMFNetworkBuilder {
void set_matching_fn(const MultiFunction &fn);
- private:
const MultiFunction &get_vectorized_function(const MultiFunction
&base_function,
ArrayRef<const char *>
is_vectorized_prop_names);
};
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 52ba9d3b61e..0ead4e34143 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
@@ -408,8 +408,42 @@ static void
INSERT_get_particle_attribute(VNodeMFNetworkBuilder &builder)
static void INSERT_closest_surface_hook_on_object(VNodeMFNetworkBuilder
&builder)
{
-
builder.set_vectorized_constructed_matching_fn<MF_ClosestSurfaceHookOnObject>(
- {"use_list__object", "use_list__position"});
+ const MultiFunction &main_fn =
builder.construct_fn<MF_ClosestSurfaceHookOnObject>();
+ const MultiFunction &position_fn =
builder.construct_fn<MF_GetPositionOnSurface>();
+ const MultiFunction &normal_fn =
builder.construct_fn<MF_GetNormalOnSurface>();
+
+ const MultiFunction &vectorized_main_fn = builder.get_vectorized_function(
+ main_fn, {"use_list__object", "use_list__position"});
+
+ InlinedTreeMFNetworkBuilder &network_builder = builder.network_builder();
+
+ MFBuilderFunctionNode *main_node, *position_node, *normal_node;
+
+ if (&main_fn == &vectorized_main_fn) {
+ main_node = &network_builder.add_function(main_fn);
+ position_node = &network_builder.add_function(position_fn);
+ normal_node = &network_builder.add_function(normal_fn);
+ }
+ else {
+ std::array<bool, 1> input_is_vectorized = {true};
+ const MultiFunction &vectorized_position_fn =
builder.construct_fn<MF_SimpleVectorize>(
+ position_fn, input_is_vectorized);
+ const MultiFunction &vectorized_normal_fn =
builder.construct_fn<MF_SimpleVectorize>(
+ normal_fn, input_is_vectorized);
+
+ main_node = &network_builder.add_function(vectorized_main_fn);
+ position_node = &network_builder.add_function(vectorized_position_fn);
+ normal_node = &network_builder.add_function(vectorized_normal_fn);
+ }
+
+ network_builder.add_link(main_node->output(0), position_node->input(0));
+ network_builder.add_link(main_node->output(0), normal_node->input(0));
+
+ const XNode &xnode = builder.xnode();
+ network_builder.map_sockets(xnode.inputs(), main_node->inputs());
+ network_builder.map_sockets(xnode.output(0), main_node->output(0));
+ network_builder.map_sockets(xnode.output(1), position_node->output(0));
+ network_builder.map_sockets(xnode.output(2), normal_node->output(0));
}
static void INSERT_clamp_float(VNodeMFNetworkBuilder &builder)
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs