[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44065] branches/bmesh/blender/source/ blender: bmesh minor refactor

Campbell Barton ideasman42 at gmail.com
Sun Feb 12 18:44:19 CET 2012


Revision: 44065
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44065
Author:   campbellbarton
Date:     2012-02-12 17:44:10 +0000 (Sun, 12 Feb 2012)
Log Message:
-----------
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.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/BKE_DerivedMesh.h
    branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
    branches/bmesh/blender/source/blender/blenlib/intern/smallhash.c
    branches/bmesh/blender/source/blender/bmesh/bmesh.h
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c
    branches/bmesh/blender/source/blender/bmesh/operators/bmo_mesh_conv.c
    branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
    branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_bevel.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_edgesplit.c

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2012-02-12 17:16:47 UTC (rev 44064)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2012-02-12 17:44:10 UTC (rev 44065)
@@ -441,8 +441,13 @@
 void DM_to_mesh(DerivedMesh *dm, struct Mesh *me, struct Object *ob);
 
 struct BMEditMesh *DM_to_editbmesh(struct Object *ob, struct DerivedMesh *dm,
-                               struct BMEditMesh *existing, int do_tesselate);
+                                   struct BMEditMesh *existing, int do_tesselate);
 
+/* conversion to bmesh only */
+void          DM_to_bmesh_ex(struct DerivedMesh *dm, struct BMesh *bm);
+struct BMesh *DM_to_bmesh(struct Object *ob, struct DerivedMesh *dm);
+
+
 /* utility function to convert a DerivedMesh to a shape key block 
  */
 void DM_to_meshkey(DerivedMesh *dm, struct Mesh *me, struct KeyBlock *kb);

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2012-02-12 17:16:47 UTC (rev 44064)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2012-02-12 17:44:10 UTC (rev 44065)
@@ -526,9 +526,8 @@
 BMesh *BKE_mesh_to_bmesh(Mesh *me, Object *ob)
 {
 	BMesh *bm;
-	int allocsize[4] = {512,512,2048,512};
 
-	bm = BM_mesh_create(ob, allocsize);
+	bm = BM_mesh_create(ob, bm_mesh_allocsize_default);
 
 	BMO_op_callf(bm, "mesh_to_bmesh mesh=%p object=%p set_shapekey=%i", me, ob, 1);
 

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c	2012-02-12 17:16:47 UTC (rev 44064)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c	2012-02-12 17:44:10 UTC (rev 44065)
@@ -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,12 +53,7 @@
 	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);
 	CustomData_bmesh_merge(&dm->edgeData, &bm->edata, CD_MASK_DERIVEDMESH, CD_CALLOC, bm, BM_EDGE);
@@ -101,7 +90,7 @@
 		etable[i] = e;
 	}
 	MEM_freeN(medge);
-	
+
 	/*do faces*/
 	mpoly = mp = dm->getPolyArray(dm);
 	mloop = dm->getLoopArray(dm);
@@ -141,10 +130,23 @@
 
 	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 @@
 
 	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;
+}

Modified: branches/bmesh/blender/source/blender/blenlib/intern/smallhash.c
===================================================================
--- branches/bmesh/blender/source/blender/blenlib/intern/smallhash.c	2012-02-12 17:16:47 UTC (rev 44064)
+++ branches/bmesh/blender/source/blender/blenlib/intern/smallhash.c	2012-02-12 17:44:10 UTC (rev 44065)
@@ -25,9 +25,10 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
+#include <string.h>
+
 #include "MEM_guardedalloc.h"
 #include "BLI_utildefines.h"
-#include <string.h>
 
 #include "BLI_smallhash.h"
 
@@ -43,7 +44,7 @@
 #define SMHASH_CELL_FREE	((void *)0x7FFFFFFD)
 
 #define SMHASH_NONZERO(n) ((n) + !(n))
-#define SMHASH_NEXT(h, hoff) ABS(((h) + ((hoff=SMHASH_NONZERO(hoff*2)+1), hoff)))
+#define SMHASH_NEXT(h, hoff) ABS(((h) + ((hoff = SMHASH_NONZERO(hoff * 2) + 1), hoff)))
 
 extern unsigned int hashsizes[];
 
@@ -60,7 +61,7 @@
 	hash->copytable = hash->_copytable;
 	hash->stacktable = hash->_stacktable;
 
-	for (i=0; i<hash->size; i++) {
+	for (i = 0; i < hash->size; i++) {
 		hash->table[i].val = SMHASH_CELL_FREE;
 	}
 }
@@ -98,11 +99,11 @@
 
 		hash->size = newsize;
 
-		for (i=0; i<hash->size; i++) {
+		for (i = 0; i < hash->size; i++) {
 			hash->table[i].val = SMHASH_CELL_FREE;
 		}
 
-		for (i=0; i<hashsizes[hash->curhash-1]; i++) {
+		for (i = 0; i<hashsizes[hash->curhash - 1]; i++) {
 			if (ELEM(tmp[i].val, SMHASH_CELL_UNUSED, SMHASH_CELL_FREE)) {
 				continue;
 			}
@@ -228,7 +229,7 @@
 
 			iter->i++;
 
-			return iter->hash->table[iter->i-1].val;
+			return iter->hash->table[iter->i - 1].val;
 		}
 
 		iter->i++;

Modified: branches/bmesh/blender/source/blender/bmesh/bmesh.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/bmesh.h	2012-02-12 17:16:47 UTC (rev 44064)
+++ branches/bmesh/blender/source/blender/bmesh/bmesh.h	2012-02-12 17:44:10 UTC (rev 44065)
@@ -112,9 +112,10 @@
 void bmesh_error(void);
 
 /* Mesh Level Ops */
+extern int bm_mesh_allocsize_default[4];
 
 /* ob is needed by multires */
-BMesh *BM_mesh_create(struct Object *ob, int allocsize[4]);
+BMesh *BM_mesh_create(struct Object *ob, const int allocsize[4]);
 BMesh *BM_mesh_copy(BMesh *bmold);
 void   BM_mesh_free(BMesh *bm);
 

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c	2012-02-12 17:16:47 UTC (rev 44064)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c	2012-02-12 17:44:10 UTC (rev 44065)
@@ -658,21 +658,20 @@
 	BMFace *f, *f2, **ftable = NULL;
 	BMEditSelection *ese;
 	BMIter iter, liter;
-	int allocsize[4] = {512, 512, 2048, 512};
 	int i, j;
 
 	/* allocate a bmesh */
-	bm = BM_mesh_create(bmold->ob, allocsize);
+	bm = BM_mesh_create(bmold->ob, bm_mesh_allocsize_default);
 
 	CustomData_copy(&bmold->vdata, &bm->vdata, CD_MASK_BMESH, CD_CALLOC, 0);
 	CustomData_copy(&bmold->edata, &bm->edata, CD_MASK_BMESH, CD_CALLOC, 0);
 	CustomData_copy(&bmold->ldata, &bm->ldata, CD_MASK_BMESH, CD_CALLOC, 0);
 	CustomData_copy(&bmold->pdata, &bm->pdata, CD_MASK_BMESH, CD_CALLOC, 0);
 
-	CustomData_bmesh_init_pool(&bm->vdata, allocsize[0]);
-	CustomData_bmesh_init_pool(&bm->edata, allocsize[1]);
-	CustomData_bmesh_init_pool(&bm->ldata, allocsize[2]);
-	CustomData_bmesh_init_pool(&bm->pdata, allocsize[3]);
+	CustomData_bmesh_init_pool(&bm->vdata, bm_mesh_allocsize_default[0]);
+	CustomData_bmesh_init_pool(&bm->edata, bm_mesh_allocsize_default[1]);
+	CustomData_bmesh_init_pool(&bm->ldata, bm_mesh_allocsize_default[2]);
+	CustomData_bmesh_init_pool(&bm->pdata, bm_mesh_allocsize_default[3]);
 
 	vtable = MEM_mallocN(sizeof(BMVert *) * bmold->totvert, "BM_mesh_copy vtable");
 	etable = MEM_mallocN(sizeof(BMEdge *) * bmold->totedge, "BM_mesh_copy etable");

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c	2012-02-12 17:16:47 UTC (rev 44064)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c	2012-02-12 17:44:10 UTC (rev 44065)
@@ -47,6 +47,9 @@
 
 #include "bmesh_private.h"
 
+/* used as an extern, defined in bmesh.h */
+int bm_mesh_allocsize_default[4] = {512, 512, 2048, 512};
+
 /* bmesh_error stub */
 void bmesh_error(void)
 {
@@ -58,6 +61,18 @@
 	BLI_assert(0);
 }
 
+static void bmesh_mempool_init(BMesh *bm, const int allocsize[4])
+{
+	bm->vpool =        BLI_mempool_create(sizeof(BMVert),     allocsize[0], allocsize[0], FALSE, TRUE);
+	bm->epool =        BLI_mempool_create(sizeof(BMEdge),     allocsize[1], allocsize[1], FALSE, TRUE);
+	bm->lpool =        BLI_mempool_create(sizeof(BMLoop),     allocsize[2], allocsize[2], FALSE, FALSE);
+	bm->looplistpool = BLI_mempool_create(sizeof(BMLoopList), allocsize[3], allocsize[3], FALSE, FALSE);
+	bm->fpool =        BLI_mempool_create(sizeof(BMFace),     allocsize[3], allocsize[3], FALSE, TRUE);
+
+	/* allocate one flag pool that we dont get rid of. */
+	bm->toolflagpool = BLI_mempool_create(sizeof(BMFlagLayer), 512, 512, FALSE, FALSE);
+}
+
 /*
  *	BMESH MAKE MESH
  *
@@ -67,29 +82,17 @@
  *
  */
 
-BMesh *BM_mesh_create(struct Object *ob, int allocsize[4])
+BMesh *BM_mesh_create(struct Object *ob, const int allocsize[4])
 {
 	/* allocate the structure */
 	BMesh *bm = MEM_callocN(sizeof(BMesh), __func__);
-	int vsize, esize, lsize, fsize, lstsize;
 
-	vsize = sizeof(BMVert);
-	esize = sizeof(BMEdge);
-	lsize = sizeof(BMLoop);
-	fsize = sizeof(BMFace);
-	lstsize = sizeof(BMLoopList);
-
 	bm->ob = ob;
 	
 	/* allocate the memory pools for the mesh elements */
-	bm->vpool = BLI_mempool_create(vsize, allocsize[0], allocsize[0], FALSE, TRUE);
-	bm->epool = BLI_mempool_create(esize, allocsize[1], allocsize[1], FALSE, TRUE);
-	bm->lpool = BLI_mempool_create(lsize, allocsize[2], allocsize[2], FALSE, FALSE);
-	bm->looplistpool = BLI_mempool_create(lstsize, allocsize[3], allocsize[3], FALSE, FALSE);
-	bm->fpool = BLI_mempool_create(fsize, allocsize[3], allocsize[3], FALSE, TRUE);
+	bmesh_mempool_init(bm, allocsize);
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list