[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 ¶ms,
@@ -73,8 +73,7 @@ static void process_mesh(GeoNodeExecParams ¶ms,
selection_evaluator.evaluate();
const VArra
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list