[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45361] trunk/blender/source/blender: fix/ workaround an error related to [#30735]

Campbell Barton ideasman42 at gmail.com
Tue Apr 3 09:31:21 CEST 2012


Revision: 45361
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45361
Author:   campbellbarton
Date:     2012-04-03 07:31:11 +0000 (Tue, 03 Apr 2012)
Log Message:
-----------
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.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_mesh_validate.c
    trunk/blender/source/blender/editors/transform/transform.c

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_mesh_validate.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_mesh_validate.c	2012-04-03 06:12:04 UTC (rev 45360)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_mesh_validate.c	2012-04-03 07:31:11 UTC (rev 45361)
@@ -71,9 +71,13 @@
 	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 @@
 
 	/* 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 @@
 		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 {

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2012-04-03 06:12:04 UTC (rev 45360)
+++ trunk/blender/source/blender/editors/transform/transform.c	2012-04-03 07:31:11 UTC (rev 45361)
@@ -4768,12 +4768,14 @@
 				}
 			}
 			
-			/*make sure face-attributes are correct (e.g. MTexPoly)*/
+			/* make sure face-attributes are correct (e.g. MTexPoly) */
 			BM_elem_attrs_copy(em->bm, em->bm, copyf2, f);
 			
-			/*restore selection and hidden flags*/
+			/* restore selection and hidden flags */
 			BM_elem_select_set(em->bm, f, sel);
-			BM_elem_hide_set(em->bm, f, hide);
+			if (!hide) { /* this check is a workaround for bug, see note - [#30735], without this edge can be hidden and selected */
+				BM_elem_hide_set(em->bm, f, hide);
+			}
 		}
 	}
 	




More information about the Bf-blender-cvs mailing list