From 2abb727ced258796bf54aff637c502cd6554efb7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 22 Dec 2012 08:13:44 +0000 Subject: function for flushing polygon -> vert,edge selection (in object mode), currently unused. --- source/blender/blenkernel/BKE_mesh.h | 5 +++++ source/blender/blenkernel/intern/mesh.c | 39 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h index 7b6f57f9a09..c8218488b3a 100644 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@ -123,6 +123,11 @@ void BKE_mesh_flush_hidden_from_verts(const struct MVert *mvert, struct MEdge *medge, int totedge, struct MPoly *mpoly, int totpoly); +void BKE_mesh_flush_select_from_polys(struct MVert *mvert, const int totvert, + struct MLoop *mloop, + struct MEdge *medge, const int totedge, + const 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 1e6f667c40b..a5fe32e6fe8 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -3107,6 +3107,45 @@ void BKE_mesh_flush_hidden_from_verts(const MVert *mvert, } } +/** + * simple poly -> vert/edge selection. + */ +void BKE_mesh_flush_select_from_polys(MVert *mvert, const int totvert, + MLoop *mloop, + MEdge *medge, const int totedge, + const MPoly *mpoly, const int totpoly) +{ + MVert *mv; + MEdge *med; + const MPoly *mp; + int i; + + i = totvert; + for (mv = mvert; i--; mv++) { + mv->flag &= ~SELECT; + } + + i = totedge; + for (med = medge; i--; med++) { + med->flag &= ~SELECT; + } + + i = totpoly; + for (mp = mpoly; i--; mp++) { + /* 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; + int j; + j = mp->totloop; + for (ml = &mloop[mp->loopstart]; j--; ml++) { + mvert[ml->v].flag |= SELECT; + medge[ml->e].flag |= SELECT; + } + } + } +} + /* basic vertex data functions */ int BKE_mesh_minmax(Mesh *me, float r_min[3], float r_max[3]) { -- cgit v1.2.3