[Bf-blender-cvs] [0f20476116e] soc-2021-porting-modifiers-to-nodes-merge-by-distance: merged master and updated the node to fields.

Fabian Schempp noreply at git.blender.org
Fri Sep 24 23:59:48 CEST 2021


Commit: 0f20476116e3e8407ff120984c209b4e28803875
Author: Fabian Schempp
Date:   Fri Sep 24 23:59:31 2021 +0200
Branches: soc-2021-porting-modifiers-to-nodes-merge-by-distance
https://developer.blender.org/rB0f20476116e3e8407ff120984c209b4e28803875

merged master and updated the node to fields.

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

M	source/blender/makesrna/intern/rna_modifier.c
M	source/blender/makesrna/intern/rna_nodetree.c
M	source/blender/nodes/geometry/nodes/node_geo_merge_by_distance.cc

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

diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index d0b6ebec52e..133558d39bf 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -6172,7 +6172,7 @@ static void rna_def_modifier_laplaciandeform(BlenderRNA *brna)
   RNA_def_property_update(prop, 0, "rna_Modifier_update");
 }
 
-const EnumPropertyItem rna_enum_weld_mode_items[] = {
+const EnumPropertyItem rna_enum_modifier_weld_mode_items[] = {
     {0, "ALL", 0, "All", "Full merge by distance"},
     {1, "CONNECTED", 0, "Connected", "Only merge along the edges"},
     {0, NULL, 0, NULL, NULL},
@@ -6191,7 +6191,7 @@ static void rna_def_modifier_weld(BlenderRNA *brna)
   RNA_define_lib_overridable(true);
 
   prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
-  RNA_def_property_enum_items(prop, rna_enum_weld_mode_items);
+  RNA_def_property_enum_items(prop, rna_enum_modifier_weld_mode_items);
   RNA_def_property_ui_text(prop, "Mode", "Mode defines the merge rule");
   RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index e9f8b46dd59..bd4f5daa87b 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -10398,13 +10398,19 @@ static void def_geo_attribute_capture(StructRNA *srna)
   RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
 }
 
+const EnumPropertyItem rna_enum_geometry_nodes_weld_mode_items[] = {
+    {0, "ALL", 0, "All", "Full merge by distance"},
+    {1, "CONNECTED", 0, "Connected", "Only merge along the edges"},
+    {0, NULL, 0, NULL, NULL},
+};
+
 static void def_geo_merge_by_distance(StructRNA *srna)
 {
   PropertyRNA *prop;
 
   prop = RNA_def_property(srna, "merge_mode", PROP_ENUM, PROP_NONE);
   RNA_def_property_enum_sdna(prop, NULL, "custom1");
-  RNA_def_property_enum_items(prop, rna_enum_weld_mode_items);
+  RNA_def_property_enum_items(prop, rna_enum_geometry_nodes_weld_mode_items);
   RNA_def_property_ui_text(prop, "Mode", "Mode defines the merge rule");
   RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
 }
diff --git a/source/blender/nodes/geometry/nodes/node_geo_merge_by_distance.cc b/source/blender/nodes/geometry/nodes/node_geo_merge_by_distance.cc
index 500471637b3..710d9beea2d 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_merge_by_distance.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_merge_by_distance.cc
@@ -19,6 +19,7 @@
 #include "BLI_float3.hh"
 #include "BLI_span.hh"
 
+#include "DNA_mesh_types.h"
 #include "DNA_pointcloud_types.h"
 
 #include "GEO_mesh_merge_by_distance.h"
@@ -34,17 +35,15 @@ using blender::float3;
 using blender::Span;
 using blender::Vector;
 
-static bNodeSocketTemplate geo_node_merge_by_distance_in[] = {
-    {SOCK_GEOMETRY, N_("Geometry")},
-    {SOCK_FLOAT, N_("Distance"), 0.0f, 0, 0, 0, 0, 10000.0f, PROP_DISTANCE},
-    {SOCK_STRING, N_("Selection")},
-    {-1, ""},
-};
+namespace blender::nodes {
+static void geo_node_merge_by_distance_declare(NodeDeclarationBuilder &b)
+{
+  b.add_input<decl::Geometry>("Geometry");
+  b.add_input<decl::Float>("Distance").default_value(0.0f).min(0.0f).max(10000.0f);
+  b.add_input<decl::Bool>("Selection").default_value(true).hide_value().supports_field();
 
-static bNodeSocketTemplate geo_node_merge_by_distance_out[] = {
-    {SOCK_GEOMETRY, N_("Geometry")},
-    {-1, ""},
-};
+  b.add_output<decl::Geometry>("Geometry");
+}
 
 static void geo_node_merge_by_distance_layout(uiLayout *layout,
                                               bContext *UNUSED(C),
@@ -58,7 +57,6 @@ static void geo_merge_by_distance_init(bNodeTree *UNUSED(ntree), bNode *node)
   node->custom1 = WELD_MODE_ALL;
 }
 
-namespace blender::nodes {
 static void geo_node_merge_by_distance_exec(GeoNodeExecParams params)
 {
   GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry");
@@ -71,10 +69,12 @@ static void geo_node_merge_by_distance_exec(GeoNodeExecParams params)
     MeshComponent &mesh_component = geometry_set.get_component_for_write<MeshComponent>();
     const Mesh *input_mesh = mesh_component.get_for_read();
 
-    const bool default_selection = true;
-    GVArray_Typed<bool> selection_attribute = params.get_input_attribute<bool>(
-        "Selection", mesh_component, ATTR_DOMAIN_POINT, default_selection);
-    VArray_Span<bool> selection{selection_attribute};
+    GeometryComponentFieldContext field_context{mesh_component, ATTR_DOMAIN_POINT};
+    const Field<bool> selection_field = params.extract_input<Field<bool>>("Selection");
+    fn::FieldEvaluator selection_evaluator{field_context, input_mesh->totvert};
+    selection_evaluator.add(selection_field);
+    selection_evaluator.evaluate();
+    const VArray_Span<bool> selection = selection_evaluator.get_evaluated<bool>(0);
 
     Mesh *result = GEO_mesh_merge_by_distance(input_mesh, selection.data(), distance, weld_mode);
     if (result != input_mesh) {
@@ -107,10 +107,9 @@ void register_node_type_geo_merge_by_distance()
   static bNodeType ntype;
   geo_node_type_base(
       &ntype, GEO_NODE_MERGE_BY_DISTANCE, "Merge By Distance", NODE_CLASS_GEOMETRY, 0);
-  node_type_socket_templates(
-      &ntype, geo_node_merge_by_distance_in, geo_node_merge_by_distance_out);
-  node_type_init(&ntype, geo_merge_by_distance_init);
+  node_type_init(&ntype, blender::nodes::geo_merge_by_distance_init);
+  ntype.declare = blender::nodes::geo_node_merge_by_distance_declare;
   ntype.geometry_node_execute = blender::nodes::geo_node_merge_by_distance_exec;
-  ntype.draw_buttons = geo_node_merge_by_distance_layout;
+  ntype.draw_buttons = blender::nodes::geo_node_merge_by_distance_layout;
   nodeRegisterType(&ntype);
 }



More information about the Bf-blender-cvs mailing list