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);
+                       }
                }
        }
        

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to