From 285970753ee81ef383bf74c59fa97987d90c5698 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 3 Apr 2012 07:31:11 +0000 Subject: fix/workaround an error related to [#30735] when a single face in a loop is hidden, loop cut will subdivide edges on both sides. creating an edge between the hidden faces. without this workaround the edge ends up hidden and selected. added a check in BM_mesh_validate() for hidden/selected elements. --- source/blender/bmesh/intern/bmesh_mesh_validate.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'source/blender/bmesh/intern') diff --git a/source/blender/bmesh/intern/bmesh_mesh_validate.c b/source/blender/bmesh/intern/bmesh_mesh_validate.c index 0ec13f1df8f..f91e9d82879 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_validate.c +++ b/source/blender/bmesh/intern/bmesh_mesh_validate.c @@ -71,9 +71,13 @@ int BM_mesh_validate(BMesh *bm) BM_mesh_elem_index_ensure(bm, BM_ALL); BM_ITER_INDEX(v, &iter, bm, BM_VERTS_OF_MESH, NULL, i) { + if (BM_elem_flag_test(v, BM_ELEM_SELECT | BM_ELEM_HIDDEN) == (BM_ELEM_SELECT | BM_ELEM_HIDDEN)) { + ERRMSG("vert %d: is hidden and selected", i); + } + if (v->e) { if (!BM_vert_in_edge(v->e, v)) { - ERRMSG("vert: %d - is not in its referenced edge: %d", i, BM_elem_index_get(v->e)); + ERRMSG("vert %d: is not in its referenced edge: %d", i, BM_elem_index_get(v->e)); } } } @@ -86,6 +90,10 @@ int BM_mesh_validate(BMesh *bm) /* edge radial structure */ BM_ITER_INDEX(e, &iter, bm, BM_EDGES_OF_MESH, NULL, i) { + if (BM_elem_flag_test(e, BM_ELEM_SELECT | BM_ELEM_HIDDEN) == (BM_ELEM_SELECT | BM_ELEM_HIDDEN)) { + ERRMSG("edge %d: is hidden and selected", i); + } + if (e->l) { BMLoop *l_iter; BMLoop *l_first; @@ -113,6 +121,10 @@ int BM_mesh_validate(BMesh *bm) BMLoop *l_iter; BMLoop *l_first; + if (BM_elem_flag_test(f, BM_ELEM_SELECT | BM_ELEM_HIDDEN) == (BM_ELEM_SELECT | BM_ELEM_HIDDEN)) { + ERRMSG("face %d: is hidden and selected", i); + } + l_iter = l_first = BM_FACE_FIRST_LOOP(f); do { -- cgit v1.2.3