[Bf-blender-cvs] [6a62487f83d] soc-2021-porting-modifiers-to-nodes-merge-by-distance: Changes based on review by Hans Goudey (HooglyBoogly)
Fabian Schempp
noreply at git.blender.org
Sun Sep 26 21:46:42 CEST 2021
Commit: 6a62487f83d55c20610f83b78f1ca4293491db43
Author: Fabian Schempp
Date: Sun Sep 26 21:46:36 2021 +0200
Branches: soc-2021-porting-modifiers-to-nodes-merge-by-distance
https://developer.blender.org/rB6a62487f83d55c20610f83b78f1ca4293491db43
Changes based on review by Hans Goudey (HooglyBoogly)
===================================================================
M source/blender/geometry/CMakeLists.txt
R076 source/blender/geometry/GEO_mesh_merge_by_distance.h source/blender/geometry/GEO_mesh_merge_by_distance.hh
R072 source/blender/geometry/GEO_pointcloud_merge_by_distance.h source/blender/geometry/GEO_pointcloud_merge_by_distance.hh
R096 source/blender/geometry/intern/mesh_merge_by_distance.c source/blender/geometry/intern/mesh_merge_by_distance.cc
M source/blender/geometry/intern/pointcloud_merge_by_distance.cc
M source/blender/modifiers/CMakeLists.txt
R087 source/blender/modifiers/intern/MOD_weld.c 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/CMakeLists.txt b/source/blender/geometry/CMakeLists.txt
index df63a0ae081..8c577da789e 100644
--- a/source/blender/geometry/CMakeLists.txt
+++ b/source/blender/geometry/CMakeLists.txt
@@ -33,10 +33,10 @@
)
set(SRC
- intern/mesh_merge_by_distance.c
+ intern/mesh_merge_by_distance.cc
intern/pointcloud_merge_by_distance.cc
- GEO_mesh_merge_by_distance.h
- GEO_pointcloud_merge_by_distance.h
+ GEO_mesh_merge_by_distance.hh
+ GEO_pointcloud_merge_by_distance.hh
)
set(LIB
diff --git a/source/blender/geometry/GEO_mesh_merge_by_distance.h b/source/blender/geometry/GEO_mesh_merge_by_distance.hh
similarity index 76%
rename from source/blender/geometry/GEO_mesh_merge_by_distance.h
rename to source/blender/geometry/GEO_mesh_merge_by_distance.hh
index b1f5680a928..e38d381edeb 100644
--- a/source/blender/geometry/GEO_mesh_merge_by_distance.h
+++ b/source/blender/geometry/GEO_mesh_merge_by_distance.hh
@@ -20,20 +20,23 @@
* \ingroup geo
*/
+namespace blender::geometry {
+
#ifdef __cplusplus
extern "C" {
#endif
-enum {
+typedef enum weld_mode {
WELD_MODE_ALL = 0,
WELD_MODE_CONNECTED = 1,
-};
+} weld_mode;
struct Mesh *GEO_mesh_merge_by_distance(const struct Mesh *mesh,
- const bool *mask,
- const float merge_distance,
- const int weld_mode);
-
+ const bool *mask,
+ const float merge_distance,
+ const int weld_mode);
#ifdef __cplusplus
}
#endif
+
+} // namespace blender::geometry
diff --git a/source/blender/geometry/GEO_pointcloud_merge_by_distance.h b/source/blender/geometry/GEO_pointcloud_merge_by_distance.hh
similarity index 72%
rename from source/blender/geometry/GEO_pointcloud_merge_by_distance.h
rename to source/blender/geometry/GEO_pointcloud_merge_by_distance.hh
index c03cc08d814..ec150b40a6d 100644
--- a/source/blender/geometry/GEO_pointcloud_merge_by_distance.h
+++ b/source/blender/geometry/GEO_pointcloud_merge_by_distance.hh
@@ -20,14 +20,10 @@
* \ingroup geo
*/
-#ifdef __cplusplus
-extern "C" {
-#endif
+#include "BKE_geometry_set.hh"
-PointCloud *merge_by_distance_pointcloud(const PointCloud &point_cloud,
- const float merge_threshold,
- blender::Span<bool> selection);
-
-#ifdef __cplusplus
+namespace blender::geometry {
+PointCloud *GEO_merge_by_distance_pointcloud(PointCloudComponent &pointcloud_component,
+ const float merge_threshold,
+ blender::Span<bool> selection);
}
-#endif
diff --git a/source/blender/geometry/intern/mesh_merge_by_distance.c b/source/blender/geometry/intern/mesh_merge_by_distance.cc
similarity index 96%
rename from source/blender/geometry/intern/mesh_merge_by_distance.c
rename to source/blender/geometry/intern/mesh_merge_by_distance.cc
index a21c15c2c61..da7ed622903 100644
--- a/source/blender/geometry/intern/mesh_merge_by_distance.c
+++ b/source/blender/geometry/intern/mesh_merge_by_distance.cc
@@ -37,7 +37,7 @@
#include "BKE_mesh.h"
#include "BKE_modifier.h"
-#include "GEO_mesh_merge_by_distance.h" // Own include.
+#include "GEO_mesh_merge_by_distance.hh"
/* Indicates when the element was not computed. */
#define OUT_OF_CONTEXT (uint)(-1)
@@ -349,7 +349,7 @@ static void weld_vert_ctx_alloc_and_setup(const uint mvert_len,
uint wvert_len = 0;
WeldVert *wvert, *wv;
- wvert = MEM_mallocN(sizeof(*wvert) * mvert_len, __func__);
+ wvert = (WeldVert *)MEM_mallocN(sizeof(*wvert) * mvert_len, __func__);
wv = &wvert[0];
uint *v_dest_iter = &r_vert_dest_map[0];
@@ -362,7 +362,7 @@ static void weld_vert_ctx_alloc_and_setup(const uint mvert_len,
}
}
- *r_wvert = MEM_reallocN(wvert, sizeof(*wvert) * wvert_len);
+ *r_wvert = (WeldVert *)MEM_reallocN(wvert, sizeof(*wvert) * wvert_len);
*r_wvert_len = wvert_len;
}
@@ -395,7 +395,7 @@ static void weld_vert_groups_setup(const uint mvert_len,
}
}
- struct WeldGroup *wgroups = MEM_callocN(sizeof(*wgroups) * wgroups_len, __func__);
+ struct WeldGroup *wgroups = (WeldGroup *)MEM_callocN(sizeof(*wgroups) * wgroups_len, __func__);
const WeldVert *wv = &wvert[0];
for (uint i = wvert_len; i--; wv++) {
@@ -412,7 +412,7 @@ static void weld_vert_groups_setup(const uint mvert_len,
BLI_assert(ofs == wvert_len);
- uint *groups_buffer = MEM_mallocN(sizeof(*groups_buffer) * ofs, __func__);
+ uint *groups_buffer = (uint *)MEM_mallocN(sizeof(*groups_buffer) * ofs, __func__);
wv = &wvert[0];
for (uint i = wvert_len; i--; wv++) {
uint group_index = r_vert_groups_map[wv->vert_dest];
@@ -475,7 +475,7 @@ static void weld_edge_ctx_setup(const uint mvert_len,
}
if (link_len) {
- uint *link_edge_buffer = MEM_mallocN(sizeof(*link_edge_buffer) * link_len, __func__);
+ uint *link_edge_buffer = (uint *)MEM_mallocN(sizeof(*link_edge_buffer) * link_len, __func__);
we = &r_wedge[0];
for (uint i = 0; i < wedge_len; i++, we++) {
@@ -566,11 +566,11 @@ static void weld_edge_ctx_alloc(const MEdge *medge,
uint *r_wedge_len)
{
/* Edge Context. */
- uint *edge_map = MEM_mallocN(sizeof(*edge_map) * medge_len, __func__);
+ uint *edge_map = (uint *)MEM_mallocN(sizeof(*edge_map) * medge_len, __func__);
uint wedge_len = 0;
WeldEdge *wedge, *we;
- wedge = MEM_mallocN(sizeof(*wedge) * medge_len, __func__);
+ wedge = (WeldEdge *)MEM_mallocN(sizeof(*wedge) * medge_len, __func__);
we = &wedge[0];
const MEdge *me = &medge[0];
@@ -596,7 +596,7 @@ static void weld_edge_ctx_alloc(const MEdge *medge,
}
}
- *r_wedge = MEM_reallocN(wedge, sizeof(*wedge) * wedge_len);
+ *r_wedge = (WeldEdge *)MEM_reallocN(wedge, sizeof(*wedge) * wedge_len);
*r_wedge_len = wedge_len;
*r_edge_ctx_map = edge_map;
}
@@ -616,7 +616,7 @@ static void weld_edge_groups_setup(const uint medge_len,
struct WeldGroupEdge *wegroups, *wegrp_iter;
uint wgroups_len = wedge_len - edge_kill_len;
- wegroups = MEM_callocN(sizeof(*wegroups) * wgroups_len, __func__);
+ wegroups = (WeldGroupEdge *)MEM_callocN(sizeof(*wegroups) * wgroups_len, __func__);
wegrp_iter = &wegroups[0];
wgroups_len = 0;
@@ -663,7 +663,7 @@ static void weld_edge_groups_setup(const uint medge_len,
ofs += wegrp_iter->group.len;
}
- uint *groups_buffer = MEM_mallocN(sizeof(*groups_buffer) * ofs, __func__);
+ uint *groups_buffer = (uint *)MEM_mallocN(sizeof(*groups_buffer) * ofs, __func__);
we = &wedge[0];
for (uint i = wedge_len; i--; we++) {
if (we->flag == ELEM_COLLAPSED) {
@@ -802,18 +802,18 @@ static void weld_poly_loop_ctx_alloc(const MPoly *mpoly,
WeldMesh *r_weld_mesh)
{
/* Loop/Poly Context. */
- uint *loop_map = MEM_mallocN(sizeof(*loop_map) * mloop_len, __func__);
- uint *poly_map = MEM_mallocN(sizeof(*poly_map) * mpoly_len, __func__);
+ uint *loop_map = (uint *)MEM_mallocN(sizeof(*loop_map) * mloop_len, __func__);
+ uint *poly_map = (uint *)MEM_mallocN(sizeof(*poly_map) * mpoly_len, __func__);
uint wloop_len = 0;
uint wpoly_len = 0;
uint max_ctx_poly_len = 4;
WeldLoop *wloop, *wl;
- wloop = MEM_mallocN(sizeof(*wloop) * mloop_len, __func__);
+ wloop = (WeldLoop *)MEM_mallocN(sizeof(*wloop) * mloop_len, __func__);
wl = &wloop[0];
WeldPoly *wpoly, *wp;
- wpoly = MEM_mallocN(sizeof(*wpoly) * mpoly_len, __func__);
+ wpoly = (WeldPoly *)MEM_mallocN(sizeof(*wpoly) * mpoly_len, __func__);
wp = &wpoly[0];
uint maybe_new_poly = 0;
@@ -880,14 +880,15 @@ static void weld_poly_loop_ctx_alloc(const MPoly *mpoly,
if (mpoly_len < (wpoly_len + maybe_new_poly)) {
WeldPoly *wpoly_tmp = wpoly;
- wpoly = MEM_mallocN(sizeof(*wpoly) * ((size_t)wpoly_len + maybe_new_poly), __func__);
+ wpoly = (WeldPoly *)MEM_mallocN(sizeof(*wpoly) * ((size_t)wpoly_len + maybe_new_poly),
+ __func__);
memcpy(wpoly, wpoly_tmp, sizeof(*wpoly) * wpoly_len);
MEM_freeN(wpoly_tmp);
}
WeldPoly *poly_new = &wpoly[wpoly_len];
- r_weld_mesh->wloop = MEM_reallocN(wloop, sizeof(*wloop) * wloop_len);
+ r_weld_mesh->wloop = (WeldLoop *)MEM_reallocN(wloop, sizeof(*wloop) * wloop_len);
r_weld_mesh->wpoly = wpoly;
r_weld_mesh->wpoly_new = poly_new;
r_weld_mesh->wloop_len = wloop_len;
@@ -1159,7 +1160,7 @@ static void weld_poly_loop_ctx_setup(const MLoop *mloop,
}
if (link_len) {
- uint *link_poly_buffer = MEM_mallocN(sizeof(*link_poly_buffer) * link_len, __func__);
+ uint *link_poly_buffer = (uint *)MEM_mallocN(sizeof(*link_poly_buffer) * link_len, __func__);
wp = &wpoly[0];
for (uint i = 0; i < wpoly_and_new_len; i++, wp++) {
@@ -1301,8 +1302,8 @@ static void weld_mesh_context_create(const Mesh *mesh,
const uint mloop_len = mesh->totloop;
const uint mpoly_len = mesh->totpoly;
- uint *edge_dest_map = MEM_mallocN(sizeof(*edge_dest_map) * medge_len, __func__);
- struct WeldGroup *v_links = MEM_callocN(sizeof(*v_links) * mvert_len, __func__);
+ uint *edge_dest_map = (uint *)MEM_mallocN(sizeof(*edge_dest_map) * medge_len, __func__);
+ struct WeldGroup *v_links = (WeldGroup *)MEM_callocN(sizeof(*v_links) * mvert_len, __func__);
WeldVert *wvert;
uint wvert_len;
@@ -1539,9 +1540,13 @@ struct WeldVertexCluster {
uint merged_verts;
};
-Mesh *GEO_mesh_merge_by_distance(const Mesh *mesh, const bool *mask, const float merge_distance, const int weld_mode)
+namespace blender::geometry {
+Mesh *GEO_mesh_merge_by_distance(const Mesh *mesh,
+ const bool *mask,
+ const float merge_distance,
+ const int weld_mode)
{
- Mesh *result = mesh;
+ Mesh *result = BKE_mesh_copy_for_eval(mesh, false);
const MVert *mvert;
const MLoop *mloop;
@@ -1555,7 +1560,7 @@ Mesh *GEO_mesh_merge_by_distance(const Mesh *mesh, const bool *mask, const float
/* From the original index of
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list