From 9a92cd80087d5d8158c6af27d2ae3d2da4856ef0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 12 Feb 2012 17:44:10 +0000 Subject: bmesh minor refactor * add DM_to_bmesh_ex, DM_to_bmesh for converting a derived mesh to a BMesh (rather than a BMEditMesh) * have a generic variable for allocsize: bm_mesh_allocsize_default, rather than copying the values about. --- source/blender/blenkernel/intern/modifiers_bmesh.c | 49 ++++++++++++++-------- 1 file changed, 31 insertions(+), 18 deletions(-) (limited to 'source/blender/blenkernel/intern/modifiers_bmesh.c') diff --git a/source/blender/blenkernel/intern/modifiers_bmesh.c b/source/blender/blenkernel/intern/modifiers_bmesh.c index b3e0c298bbe..2fdf0e0bb70 100644 --- a/source/blender/blenkernel/intern/modifiers_bmesh.c +++ b/source/blender/blenkernel/intern/modifiers_bmesh.c @@ -22,12 +22,11 @@ * * ***** END GPL LICENSE BLOCK ***** * - * Modifier stack implementation. - * - * BKE_modifier.h contains the function prototypes for this file. - * */ +/** \file blender/blenkernel/intern/modifiers_bmesh.c + * \ingroup bke + */ #include "BLI_math.h" @@ -40,14 +39,9 @@ #include "BKE_bmesh.h" #include "BKE_tessmesh.h" - -/* converts a cddm to a BMEditMesh. if existing is non-NULL, the - * new geometry will be put in there.*/ -BMEditMesh *DM_to_editbmesh(Object *ob, DerivedMesh *dm, BMEditMesh *existing, int do_tesselate) +/* main function for copying DerivedMesh data into BMesh */ +void DM_to_bmesh_ex(DerivedMesh *dm, BMesh *bm) { - int allocsize[4] = {512, 512, 2048, 512}; - BMesh *bm, bmold; /*bmold is for storing old customdata layout*/ - BMEditMesh *em = existing; MVert *mv, *mvert; MEdge *me, *medge; MPoly *mpoly, *mp; @@ -59,11 +53,6 @@ BMEditMesh *DM_to_editbmesh(Object *ob, DerivedMesh *dm, BMEditMesh *existing, i BLI_array_declare(verts); BLI_array_declare(edges); int i, j, k, totvert, totedge, totface; - - if (em) bm = em->bm; - else bm = BM_mesh_create(ob, allocsize); - - bmold = *bm; /*merge custom data layout*/ CustomData_bmesh_merge(&dm->vertData, &bm->vdata, CD_MASK_DERIVEDMESH, CD_CALLOC, bm, BM_VERT); @@ -101,7 +90,7 @@ BMEditMesh *DM_to_editbmesh(Object *ob, DerivedMesh *dm, BMEditMesh *existing, i etable[i] = e; } MEM_freeN(medge); - + /*do faces*/ mpoly = mp = dm->getPolyArray(dm); mloop = dm->getLoopArray(dm); @@ -141,9 +130,22 @@ BMEditMesh *DM_to_editbmesh(Object *ob, DerivedMesh *dm, BMEditMesh *existing, i MEM_freeN(vtable); MEM_freeN(etable); - + BLI_array_free(verts); BLI_array_free(edges); +} + +/* converts a cddm to a BMEditMesh. if existing is non-NULL, the + * new geometry will be put in there.*/ +BMEditMesh *DM_to_editbmesh(Object *ob, DerivedMesh *dm, BMEditMesh *existing, int do_tesselate) +{ + BMEditMesh *em = existing; + BMesh *bm; + + if (em) bm = em->bm; + else bm = BM_mesh_create(ob, bm_mesh_allocsize_default); + + DM_to_bmesh_ex(dm, bm); if (!em) { em = BMEdit_Create(bm, do_tesselate); @@ -156,3 +158,14 @@ BMEditMesh *DM_to_editbmesh(Object *ob, DerivedMesh *dm, BMEditMesh *existing, i return em; } + +BMesh *DM_to_bmesh(Object *ob, DerivedMesh *dm) +{ + BMesh *bm; + + bm = BM_mesh_create(ob, bm_mesh_allocsize_default); + + DM_to_bmesh_ex(dm, bm); + + return bm; +} -- cgit v1.2.3