diff options
author | Germano Cavalcante <germano.costa@ig.com.br> | 2022-01-25 22:56:00 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2022-01-25 22:56:00 +0300 |
commit | 52b2769b9c1283dbe42176fc5581817f9e7d3a94 (patch) | |
tree | 2915b5e16c55e86071377162a9bbef0a2251672a /source/blender/geometry | |
parent | c847122096b80aaf12214a865f5f43fd595565e0 (diff) |
Fix T95169: Assert in weld modifier code
Return early before accessing the array when all edges are merged.
Diffstat (limited to 'source/blender/geometry')
-rw-r--r-- | source/blender/geometry/intern/mesh_merge_by_distance.cc | 14 |
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; |