[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43986] branches/bmesh/blender/source/ blender: fix [#30103] Select vertex groups works only in vertex select mode
Campbell Barton
ideasman42 at gmail.com
Wed Feb 8 15:29:20 CET 2012
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) {
More information about the Bf-blender-cvs
mailing list