diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-12-22 17:42:06 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-12-22 17:42:06 +0400 |
commit | 634be5992d8f3b76b510ff7cf19a1b43a18d1a21 (patch) | |
tree | 670208dd198c1237ee2b705f4c06286461e9ef8b /source/blender/blenkernel | |
parent | c5cb2c8b33c8684754c2054b3ad73a72267b8b2e (diff) |
flush selection when switching weight paint vertex/face selection modes.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_mesh.h | 5 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/mesh.c | 47 |
2 files changed, 52 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h index c8218488b3a..eb0fc5b103c 100644 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@ -128,6 +128,11 @@ void BKE_mesh_flush_select_from_polys(struct MVert *mvert, const int totve 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); diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index a5fe32e6fe8..cc6489b68f9 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -3146,6 +3146,53 @@ void BKE_mesh_flush_select_from_polys(MVert *mvert, const int totvert, } } +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]) { |