[Bf-blender-cvs] [aa10876c62b] functions: vectorize surface hook nodes

Jacques Lucke noreply at git.blender.org
Wed Dec 11 12:19:06 CET 2019


Commit: aa10876c62b12e86dd3f599c6b59a850efe1c67c
Author: Jacques Lucke
Date:   Wed Dec 11 12:18:56 2019 +0100
Branches: functions
https://developer.blender.org/rBaa10876c62b12e86dd3f599c6b59a850efe1c67c

vectorize surface hook nodes

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

M	release/scripts/startup/nodes/function_nodes/object_mesh.py
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 358181e656a..7be0c3e4244 100644
--- a/release/scripts/startup/nodes/function_nodes/object_mesh.py
+++ b/release/scripts/startup/nodes/function_nodes/object_mesh.py
@@ -24,28 +24,35 @@ class ClosestLocationOnObjectNode(bpy.types.Node, FunctionNode):
     bl_idname = "fn_ClosestLocationOnObjectNode"
     bl_label = "Closest Location on Object"
 
-    def declaration(self, builder):
-        builder.fixed_input("object", "Object", "Object")
-        builder.fixed_input("position", "Position", "Vector")
-        builder.fixed_output("closest_hook", "Closest Hook", "Surface Hook")
+    use_list__object: NodeBuilder.VectorizedProperty()
+    use_list__position: NodeBuilder.VectorizedProperty()
+
+    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")
 
 
 class GetPositionOnSurfaceNode(bpy.types.Node, FunctionNode):
     bl_idname = "fn_GetPositionOnSurfaceNode"
     bl_label = "Get Position on Surface"
 
-    def declaration(self, builder):
-        builder.fixed_input("surface_hook", "Surface Hook", "Surface Hook")
-        builder.fixed_output("position", "Position", "Vector")
+    use_list__surface_hook: NodeBuilder.VectorizedProperty()
+
+    def declaration(self, builder: NodeBuilder):
+        builder.vectorized_input("surface_hook", "use_list__surface_hook", "Surface Hook", "Surface Hooks", "Surface Hook")
+        builder.vectorized_output("position", ["use_list__surface_hook"], "Position", "Positions", "Vector")
 
 
 class GetNormalOnSurfaceNode(bpy.types.Node, FunctionNode):
     bl_idname = "fn_GetNormalOnSurfaceNode"
     bl_label = "Get Normal on Surface"
 
+    use_list__surface_hook: NodeBuilder.VectorizedProperty()
+
     def declaration(self, builder):
-        builder.fixed_input("surface_hook", "Surface Hook", "Surface Hook")
-        builder.fixed_output("normal", "Normal", "Vector")
+        builder.vectorized_input("surface_hook", "use_list__surface_hook", "Surface Hook", "Surface Hooks", "Surface Hook")
+        builder.vectorized_output("normal", ["use_list__surface_hook"], "Normal", "Normals", "Vector")
 
 
 class GetWeightOnSurfaceNode(bpy.types.Node, FunctionNode):
@@ -57,10 +64,12 @@ class GetWeightOnSurfaceNode(bpy.types.Node, FunctionNode):
         default="Group",
     )
 
+    use_list__surface_hook: NodeBuilder.VectorizedProperty()
+
     def declaration(self, builder):
-        builder.fixed_input("surface_hook", "Surface Hook", "Surface Hook")
-        builder.fixed_output("weight", "Weight", "Float")
-    
+        builder.vectorized_input("surface_hook", "use_list__surface_hook", "Surface Hook", "Surface Hooks", "Surface Hook")
+        builder.vectorized_output("weight", ["use_list__surface_hook"], "Weight", "Weights", "Float")
+
     def draw(self, layout):
         layout.prop(self, "vertex_group_name", text="", icon="GROUP_VERTEX")
 
@@ -74,9 +83,11 @@ class GetImageColorOnSurfaceNode(bpy.types.Node, FunctionNode):
         type=bpy.types.Image,
     )
 
+    use_list__surface_hook: NodeBuilder.VectorizedProperty()
+
     def declaration(self, builder: NodeBuilder):
-        builder.fixed_input("surface_hook", "Surface Hook", "Surface Hook")
-        builder.fixed_output("color", "Color", "Color")
+        builder.vectorized_input("surface_hook", "use_list__surface_hook", "Surface Hook", "Surface Hooks", "Surface Hook")
+        builder.vectorized_output("color", ["use_list__surface_hook"], "Color", "Colors", "Color")
 
     def draw(self, layout):
-        layout.prop(self, "image", text="")
\ No newline at end of file
+        layout.prop(self, "image", text="")
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 b634e330f4e..efa3627ca6b 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
@@ -64,24 +64,28 @@ static void INSERT_object_mesh_info(VNodeMFNetworkBuilder &builder)
 
 static void INSERT_get_position_on_surface(VNodeMFNetworkBuilder &builder)
 {
-  builder.set_constructed_matching_fn<MF_GetPositionOnSurface>();
+  builder.set_vectorized_constructed_matching_fn<MF_GetPositionOnSurface>(
+      {"use_list__surface_hook"});
 }
 
 static void INSERT_get_normal_on_surface(VNodeMFNetworkBuilder &builder)
 {
-  builder.set_constructed_matching_fn<MF_GetNormalOnSurface>();
+  builder.set_vectorized_constructed_matching_fn<MF_GetNormalOnSurface>(
+      {"use_list__surface_hook"});
 }
 
 static void INSERT_get_weight_on_surface(VNodeMFNetworkBuilder &builder)
 {
   std::string group_name = builder.string_from_property("vertex_group_name");
-  builder.set_constructed_matching_fn<MF_GetWeightOnSurface>(std::move(group_name));
+  builder.set_vectorized_constructed_matching_fn<MF_GetWeightOnSurface>({"use_list__surface_hook"},
+                                                                        std::move(group_name));
 }
 
 static void INSERT_get_image_color_on_surface(VNodeMFNetworkBuilder &builder)
 {
   Image *image = (Image *)RNA_pointer_get(builder.rna(), "image").data;
-  builder.set_constructed_matching_fn<MF_GetImageColorOnSurface>(image);
+  builder.set_vectorized_constructed_matching_fn<MF_GetImageColorOnSurface>(
+      {"use_list__surface_hook"}, image);
 }
 
 static void INSERT_particle_is_in_group(VNodeMFNetworkBuilder &builder)
@@ -403,9 +407,10 @@ static void INSERT_get_particle_attribute(VNodeMFNetworkBuilder &builder)
   builder.set_constructed_matching_fn<MF_ParticleAttributes>(std::move(name), type);
 }
 
-static void INSERT_closest_location_on_object(VNodeMFNetworkBuilder &builder)
+static void INSERT_closest_surface_hook_on_object(VNodeMFNetworkBuilder &builder)
 {
-  builder.set_constructed_matching_fn<MF_ClosestSurfaceHookOnObject>();
+  builder.set_vectorized_constructed_matching_fn<MF_ClosestSurfaceHookOnObject>(
+      {"use_list__object", "use_list__position"});
 }
 
 static void INSERT_clamp_float(VNodeMFNetworkBuilder &builder)
@@ -466,7 +471,7 @@ void add_inlined_tree_node_mapping_info(VTreeMultiFunctionMappings &mappings)
   mappings.xnode_inserters.add_new("fn_ParticleInfoNode", INSERT_particle_info);
   mappings.xnode_inserters.add_new("fn_GetParticleAttributeNode", INSERT_get_particle_attribute);
   mappings.xnode_inserters.add_new("fn_ClosestLocationOnObjectNode",
-                                   INSERT_closest_location_on_object);
+                                   INSERT_closest_surface_hook_on_object);
   mappings.xnode_inserters.add_new("fn_MapRangeNode", INSERT_map_range);
   mappings.xnode_inserters.add_new("fn_FloatClampNode", INSERT_clamp_float);
   mappings.xnode_inserters.add_new("fn_RandomFloatNode", INSERT_random_float);



More information about the Bf-blender-cvs mailing list