Revision: 43986 http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43986 Author: campbellbarton Date: 2012-02-08 14:29:14 +0000 (Wed, 08 Feb 2012) Log Message: ----------- fix [#30103] Select vertex groups works only in vertex select mode
add selection flushing matching whats in trunk. Modified Paths: -------------- branches/bmesh/blender/source/blender/bmesh/bmesh.h branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c branches/bmesh/blender/source/blender/editors/include/ED_mesh.h branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c branches/bmesh/blender/source/blender/editors/object/object_vgroup.c Modified: branches/bmesh/blender/source/blender/bmesh/bmesh.h =================================================================== --- branches/bmesh/blender/source/blender/bmesh/bmesh.h 2012-02-08 14:01:47 UTC (rev 43985) +++ branches/bmesh/blender/source/blender/bmesh/bmesh.h 2012-02-08 14:29:14 UTC (rev 43986) @@ -293,6 +293,10 @@ void BM_SelectMode_Flush(BMesh *bm); +/* mode independant flushing up/down */ +void BM_DeSelect_Flush(BMesh *bm); +void BM_Select_Flush(BMesh *bm); + /*convert an editmesh to a bmesh*/ BMesh *editmesh_to_bmesh(struct EditMesh *em); Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c =================================================================== --- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c 2012-02-08 14:01:47 UTC (rev 43985) +++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c 2012-02-08 14:29:14 UTC (rev 43986) @@ -141,6 +141,95 @@ recount_totsels(bm); } +/* BMESH NOTE: matches EM_deselect_flush() behavior from trunk */ +void BM_DeSelect_Flush(BMesh *bm) +{ + BMEdge *e; + BMLoop *l_iter; + BMLoop *l_first; + BMFace *f; + + BMIter edges; + BMIter faces; + + int ok; + + for (e = BMIter_New(&edges, bm, BM_EDGES_OF_MESH, bm); e; e = BMIter_Step(&edges)) { + if (!(BM_TestHFlag(e->v1, BM_SELECT) && BM_TestHFlag(e->v2, BM_SELECT) && !BM_TestHFlag(e, BM_HIDDEN))) { + BM_ClearHFlag(e, BM_SELECT); + } + } + + for (f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm); f; f = BMIter_Step(&faces)) { + ok = TRUE; + if (!BM_TestHFlag(f, BM_HIDDEN)) { + l_iter = l_first = BM_FACE_FIRST_LOOP(f); + do { + if (!BM_TestHFlag(l_iter->v, BM_SELECT)) { + ok = FALSE; + break; + } + } while ((l_iter = l_iter->next) != l_first); + } + else { + ok = FALSE; + } + + if (ok == FALSE) { + BM_ClearHFlag(f, BM_SELECT); + } + } + + /* Remove any deselected elements from the BMEditSelection */ + BM_validate_selections(bm); + + recount_totsels(bm); +} + + +/* BMESH NOTE: matches EM_select_flush() behavior from trunk */ +void BM_Select_Flush(BMesh *bm) +{ + BMEdge *e; + BMLoop *l_iter; + BMLoop *l_first; + BMFace *f; + + BMIter edges; + BMIter faces; + + int ok; + + for (e = BMIter_New(&edges, bm, BM_EDGES_OF_MESH, bm); e; e = BMIter_Step(&edges)) { + if (BM_TestHFlag(e->v1, BM_SELECT) && BM_TestHFlag(e->v2, BM_SELECT) && !BM_TestHFlag(e, BM_HIDDEN)) { + BM_SetHFlag(e, BM_SELECT); + } + } + + for (f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm); f; f = BMIter_Step(&faces)) { + ok = TRUE; + if (!BM_TestHFlag(f, BM_HIDDEN)) { + l_iter = l_first = BM_FACE_FIRST_LOOP(f); + do { + if (!BM_TestHFlag(l_iter->v, BM_SELECT)) { + ok = FALSE; + break; + } + } while ((l_iter = l_iter->next) != l_first); + } + else { + ok = FALSE; + } + + if (ok) { + BM_SetHFlag(f, BM_SELECT); + } + } + + recount_totsels(bm); +} + + /* * BMESH SELECT VERT * Modified: branches/bmesh/blender/source/blender/editors/include/ED_mesh.h =================================================================== --- branches/bmesh/blender/source/blender/editors/include/ED_mesh.h 2012-02-08 14:01:47 UTC (rev 43985) +++ branches/bmesh/blender/source/blender/editors/include/ED_mesh.h 2012-02-08 14:29:14 UTC (rev 43986) @@ -148,11 +148,10 @@ int EDBM_CallAndSelectOpf(struct BMEditMesh *em, struct wmOperator *op, const char *selectslot, const char *fmt, ...); -/*flushes based on the current select mode. if in vertex select mode, - verts select/deselect edges and faces, if in edge select mode, - edges select/deselect faces and vertices, and in face select mode faces select/deselect - edges and vertices.*/ -void EDBM_selectmode_flush(struct BMEditMesh *em); +/* flushes based on the current select mode. if in vertex select mode, + * verts select/deselect edges and faces, if in edge select mode, + * edges select/deselect faces and vertices, and in face select mode faces select/deselect + * edges and vertices.*/ void EDBM_select_more(struct BMEditMesh *em); void EDBM_select_less(struct BMEditMesh *em); @@ -161,8 +160,10 @@ /*exactly the same as EDBM_selectmode_flush, but you pass in the selectmode instead of using the current one*/ void EDBM_select_flush(struct BMEditMesh *em, int selectmode); -void EDBM_deselect_flush(struct BMEditMesh *em); +void EDBM_deselectmode_flush(struct BMEditMesh *em); +void EDBM_selectmode_flush(struct BMEditMesh *em); + void EDBM_selectmode_set(struct BMEditMesh *em); void EDBM_convertsel(struct BMEditMesh *em, short oldmode, short selectmode); void undo_push_mesh(struct bContext *C, const char *name); Modified: branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c =================================================================== --- branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c 2012-02-08 14:01:47 UTC (rev 43985) +++ branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c 2012-02-08 14:29:14 UTC (rev 43986) @@ -425,16 +425,16 @@ em->bm->selectmode = em->selectmode; } -/*BMESH_TODO*/ -void EDBM_deselect_flush(BMEditMesh *UNUSED(em)) +void EDBM_deselectmode_flush(BMEditMesh *em) { + BM_DeSelect_Flush(em->bm); } void EDBM_selectmode_flush(BMEditMesh *em) { em->bm->selectmode = em->selectmode; - BM_SelectMode_Flush(em->bm); + BM_Select_Flush(em->bm); } void EDBM_select_more(BMEditMesh *em) Modified: branches/bmesh/blender/source/blender/editors/object/object_vgroup.c =================================================================== --- branches/bmesh/blender/source/blender/editors/object/object_vgroup.c 2012-02-08 14:01:47 UTC (rev 43985) +++ branches/bmesh/blender/source/blender/editors/object/object_vgroup.c 2012-02-08 14:29:14 UTC (rev 43986) @@ -603,7 +603,7 @@ /* this has to be called, because this function operates on vertices only */ if(select) EDBM_selectmode_flush(em); // vertices to edges/faces - else EDBM_deselect_flush(em); + else EDBM_deselectmode_flush(em); } else { if (me->dvert) { _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs