diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-06-03 03:20:49 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-06-03 03:20:49 +0400 |
commit | dfad9b0c09eed2de2c3bedd64691bf11f637725c (patch) | |
tree | 86298761e9883ca7dc83b3b5a24a859bdd07bfce /source/blender/blenkernel/intern/modifiers_bmesh.c | |
parent | 99b55ef6eb7d677ead66b4166afe45688147a5b3 (diff) |
fix [#35555] Collada: export destroys mesh in some cases
add arguments to calculate normals when converting to bmesh:
BM_mesh_bm_from_me, DM_to_bmesh
This gives some speedup to undo (which didnt need to re-calculate vertex normals), and array modifier which doesnt need to calculate face normals at all
Diffstat (limited to 'source/blender/blenkernel/intern/modifiers_bmesh.c')
-rw-r--r-- | source/blender/blenkernel/intern/modifiers_bmesh.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/source/blender/blenkernel/intern/modifiers_bmesh.c b/source/blender/blenkernel/intern/modifiers_bmesh.c index b5f07176e2b..b7257028316 100644 --- a/source/blender/blenkernel/intern/modifiers_bmesh.c +++ b/source/blender/blenkernel/intern/modifiers_bmesh.c @@ -61,7 +61,7 @@ static BMFace *bm_face_create_from_mpoly(MPoly *mp, MLoop *ml, * * \note The mesh may already have geometry. see 'is_init' */ -void DM_to_bmesh_ex(DerivedMesh *dm, BMesh *bm) +void DM_to_bmesh_ex(DerivedMesh *dm, BMesh *bm, const bool calc_face_normal) { MVert *mv, *mvert; MEdge *me, *medge; @@ -182,11 +182,13 @@ void DM_to_bmesh_ex(DerivedMesh *dm, BMesh *bm) CustomData_to_bmesh_block(&dm->polyData, &bm->pdata, i, &f->head.data, true); - if (face_normals) { - copy_v3_v3(f->no, face_normals[i]); - } - else { - BM_face_normal_update(f); + if (calc_face_normal) { + if (face_normals) { + copy_v3_v3(f->no, face_normals[i]); + } + else { + BM_face_normal_update(f); + } } if (UNLIKELY(has_orig_hflag & BM_FACE)) { @@ -202,7 +204,7 @@ void DM_to_bmesh_ex(DerivedMesh *dm, BMesh *bm) /* converts a cddm to a BMEditMesh. if existing is non-NULL, the * new geometry will be put in there.*/ -BMEditMesh *DM_to_editbmesh(DerivedMesh *dm, BMEditMesh *existing, int do_tessellate) +BMEditMesh *DM_to_editbmesh(DerivedMesh *dm, BMEditMesh *existing, const bool do_tessellate) { BMEditMesh *em = existing; BMesh *bm; @@ -214,7 +216,7 @@ BMEditMesh *DM_to_editbmesh(DerivedMesh *dm, BMEditMesh *existing, int do_tessel bm = BM_mesh_create(&bm_mesh_allocsize_default); } - DM_to_bmesh_ex(dm, bm); + DM_to_bmesh_ex(dm, bm, do_tessellate); if (!em) { em = BKE_editmesh_create(bm, do_tessellate); @@ -228,13 +230,13 @@ BMEditMesh *DM_to_editbmesh(DerivedMesh *dm, BMEditMesh *existing, int do_tessel return em; } -BMesh *DM_to_bmesh(DerivedMesh *dm) +BMesh *DM_to_bmesh(DerivedMesh *dm, const bool calc_face_normal) { BMesh *bm; bm = BM_mesh_create(&bm_mesh_allocsize_default); - DM_to_bmesh_ex(dm, bm); + DM_to_bmesh_ex(dm, bm, calc_face_normal); return bm; } |