[Bf-blender-cvs] [3a654753383] soc-2021-porting-modifiers-to-nodes-merge-by-distance: Changes based on review by Hans Goudey (HooglyBoogly)

Fabian Schempp noreply at git.blender.org
Thu Sep 30 09:48:22 CEST 2021


Commit: 3a6547533838b4f0ae4701369803708c2708bceb
Author: Fabian Schempp
Date:   Thu Sep 30 09:48:18 2021 +0200
Branches: soc-2021-porting-modifiers-to-nodes-merge-by-distance
https://developer.blender.org/rB3a6547533838b4f0ae4701369803708c2708bceb

Changes based on review by Hans Goudey (HooglyBoogly)

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

M	source/blender/geometry/GEO_mesh_merge_by_distance.hh
M	source/blender/geometry/GEO_pointcloud_merge_by_distance.hh
M	source/blender/geometry/intern/mesh_merge_by_distance.cc
M	source/blender/geometry/intern/pointcloud_merge_by_distance.cc
M	source/blender/modifiers/intern/MOD_weld.cc
M	source/blender/nodes/geometry/nodes/node_geo_merge_by_distance.cc

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

diff --git a/source/blender/geometry/GEO_mesh_merge_by_distance.hh b/source/blender/geometry/GEO_mesh_merge_by_distance.hh
index ba4efd69e22..45f136d40a4 100644
--- a/source/blender/geometry/GEO_mesh_merge_by_distance.hh
+++ b/source/blender/geometry/GEO_mesh_merge_by_distance.hh
@@ -20,26 +20,21 @@
  * \ingroup geo
  */
 
-namespace blender::geometry {
+#include "BLI_span.hh"
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+namespace blender::geometry {
 
 enum class WeldMode {
   all = 0,
   connected = 1,
 };
 
-WeldMode GEO_weld_mode_from_int(const short type);
-int16_t GEO_weld_mode_to_short(const WeldMode weld_mode);
+WeldMode weld_mode_from_int(const int16_t type);
+int16_t weld_mode_to_int(const WeldMode weld_mode);
 
-struct Mesh *GEO_mesh_merge_by_distance(struct Mesh *mesh,
-                                        const bool *mask,
-                                        const float merge_distance,
-                                        const WeldMode weld_mode);
-#ifdef __cplusplus
-}
-#endif
+struct Mesh *mesh_merge_by_distance(struct Mesh *mesh,
+                                    const Span<bool> mask,
+                                    const float merge_distance,
+                                    const WeldMode weld_mode);
 
 }  // namespace blender::geometry
diff --git a/source/blender/geometry/GEO_pointcloud_merge_by_distance.hh b/source/blender/geometry/GEO_pointcloud_merge_by_distance.hh
index ec150b40a6d..5bcbc65a816 100644
--- a/source/blender/geometry/GEO_pointcloud_merge_by_distance.hh
+++ b/source/blender/geometry/GEO_pointcloud_merge_by_distance.hh
@@ -23,7 +23,7 @@
 #include "BKE_geometry_set.hh"
 
 namespace blender::geometry {
-PointCloud *GEO_merge_by_distance_pointcloud(PointCloudComponent &pointcloud_component,
-                                             const float merge_threshold,
-                                             blender::Span<bool> selection);
+PointCloud *pointcloud_merge_by_distance(PointCloudComponent &pointcloud_component,
+                                         const float merge_threshold,
+                                         blender::Span<bool> selection);
 }
diff --git a/source/blender/geometry/intern/mesh_merge_by_distance.cc b/source/blender/geometry/intern/mesh_merge_by_distance.cc
index c71990d158f..9eb2fe1afd2 100644
--- a/source/blender/geometry/intern/mesh_merge_by_distance.cc
+++ b/source/blender/geometry/intern/mesh_merge_by_distance.cc
@@ -1542,7 +1542,7 @@ struct WeldVertexCluster {
 
 namespace blender::geometry {
 
-WeldMode GEO_weld_mode_from_int(const short type)
+WeldMode weld_mode_from_int(const short type)
 {
   switch (static_cast<WeldMode>(type)) {
     case WeldMode::all:
@@ -1554,7 +1554,7 @@ WeldMode GEO_weld_mode_from_int(const short type)
   return WeldMode::all;
 }
 
-int16_t GEO_weld_mode_to_short(const WeldMode weld_mode)
+int16_t weld_mode_to_int(const WeldMode weld_mode)
 {
   switch (weld_mode) {
     case WeldMode::all:
@@ -1567,10 +1567,10 @@ int16_t GEO_weld_mode_to_short(const WeldMode weld_mode)
   return static_cast<int16_t>(WeldMode::all);
 }
 
-Mesh *GEO_mesh_merge_by_distance(Mesh *mesh,
-                                 const bool *mask,
-                                 const float merge_distance,
-                                 const WeldMode weld_mode)
+Mesh *mesh_merge_by_distance(Mesh *mesh,
+                             const Span<bool> mask,
+                             const float merge_distance,
+                             const WeldMode weld_mode)
 {
   Mesh *result = mesh;
 
@@ -1672,7 +1672,7 @@ Mesh *GEO_mesh_merge_by_distance(Mesh *mesh,
   {
     KDTree_3d *tree = BLI_kdtree_3d_new(totvert);
     for (uint i = 0; i < totvert; i++) {
-      if (!mask || mask[i]) {
+      if (mask.size() == 0 || mask[i]) {
         BLI_kdtree_3d_insert(tree, i, mvert[i].co);
       }
       vert_dest_map[i] = OUT_OF_CONTEXT;
@@ -1719,7 +1719,7 @@ Mesh *GEO_mesh_merge_by_distance(Mesh *mesh,
       if (v1 == v2) {
         continue;
       }
-      if (mask && (!mask[v1] || !mask[v2])) {
+      if (mask.size() > 0 && (!mask[v1] || !mask[v2])) {
         continue;
       }
       if (v1 > v2) {
diff --git a/source/blender/geometry/intern/pointcloud_merge_by_distance.cc b/source/blender/geometry/intern/pointcloud_merge_by_distance.cc
index 939a6d1cd3d..8c7bff8d3e8 100644
--- a/source/blender/geometry/intern/pointcloud_merge_by_distance.cc
+++ b/source/blender/geometry/intern/pointcloud_merge_by_distance.cc
@@ -14,8 +14,8 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
+#include "BKE_geometry_set.hh"
 #include "BKE_pointcloud.h"
-#include <BKE_geometry_set.hh>
 
 #include "BLI_array.hh"
 #include "BLI_float3.hh"
@@ -49,9 +49,8 @@ static KDTree_3d *build_kdtree(Span<float3> positions, Span<bool> selection)
   return kdtree;
 }
 
-static void build_merge_map(Span<float3> &positions,
+static void build_merge_map(Span<float3> positions,
                             MutableSpan<bool> merge_map,
-                            int &total_merge_operations,
                             const float merge_threshold,
                             Span<bool> selection)
 {
@@ -60,10 +59,9 @@ static void build_merge_map(Span<float3> &positions,
   for (int i : positions.index_range()) {
     struct CallbackData {
       int index;
-      int &total_merge_operations;
       MutableSpan<bool> merge_map;
       Span<bool> selection;
-    } callback_data = {i, total_merge_operations, merge_map, selection};
+    } callback_data = {i, merge_map, selection};
 
     BLI_kdtree_3d_range_search_cb(
         kdtree,
@@ -81,7 +79,6 @@ static void build_merge_map(Span<float3> &positions,
               callback_data.selection[source_point_index] &&
               callback_data.selection[target_point_index]) {
             callback_data.merge_map[source_point_index] = true;
-            callback_data.total_merge_operations++;
           }
           return true;
         },
@@ -91,26 +88,24 @@ static void build_merge_map(Span<float3> &positions,
   BLI_kdtree_3d_free(kdtree);
 }
 
-PointCloud *GEO_merge_by_distance_pointcloud(PointCloudComponent &pointcloud_component,
-                                             const float merge_threshold,
-                                             Span<bool> selection)
+PointCloud *pointcloud_merge_by_distance(PointCloudComponent &pointcloud_component,
+                                         const float merge_threshold,
+                                         Span<bool> selection)
 {
   const PointCloud &original_src_pointcloud = *pointcloud_component.get_for_read();
   Array<bool> merge_map(original_src_pointcloud.totpoint, false);
   Span<float3> positions((const float3 *)original_src_pointcloud.co,
                          original_src_pointcloud.totpoint);
 
-  int total_merge_operations = 0;
+  build_merge_map(positions, merge_map, merge_threshold, selection);
 
-  build_merge_map(positions, merge_map, total_merge_operations, merge_threshold, selection);
-
-  Vector<int64_t> copyMaskVector;
+  Vector<int64_t> copy_mask_vector;
   for (const int i : positions.index_range()) {
     if (!merge_map[i]) {
-      copyMaskVector.append(i);
+      copy_mask_vector.append(i);
     }
   }
-  IndexMask copyMask(copyMaskVector);
+  IndexMask copyMask(copy_mask_vector);
 
   PointCloudComponent *src_pointcloud_component = (PointCloudComponent *)
                                                       pointcloud_component.copy();
diff --git a/source/blender/modifiers/intern/MOD_weld.cc b/source/blender/modifiers/intern/MOD_weld.cc
index d44482abb84..888ab7709ee 100644
--- a/source/blender/modifiers/intern/MOD_weld.cc
+++ b/source/blender/modifiers/intern/MOD_weld.cc
@@ -33,9 +33,9 @@
 
 #include "MEM_guardedalloc.h"
 
+#include "BLI_array.hh"
 #include "BLI_math.h"
 #include "BLI_utildefines.h"
-
 #include "BLT_translation.h"
 
 #include "DNA_defaults.h"
@@ -68,7 +68,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *UNUSED(ctx)
   WeldModifierData *wmd = (WeldModifierData *)md;
 
   uint totvert = mesh->totvert;
-  bool *mask = (bool *)MEM_malloc_arrayN(totvert, sizeof(*mask), __func__);
+  blender::Array<bool> mask(totvert);
   const int defgrp_index = BKE_id_defgroup_name_index(&mesh->id, wmd->defgrp_name);
   if (defgrp_index != -1) {
     MDeformVert *dvert, *dv;
@@ -88,9 +88,8 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *UNUSED(ctx)
     }
   }
 
-  Mesh *result = blender::geometry::GEO_mesh_merge_by_distance(
-      mesh, mask, wmd->merge_dist, blender::geometry::GEO_weld_mode_from_int(wmd->mode));
-  MEM_freeN(mask);
+  Mesh *result = blender::geometry::mesh_merge_by_distance(
+      mesh, mask, wmd->merge_dist, blender::geometry::weld_mode_from_int(wmd->mode));
 
   return result;
 }
@@ -128,8 +127,7 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel)
 
   uiItemR(layout, ptr, "mode", 0, NULL, ICON_NONE);
   uiItemR(layout, ptr, "merge_threshold", 0, IFACE_("Distance"), ICON_NONE);
-  if (blender::geometry::GEO_weld_mode_from_int(weld_mode) ==
-      blender::geometry::WeldMode::connected) {
+  if (blender::geometry::weld_mode_from_int(weld_mode) == blender::geometry::WeldMode::connected) {
     uiItemR(layout, ptr, "loose_edges", 0, NULL, ICON_NONE);
   }
   modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group", "invert_vertex_group", NULL);
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 63a31853c2d..b1304d77907 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
@@ -55,7 +55,7 @@ static void geo_node_merge_by_distance_layout(uiLayout *layout,
 
 static void geo_merge_by_distance_init(bNodeTree *UNUSED(ntree), bNode *node)
 {
-  node->custom1 = GEO_weld_mode_to_short(geometry::WeldMode::all);
+  node->custom1 = weld_mode_to_int(geometry::WeldMode::all);
 }
 
 static void process_mesh(GeoNodeExecParams &params,
@@ -73,8 +73,7 @@ static void process_mesh(GeoNodeExecParams &params,
   selection_evaluator.evaluate();
   const VArra

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list