[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41637] branches/bmesh/blender/source: bmesh: fixed merge issues with navmesh (though I' ve not tested if it works yet).

Joseph Eagar joeedh at gmail.com
Tue Nov 8 01:20:50 CET 2011


Revision: 41637
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41637
Author:   joeedh
Date:     2011-11-08 00:20:50 +0000 (Tue, 08 Nov 2011)
Log Message:
-----------
bmesh: fixed merge issues with navmesh (though I've not tested if it works yet).
also fixed a small crasher in bridge.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/navmesh_conversion.c
    branches/bmesh/blender/source/blender/bmesh/bmesh.h
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c
    branches/bmesh/blender/source/blender/bmesh/operators/connectops.c
    branches/bmesh/blender/source/blender/editors/include/ED_mesh.h
    branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
    branches/bmesh/blender/source/blender/editors/mesh/mesh_navmesh.c
    branches/bmesh/blender/source/gameengine/Ketsji/KX_NavMeshObject.cpp

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c	2011-11-07 23:50:12 UTC (rev 41636)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c	2011-11-08 00:20:50 UTC (rev 41637)
@@ -2400,7 +2400,7 @@
 	int *dtrisToPolysMap=NULL, *dtrisToTrisMap=NULL, *trisToFacesMap=NULL;
 	int res;
 
-	result = CDDM_copy(dm);
+	result = CDDM_copy(dm, 0);
 	if (!CustomData_has_layer(&result->faceData, CD_RECAST)) {
 		int *sourceRecastData = (int*)CustomData_get_layer(&dm->faceData, CD_RECAST);
 		if (sourceRecastData) {

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/navmesh_conversion.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/navmesh_conversion.c	2011-11-07 23:50:12 UTC (rev 41636)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/navmesh_conversion.c	2011-11-08 00:20:50 UTC (rev 41637)
@@ -135,7 +135,7 @@
 
 	//calculate number of tris
 	nfaces = dm->getNumFaces(dm);
-	faces = dm->getFaceArray(dm);
+	faces = dm->getTessFaceArray(dm);
 	ntris = nfaces;
 	for (fi=0; fi<nfaces; fi++)
 	{

Modified: branches/bmesh/blender/source/blender/bmesh/bmesh.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/bmesh.h	2011-11-07 23:50:12 UTC (rev 41636)
+++ branches/bmesh/blender/source/blender/bmesh/bmesh.h	2011-11-08 00:20:50 UTC (rev 41637)
@@ -302,6 +302,9 @@
   those vertices*/
 void BM_Kill_Face_Verts(BMesh *bm, BMFace *f) ;
 
+/*clear all data in bm*/
+void BM_Clear_Mesh(BMesh *bm);
+
 /*start/stop edit*/
 void bmesh_begin_edit(struct BMesh *bm, int flag);
 void bmesh_end_edit(struct BMesh *bm, int flag);

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c	2011-11-07 23:50:12 UTC (rev 41636)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c	2011-11-08 00:20:50 UTC (rev 41637)
@@ -160,6 +160,47 @@
 	BMO_ClearStack(bm);
 }
 
+void BM_Clear_Mesh(BMesh *bm)
+{
+	/*allocate the structure*/
+	int vsize, esize, lsize, fsize, lstsize;
+	/*I really need to make the allocation sizes defines, there's no reason why the API
+	  should allow client code to mess around with this - joeedh*/
+	int allocsize[5] = {512, 512, 512, 2048, 512};
+	Object *ob = bm->ob;
+	
+	/*free old mesh*/
+	BM_Free_Mesh_Data(bm);
+	memset(bm, 0, sizeof(BMesh));
+	
+	/*re-initialize mesh*/
+	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], 0, 1);
+	bm->epool = BLI_mempool_create(esize, allocsize[1], allocsize[1], 0, 1);
+	bm->lpool = BLI_mempool_create(lsize, allocsize[2], allocsize[2], 0, 0);
+	bm->looplistpool = BLI_mempool_create(lstsize, allocsize[3], allocsize[3], 0, 0);
+	bm->fpool = BLI_mempool_create(fsize, allocsize[4], allocsize[4], 0, 1);
+
+	/*allocate one flag pool that we dont get rid of.*/
+	bm->toolflagpool = BLI_mempool_create(sizeof(BMFlagLayer), 512, 512, 0, 0);
+	bm->stackdepth = 1;
+	bm->totflags = 1;
+}
+
+/*	
+ *	BMESH FREE MESH
+ *
+ *	Frees a BMesh structure.
+*/
+
 void BM_Free_Mesh(BMesh *bm)
 {
 	BM_Free_Mesh_Data(bm);

Modified: branches/bmesh/blender/source/blender/bmesh/operators/connectops.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/connectops.c	2011-11-07 23:50:12 UTC (rev 41636)
+++ branches/bmesh/blender/source/blender/bmesh/operators/connectops.c	2011-11-08 00:20:50 UTC (rev 41637)
@@ -352,7 +352,7 @@
 		if (wdir == 0) {
 			for (i=0; i<BLI_array_count(ee1); i++) {
 				j = CLAMP_INDEX((i*dir1)+starti, lenv1);
-				if (ee1[j]->l) {
+				if (ee1[j]->l && ee2[j]->l) {
 					wdir = (ee2[j]->l->v == vv2[j]) ? (1) : (-1);
 					break;
 				}

Modified: branches/bmesh/blender/source/blender/editors/include/ED_mesh.h
===================================================================
--- branches/bmesh/blender/source/blender/editors/include/ED_mesh.h	2011-11-07 23:50:12 UTC (rev 41636)
+++ branches/bmesh/blender/source/blender/editors/include/ED_mesh.h	2011-11-08 00:20:50 UTC (rev 41637)
@@ -296,6 +296,7 @@
 int ED_mesh_color_remove(struct bContext *C, struct Object *ob, struct Mesh *me);
 
 void EDBM_selectmode_to_scene(struct bContext *C);
+void EDBM_ClearMesh(struct BMEditMesh *em);
 
 #include "../mesh/editbmesh_bvh.h"
 

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c	2011-11-07 23:50:12 UTC (rev 41636)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c	2011-11-08 00:20:50 UTC (rev 41637)
@@ -94,6 +94,29 @@
 	BM_Compute_Normals(em->bm);
 }
 
+void EDBM_ClearMesh(BMEditMesh *em)
+{
+	/*clear bmesh*/
+	BM_Clear_Mesh(em->bm);
+	
+	/*free derived meshes*/
+	if (em->derivedCage) {
+		em->derivedCage->needsFree = 1;
+		em->derivedCage->release(em->derivedCage);
+	}
+	if (em->derivedFinal && em->derivedFinal != em->derivedCage) {
+		em->derivedFinal->needsFree = 1;
+		em->derivedFinal->release(em->derivedFinal);
+	}
+	
+	em->derivedCage = em->derivedFinal = NULL;
+	
+	/*free tesselation data*/
+	em->tottri = 0;
+	if (em->looptris) 
+		MEM_freeN(em->looptris);
+}
+
 void EDBM_stats_update(BMEditMesh *em)
 {
 	BMIter iter;

Modified: branches/bmesh/blender/source/blender/editors/mesh/mesh_navmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/mesh_navmesh.c	2011-11-07 23:50:12 UTC (rev 41636)
+++ branches/bmesh/blender/source/blender/editors/mesh/mesh_navmesh.c	2011-11-08 00:20:50 UTC (rev 41637)
@@ -46,6 +46,7 @@
 #include "BKE_DerivedMesh.h"
 #include "BKE_cdderivedmesh.h"
 #include "BKE_report.h"
+#include "BKE_tessmesh.h"
 
 #include "BLI_editVert.h"
 #include "BLI_listbase.h"
@@ -90,11 +91,11 @@
 		BLI_linklist_append(&dms, (void*)dm);
 
 		nverts+= dm->getNumVerts(dm);
-		nfaces= dm->getNumFaces(dm);
+		nfaces= dm->getNumTessFaces(dm);
 		ntris+= nfaces;
 
 		/* resolve quad faces */
-		mface= dm->getFaceArray(dm);
+		mface= dm->getTessFaceArray(dm);
 		for(i= 0; i<nfaces; i++) {
 			MFace* mf= &mface[i];
 			if(mf->v4)
@@ -129,8 +130,8 @@
 		}
 
 		/* create tris */
-		curnfaces= dm->getNumFaces(dm);
-		mface= dm->getFaceArray(dm);
+		curnfaces= dm->getNumTessFaces(dm);
+		mface= dm->getTessFaceArray(dm);
 
 		for(i= 0; i<curnfaces; i++) {
 			MFace* mf= &mface[i];
@@ -292,7 +293,7 @@
 static Object* createRepresentation(bContext *C, struct recast_polyMesh *pmesh, struct recast_polyMeshDetail *dmesh, Base* base)
 {
 	float co[3], rot[3];
-	EditMesh *em;
+	BMEditMesh *em;
 	int i,j, k;
 	unsigned short* v;
 	int face[3];
@@ -320,14 +321,11 @@
 	}
 
 	ED_object_enter_editmode(C, EM_DO_UNDO|EM_IGNORE_LAYER);
-	em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
+	em= (((Mesh *)obedit->data))->edit_btmesh;
 
 	if(!createob) {
 		/* clear */
-		if(em->verts.first) free_vertlist(em, &em->verts);
-		if(em->edges.first) free_edgelist(em, &em->edges);
-		if(em->faces.first) free_facelist(em, &em->faces);
-		if(em->selected.first) BLI_freelistN(&(em->selected));
+		EDBM_ClearMesh(em);
 	}
 
 	/* create verts for polygon mesh */
@@ -341,12 +339,12 @@
 		co[1]= bmin[1] + v[1]*ch;
 		co[2]= bmin[2] + v[2]*cs;
 		SWAP(float, co[1], co[2]);
-		addvertlist(em, co, NULL);
+		BM_Make_Vert(em->bm, co, NULL);
 	}
 
 	/* create custom data layer to save polygon idx */
-	CustomData_add_layer_named(&em->fdata, CD_RECAST, CD_CALLOC, NULL, 0, "createRepresentation recastData");
-
+	CustomData_add_layer_named(&em->bm->pdata, CD_RECAST, CD_CALLOC, NULL, 0, "createRepresentation recastData");
+	
 	/* create verts and faces for detailed mesh */
 	meshes= recast_polyMeshDetailGetMeshes(dmesh, &nmeshes);
 	polys= recast_polyMeshGetPolys(pmesh, NULL, &nvp);
@@ -354,7 +352,7 @@
 	tris= recast_polyMeshDetailGetTris(dmesh, NULL);
 
 	for(i= 0; i<nmeshes; i++) {
-		int uniquevbase= em->totvert;
+		int uniquevbase= em->bm->totvert;
 		unsigned int vbase= meshes[4*i+0];
 		unsigned short ndv= meshes[4*i+1];
 		unsigned short tribase= meshes[4*i+2];
@@ -371,15 +369,15 @@
 		for(j= nv; j<ndv; j++) {
 			copy_v3_v3(co, &dverts[3*(vbase + j)]);
 			SWAP(float, co[1], co[2]);
-			addvertlist(em, co, NULL);
+			BM_Make_Vert(em->bm, co, NULL);
 		}
 
-		EM_init_index_arrays(em, 1, 0, 0);
+		EDBM_init_index_arrays(em, 1, 0, 0);
 
 		/* create faces */
 		for(j= 0; j<trinum; j++) {
 			unsigned char* tri= &tris[4*(tribase+j)];
-			EditFace* newFace;
+			BMFace* newFace;
 			int* polygonIdx;
 
 			for(k= 0; k<3; k++) {
@@ -388,22 +386,20 @@
 				else
 					face[k]= uniquevbase+tri[k]-nv; /* unique vertex */
 			}
-			newFace= addfacelist(em, EM_get_vert_for_index(face[0]), EM_get_vert_for_index(face[2]),
-									EM_get_vert_for_index(face[1]), NULL, NULL, NULL);
+			newFace= BM_Make_QuadTri(em->bm, EDBM_get_vert_for_index(em, face[0]), EDBM_get_vert_for_index(em, face[2]),
+									EDBM_get_vert_for_index(em, face[1]), NULL, NULL, 0);
 
 			/* set navigation polygon idx to the custom layer */
-			polygonIdx= (int*)CustomData_em_get(&em->fdata, newFace->data, CD_RECAST);
+			polygonIdx= (int*)CustomData_bmesh_get(&em->bm->pdata, newFace->head.data, CD_RECAST);
 			*polygonIdx= i+1; /* add 1 to avoid zero idx */
 		}
 		
-		EM_free_index_arrays();
+		EDBM_free_index_arrays(em);
 	}
 
 	recast_destroyPolyMesh(pmesh);
 	recast_destroyPolyMeshDetail(dmesh);
 
-	BKE_mesh_end_editmesh((Mesh*)obedit->data, em);
-	
 	DAG_id_tag_update((ID*)obedit->data, OB_RECALC_DATA);
 	WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data);
 
@@ -485,22 +481,23 @@
 static int navmesh_face_copy_exec(bContext *C, wmOperator *op)
 {
 	Object *obedit= CTX_data_edit_object(C);
-	EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
+	BMEditMesh *em= ((Mesh *)obedit->data)->edit_btmesh;
 
 	/* do work here */
-	EditFace *efa_act= EM_get_actFace(em, 0);
+	BMFace *efa_act= BM_get_actFace(em->bm, 0);
 
 	if(efa_act) {

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list