[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53267] trunk/blender/source/blender: flush selection when switching weight paint vertex/face selection modes.

Campbell Barton ideasman42 at gmail.com
Sat Dec 22 14:42:06 CET 2012


Revision: 53267
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53267
Author:   campbellbarton
Date:     2012-12-22 13:42:06 +0000 (Sat, 22 Dec 2012)
Log Message:
-----------
flush selection when switching weight paint vertex/face selection modes.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_mesh.h
    trunk/blender/source/blender/blenkernel/intern/mesh.c
    trunk/blender/source/blender/makesrna/intern/rna_mesh.c

Modified: trunk/blender/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_mesh.h	2012-12-22 13:39:44 UTC (rev 53266)
+++ trunk/blender/source/blender/blenkernel/BKE_mesh.h	2012-12-22 13:42:06 UTC (rev 53267)
@@ -128,6 +128,11 @@
                                       struct MEdge *medge,       const int totedge,
                                       const struct MPoly *mpoly, const int totpoly);
 
+void BKE_mesh_flush_select_from_verts(const struct MVert *mvert, const int totvert,
+                                      struct MLoop *mloop,
+                                      struct MEdge *medge,       const int totedge,
+                                      struct MPoly *mpoly,       const int totpoly);
+
 void BKE_mesh_unlink(struct Mesh *me);
 void BKE_mesh_free(struct Mesh *me, int unlink);
 struct Mesh *BKE_mesh_add(const char *name);

Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c	2012-12-22 13:39:44 UTC (rev 53266)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c	2012-12-22 13:42:06 UTC (rev 53267)
@@ -3146,6 +3146,53 @@
 	}
 }
 
+void BKE_mesh_flush_select_from_verts(const MVert *mvert, const int UNUSED(totvert),
+                                      MLoop *mloop,
+                                      MEdge *medge,       const int totedge,
+                                      MPoly *mpoly,       const int totpoly)
+{
+	MEdge *med;
+	MPoly *mp;
+	int i;
+
+	/* edges */
+	i = totedge;
+	for (med = medge; i--; med++) {
+		if ((med->flag & ME_HIDE) == 0) {
+			if ((mvert[med->v1].flag & SELECT) && (mvert[med->v2].flag & SELECT)) {
+				med->flag |= SELECT;
+			}
+			else {
+				med->flag &= ~SELECT;
+			}
+		}
+	}
+
+	/* polys */
+	i = totpoly;
+	for (mp = mpoly; i--; mp++) {
+		if ((mp->flag & ME_HIDE) == 0) {
+			int ok = TRUE;
+			MLoop *ml;
+			int j;
+			j = mp->totloop;
+			for (ml = &mloop[mp->loopstart]; j--; ml++) {
+				if ((mvert[ml->v].flag & SELECT) == 0) {
+					ok = FALSE;
+					break;
+				}
+			}
+
+			if (ok) {
+				mp->flag |= ME_FACE_SEL;
+			}
+			else {
+				mp->flag &= ~ME_FACE_SEL;
+			}
+		}
+	}
+}
+
 /* basic vertex data functions */
 int BKE_mesh_minmax(Mesh *me, float r_min[3], float r_max[3])
 {

Modified: trunk/blender/source/blender/makesrna/intern/rna_mesh.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_mesh.c	2012-12-22 13:39:44 UTC (rev 53266)
+++ trunk/blender/source/blender/makesrna/intern/rna_mesh.c	2012-12-22 13:42:06 UTC (rev 53267)
@@ -153,7 +153,11 @@
 {
 	Mesh *me = ptr->data;
 	if ((me->editflag & ME_EDIT_VERT_SEL) && (me->editflag & ME_EDIT_PAINT_MASK)) {
-		me->editflag ^= ME_EDIT_PAINT_MASK;
+		me->editflag &= ~ME_EDIT_PAINT_MASK;
+		BKE_mesh_flush_select_from_polys(me->mvert, me->totvert,
+		                                 me->mloop,
+		                                 me->medge, me->totedge,
+		                                 me->mpoly, me->totpoly);
 	}
 	rna_Mesh_update_draw(bmain, scene, ptr);
 }
@@ -162,7 +166,11 @@
 {
 	Mesh *me = ptr->data;
 	if ((me->editflag & ME_EDIT_VERT_SEL) && (me->editflag & ME_EDIT_PAINT_MASK)) {
-		me->editflag ^= ME_EDIT_VERT_SEL;
+		me->editflag &= ~ME_EDIT_VERT_SEL;
+		BKE_mesh_flush_select_from_verts(me->mvert, me->totvert,
+		                                 me->mloop,
+		                                 me->medge, me->totedge,
+		                                 me->mpoly, me->totpoly);
 	}
 	rna_Mesh_update_draw(bmain, scene, ptr);
 }




More information about the Bf-blender-cvs mailing list