[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