[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57751] trunk/blender/source/blender: fix [#35858] Weight Paint: Hiding faces isnt flushing the flag to the vertices.

Campbell Barton ideasman42 at gmail.com
Wed Jun 26 04:47:57 CEST 2013


Revision: 57751
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57751
Author:   campbellbarton
Date:     2013-06-26 02:47:56 +0000 (Wed, 26 Jun 2013)
Log Message:
-----------
fix [#35858] Weight Paint: Hiding faces isnt flushing the flag to the vertices.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_mesh.h
    trunk/blender/source/blender/blenkernel/intern/mesh.c
    trunk/blender/source/blender/editors/mesh/editface.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_hide.c
    trunk/blender/source/blender/modifiers/intern/MOD_multires.c

Modified: trunk/blender/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_mesh.h	2013-06-26 01:07:31 UTC (rev 57750)
+++ trunk/blender/source/blender/blenkernel/BKE_mesh.h	2013-06-26 02:47:56 UTC (rev 57751)
@@ -138,18 +138,26 @@
 
 /* update the hide flag for edges and polys from the corresponding
  * flag in verts */
-void BKE_mesh_flush_hidden_from_verts(const struct MVert *mvert,
-                                      const struct MLoop *mloop,
-                                      struct MEdge *medge, int totedge,
-                                      struct MPoly *mpoly, int totpoly);
+void BKE_mesh_flush_hidden_from_verts_ex(const struct MVert *mvert,
+                                         const struct MLoop *mloop,
+                                         struct MEdge *medge, const int totedge,
+                                         struct MPoly *mpoly, const int totpoly);
+void BKE_mesh_flush_hidden_from_verts(struct Mesh *me);
 
+void BKE_mesh_flush_hidden_from_polys_ex(struct MVert *mvert,
+                                         const struct MLoop *mloop,
+                                         struct MEdge *medge, int totedge,
+                                         const struct MPoly *mpoly, const int totpoly);
+void BKE_mesh_flush_hidden_from_polys(struct Mesh *me);
+
+
 void BKE_mesh_flush_select_from_polys_ex(struct MVert *mvert,       const int totvert,
-                                         struct MLoop *mloop,
+                                         const struct MLoop *mloop,
                                          struct MEdge *medge,       const int totedge,
                                          const struct MPoly *mpoly, const int totpoly);
 void BKE_mesh_flush_select_from_polys(struct Mesh *me);
 void BKE_mesh_flush_select_from_verts_ex(const struct MVert *mvert, const int totvert,
-                                         struct MLoop *mloop,
+                                         const struct MLoop *mloop,
                                          struct MEdge *medge,       const int totedge,
                                          struct MPoly *mpoly,       const int totpoly);
 void BKE_mesh_flush_select_from_verts(struct Mesh *me);

Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c	2013-06-26 01:07:31 UTC (rev 57750)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c	2013-06-26 02:47:56 UTC (rev 57751)
@@ -3437,10 +3437,10 @@
 
 /* update the hide flag for edges and faces from the corresponding
  * flag in verts */
-void BKE_mesh_flush_hidden_from_verts(const MVert *mvert,
-                                      const MLoop *mloop,
-                                      MEdge *medge, int totedge,
-                                      MPoly *mpoly, int totpoly)
+void BKE_mesh_flush_hidden_from_verts_ex(const MVert *mvert,
+                                         const MLoop *mloop,
+                                         MEdge *medge, const int totedge,
+                                         MPoly *mpoly, const int totpoly)
 {
 	int i, j;
 	
@@ -3464,12 +3464,59 @@
 		}
 	}
 }
+void BKE_mesh_flush_hidden_from_verts(Mesh *me)
+{
+	BKE_mesh_flush_hidden_from_verts_ex(me->mvert, me->mloop,
+	                                    me->medge, me->totedge,
+	                                    me->mpoly, me->totpoly);
+}
 
+void BKE_mesh_flush_hidden_from_polys_ex(MVert *mvert,
+                                         const MLoop *mloop,
+                                         MEdge *medge, const int UNUSED(totedge),
+                                         const MPoly *mpoly, const int totpoly)
+{
+	const MPoly *mp;
+	int i;
+
+	i = totpoly;
+	for (mp = mpoly; i--; mp++) {
+		if (mp->flag & ME_HIDE) {
+			const MLoop *ml;
+			int j;
+			j = mp->totloop;
+			for (ml = &mloop[mp->loopstart]; j--; ml++) {
+				mvert[ml->v].flag |= ME_HIDE;
+				medge[ml->e].flag |= ME_HIDE;
+			}
+		}
+	}
+
+	i = totpoly;
+	for (mp = mpoly; i--; mp++) {
+		if ((mp->flag & ME_HIDE) == 0) {
+			const MLoop *ml;
+			int j;
+			j = mp->totloop;
+			for (ml = &mloop[mp->loopstart]; j--; ml++) {
+				mvert[ml->v].flag &= ~ME_HIDE;
+				medge[ml->e].flag &= ~ME_HIDE;
+			}
+		}
+	}
+}
+void BKE_mesh_flush_hidden_from_polys(Mesh *me)
+{
+	BKE_mesh_flush_hidden_from_polys_ex(me->mvert, me->mloop,
+	                                    me->medge, me->totedge,
+	                                    me->mpoly, me->totpoly);
+}
+
 /**
  * simple poly -> vert/edge selection.
  */
 void BKE_mesh_flush_select_from_polys_ex(MVert *mvert,       const int totvert,
-                                         MLoop *mloop,
+                                         const MLoop *mloop,
                                          MEdge *medge,       const int totedge,
                                          const MPoly *mpoly, const int totpoly)
 {
@@ -3493,7 +3540,7 @@
 		/* assume if its selected its not hidden and none of its verts/edges are hidden
 		 * (a common assumption)*/
 		if (mp->flag & ME_FACE_SEL) {
-			MLoop *ml;
+			const MLoop *ml;
 			int j;
 			j = mp->totloop;
 			for (ml = &mloop[mp->loopstart]; j--; ml++) {
@@ -3512,7 +3559,7 @@
 }
 
 void BKE_mesh_flush_select_from_verts_ex(const MVert *mvert, const int UNUSED(totvert),
-                                         MLoop *mloop,
+                                         const MLoop *mloop,
                                          MEdge *medge,       const int totedge,
                                          MPoly *mpoly,       const int totpoly)
 {
@@ -3538,7 +3585,7 @@
 	for (mp = mpoly; i--; mp++) {
 		if ((mp->flag & ME_HIDE) == 0) {
 			int ok = TRUE;
-			MLoop *ml;
+			const MLoop *ml;
 			int j;
 			j = mp->totloop;
 			for (ml = &mloop[mp->loopstart]; j--; ml++) {

Modified: trunk/blender/source/blender/editors/mesh/editface.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editface.c	2013-06-26 01:07:31 UTC (rev 57750)
+++ trunk/blender/source/blender/editors/mesh/editface.c	2013-06-26 02:47:56 UTC (rev 57751)
@@ -74,6 +74,8 @@
 	if (me == NULL)
 		return;
 
+	/* note, call #BKE_mesh_flush_hidden_from_verts_ex first when changing hidden flags */
+
 	/* we could call this directly in all areas that change selection,
 	 * since this could become slow for realtime updates (circle-select for eg) */
 	BKE_mesh_flush_select_from_polys(me);
@@ -139,18 +141,20 @@
 	a = me->totpoly;
 	while (a--) {
 		if ((mpoly->flag & ME_HIDE) == 0) {
-			if (unselected) {
-				if ((mpoly->flag & ME_FACE_SEL) == 0) mpoly->flag |= ME_HIDE;
+			if (((mpoly->flag & ME_FACE_SEL) == 0) == unselected) {
+				mpoly->flag |= ME_HIDE;
 			}
-			else {
-				if ((mpoly->flag & ME_FACE_SEL)) mpoly->flag |= ME_HIDE;
-			}
 		}
-		if (mpoly->flag & ME_HIDE) mpoly->flag &= ~ME_FACE_SEL;
+
+		if (mpoly->flag & ME_HIDE) {
+			mpoly->flag &= ~ME_FACE_SEL;
+		}
 		
 		mpoly++;
 	}
 	
+	BKE_mesh_flush_hidden_from_polys(me);
+
 	paintface_flush_flags(ob);
 }
 
@@ -174,6 +178,8 @@
 		mpoly++;
 	}
 
+	BKE_mesh_flush_hidden_from_polys(me);
+
 	paintface_flush_flags(ob);
 }
 

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_hide.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_hide.c	2013-06-26 01:07:31 UTC (rev 57750)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_hide.c	2013-06-26 02:47:56 UTC (rev 57751)
@@ -416,9 +416,7 @@
 	/* ensure that edges and faces get hidden as well (not used by
 	 * sculpt but it looks wrong when entering editmode otherwise) */
 	if (pbvh_type == PBVH_FACES) {
-		BKE_mesh_flush_hidden_from_verts(me->mvert, me->mloop,
-		                                 me->medge, me->totedge,
-		                                 me->mpoly, me->totpoly);
+		BKE_mesh_flush_hidden_from_verts(me);
 	}
 
 	ED_region_tag_redraw(ar);

Modified: trunk/blender/source/blender/modifiers/intern/MOD_multires.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_multires.c	2013-06-26 01:07:31 UTC (rev 57750)
+++ trunk/blender/source/blender/modifiers/intern/MOD_multires.c	2013-06-26 02:47:56 UTC (rev 57751)
@@ -118,12 +118,12 @@
 				                         cddm->getVertArray(cddm),
 				                         mdisps);
 
-				BKE_mesh_flush_hidden_from_verts(cddm->getVertArray(cddm),
-				                                 cddm->getLoopArray(cddm),
-				                                 cddm->getEdgeArray(cddm),
-				                                 cddm->getNumEdges(cddm),
-				                                 cddm->getPolyArray(cddm),
-				                                 cddm->getNumPolys(cddm));
+				BKE_mesh_flush_hidden_from_verts_ex(cddm->getVertArray(cddm),
+				                                    cddm->getLoopArray(cddm),
+				                                    cddm->getEdgeArray(cddm),
+				                                    cddm->getNumEdges(cddm),
+				                                    cddm->getPolyArray(cddm),
+				                                    cddm->getNumPolys(cddm));
 			}
 			if (grid_paint_mask) {
 				float *paint_mask = CustomData_add_layer(&cddm->vertData,




More information about the Bf-blender-cvs mailing list