Fix T95169: Assert in weld modifier code

Return early before accessing the array when all edges are merged.
This commit is contained in:
Germano Cavalcante 2022-01-25 13:56:00 -06:00 committed by Hans Goudey
parent c847122096
commit 52b2769b9c
Notes: blender-bot 2023-02-14 11:25:11 +01:00
Referenced by issue #95169, Debug assert: If the weld modifier merges all verts on the mesh
1 changed files with 7 additions and 7 deletions

View File

@ -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;