diff options
author | Campbell Barton <ideasman42@gmail.com> | 2016-03-14 07:32:48 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2016-03-14 07:34:03 +0300 |
commit | a686aa347751fdd988500d175219aa190085cba9 (patch) | |
tree | 197a68e04d09667d0b7f3b971bf8cd80b7afc7d7 /source/blender/blenkernel | |
parent | b9ae96dc121c43332ed30ed9521d5b40578ad2ea (diff) |
Support mdisps for Mesh.flip_normals()
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_mesh.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/mesh_evaluate.c | 19 |
2 files changed, 20 insertions, 2 deletions
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h index 6fde16b47f5..a8f20a4ebc5 100644 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@ -320,6 +320,9 @@ void BKE_mesh_convert_mfaces_to_mpolys_ex( void BKE_mesh_mdisp_flip(struct MDisps *md, const bool use_loop_mdisp_flip); +void BKE_mesh_polygon_flip_ex( + struct MPoly *mpoly, struct MLoop *mloop, struct CustomData *ldata, + struct MDisps *mdisp, const bool use_loop_mdisp_flip); void BKE_mesh_polygon_flip(struct MPoly *mpoly, struct MLoop *mloop, struct CustomData *ldata); void BKE_mesh_polygons_flip(struct MPoly *mpoly, struct MLoop *mloop, struct CustomData *ldata, int totpoly); diff --git a/source/blender/blenkernel/intern/mesh_evaluate.c b/source/blender/blenkernel/intern/mesh_evaluate.c index cd463eb3a34..f200e85b7f3 100644 --- a/source/blender/blenkernel/intern/mesh_evaluate.c +++ b/source/blender/blenkernel/intern/mesh_evaluate.c @@ -3248,12 +3248,20 @@ void BKE_mesh_mdisp_flip(MDisps *md, const bool use_loop_mdisp_flip) * \param mloop the full loops array. * \param ldata the loops custom data. */ -void BKE_mesh_polygon_flip(MPoly *mpoly, MLoop *mloop, CustomData *ldata) +void BKE_mesh_polygon_flip_ex( + MPoly *mpoly, MLoop *mloop, CustomData *ldata, + MDisps *mdisp, const bool use_loop_mdisp_flip) { int loopstart = mpoly->loopstart; int loopend = loopstart + mpoly->totloop - 1; const bool loops_in_ldata = (CustomData_get_layer(ldata, CD_MLOOP) == mloop); + if (mdisp) { + for (int i = mpoly->loopstart; i <= loopend; i++) { + BKE_mesh_mdisp_flip(&mdisp[i], use_loop_mdisp_flip); + } + } + /* Note that we keep same start vertex for flipped face. */ /* We also have to update loops edge @@ -3276,6 +3284,12 @@ void BKE_mesh_polygon_flip(MPoly *mpoly, MLoop *mloop, CustomData *ldata) } } +void BKE_mesh_polygon_flip(MPoly *mpoly, MLoop *mloop, CustomData *ldata) +{ + MDisps *mdisp = CustomData_get_layer(ldata, CD_MDISPS); + BKE_mesh_polygon_flip_ex(mpoly, mloop, ldata, mdisp, true); +} + /** * Flip (invert winding of) all polygons (used to inverse their normals). * @@ -3284,11 +3298,12 @@ void BKE_mesh_polygon_flip(MPoly *mpoly, MLoop *mloop, CustomData *ldata) void BKE_mesh_polygons_flip( MPoly *mpoly, MLoop *mloop, CustomData *ldata, int totpoly) { + MDisps *mdisp = CustomData_get_layer(ldata, CD_MDISPS); MPoly *mp; int i; for (mp = mpoly, i = 0; i < totpoly; mp++, i++) { - BKE_mesh_polygon_flip(mp, mloop, ldata); + BKE_mesh_polygon_flip_ex(mp, mloop, ldata, mdisp, true); } } |