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.
This commit is contained in:
2012-02-12 17:44:10 +00:00
parent 9099e59da8
commit 9a92cd8008
12 changed files with 81 additions and 81 deletions

View File

@@ -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;
}