Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGermano Cavalcante <germano.costa@ig.com.br>2022-01-25 22:56:00 +0300
committerHans Goudey <h.goudey@me.com>2022-01-25 22:56:00 +0300
commit52b2769b9c1283dbe42176fc5581817f9e7d3a94 (patch)
tree2915b5e16c55e86071377162a9bbef0a2251672a
parentc847122096b80aaf12214a865f5f43fd595565e0 (diff)
Fix T95169: Assert in weld modifier code
Return early before accessing the array when all edges are merged.
-rw-r--r--source/blender/geometry/intern/mesh_merge_by_distance.cc14
1 files changed, 7 insertions, 7 deletions
diff --git a/source/blender/geometry/intern/mesh_merge_by_distance.cc b/source/blender/geometry/intern/mesh_merge_by_distance.cc
index e49848a030b..1a07ebf31f6 100644
--- a/source/blender/geometry/intern/mesh_merge_by_distance.cc
+++ b/source/blender/geometry/intern/mesh_merge_by_distance.cc
@@ -563,14 +563,10 @@ static void weld_edge_groups_setup(const int medge_len,
Array<WeldGroupEdge> &r_edge_groups)
{
/* Get weld edge groups. */
-
- struct WeldGroupEdge *wegrp_iter;
-
int wgroups_len = wedge.size() - edge_kill_len;
r_edge_groups.reinitialize(wgroups_len);
r_edge_groups.fill({{0}});
MutableSpan<WeldGroupEdge> wegroups = r_edge_groups;
- wegrp_iter = &r_edge_groups[0];
wgroups_len = 0;
for (const int i : IndexRange(medge_len)) {
@@ -584,11 +580,10 @@ static void weld_edge_groups_setup(const int medge_len,
}
else {
we->edge_dest = we->edge_orig;
- wegrp_iter->v1 = we->vert_a;
- wegrp_iter->v2 = we->vert_b;
+ wegroups[wgroups_len].v1 = we->vert_a;
+ wegroups[wgroups_len].v2 = we->vert_b;
r_edge_groups_map[i] = wgroups_len;
wgroups_len++;
- wegrp_iter++;
}
}
else {
@@ -598,6 +593,11 @@ static void weld_edge_groups_setup(const int medge_len,
BLI_assert(wgroups_len == wedge.size() - edge_kill_len);
+ if (wgroups_len == 0) {
+ /* All edges in the context are collapsed. */
+ return;
+ }
+
for (const WeldEdge &we : wedge) {
if (we.flag == ELEM_COLLAPSED) {
continue;