[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