[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23105] branches/bmesh/blender/source/ blender: editmode undo stores data as mesh dna now, instead of bmesh copies .

Joseph Eagar joeedh at gmail.com
Thu Sep 10 08:08:52 CEST 2009


Revision: 23105
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23105
Author:   joeedh
Date:     2009-09-10 08:08:52 +0200 (Thu, 10 Sep 2009)

Log Message:
-----------
editmode undo stores data as mesh dna now, instead of bmesh copies.  also fixed a bug related to vpaint and hide flags.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h
    branches/bmesh/blender/source/blender/blenkernel/intern/library.c
    branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h
    branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
    branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
    branches/bmesh/blender/source/blender/editors/space_view3d/drawobject.c

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h	2009-09-10 04:12:22 UTC (rev 23104)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h	2009-09-10 06:08:52 UTC (rev 23105)
@@ -66,7 +66,7 @@
 	int totloop, int totpoly);
 
 void unlink_mesh(struct Mesh *me);
-void free_mesh(struct Mesh *me);
+void free_mesh(struct Mesh *me, int unlink);
 struct Mesh *add_mesh(char *name);
 struct Mesh *copy_mesh(struct Mesh *me);
 void mesh_update_customdata_pointers(struct Mesh *me);

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/library.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/library.c	2009-09-10 04:12:22 UTC (rev 23104)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/library.c	2009-09-10 06:08:52 UTC (rev 23105)
@@ -516,7 +516,7 @@
 			free_object((Object *)id);
 			break;
 		case ID_ME:
-			free_mesh((Mesh *)id);
+			free_mesh((Mesh *)id, 1);
 			break;
 		case ID_CU:
 			free_curve((Curve *)id);

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2009-09-10 04:12:22 UTC (rev 23104)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2009-09-10 06:08:52 UTC (rev 23105)
@@ -206,9 +206,10 @@
 
 
 /* do not free mesh itself */
-void free_mesh(Mesh *me)
+void free_mesh(Mesh *me, int unlink)
 {
-	unlink_mesh(me);
+	if (unlink)
+		unlink_mesh(me);
 
 	if(me->pv) {
 		if(me->pv->vert_map) MEM_freeN(me->pv->vert_map);

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c	2009-09-10 04:12:22 UTC (rev 23104)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c	2009-09-10 06:08:52 UTC (rev 23105)
@@ -195,7 +195,7 @@
 	float (*projectverts)[3];
 	
 	/*first, find out the largest face in mesh*/
-	for(f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm ); f; f = BMIter_Step(&faces)){
+	BM_ITER(f, &faces, bm, BM_FACES_OF_MESH, NULL) {
 		if (BM_TestHFlag(f, BM_HIDDEN))
 			continue;
 
@@ -209,7 +209,7 @@
 	projectverts = MEM_callocN(sizeof(float) * maxlength * 3, "BM normal computation array");
 	
 	/*calculate all face normals*/
-	for(f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm ); f; f = BMIter_Step(&faces)){
+	BM_ITER(f, &faces, bm, BM_FACES_OF_MESH, NULL) {
 		if (BM_TestHFlag(f, BM_HIDDEN))
 			continue;
 		if (f->head.flag & BM_NONORMCALC)
@@ -219,7 +219,7 @@
 	}
 	
 	/*Zero out vertex normals*/
-	for(v = BMIter_New(&verts, bm, BM_VERTS_OF_MESH, bm ); v; v = BMIter_Step(&verts)) {
+	BM_ITER(v, &verts, bm, BM_VERTS_OF_MESH, NULL) {
 		if (BM_TestHFlag(v, BM_HIDDEN))
 			continue;
 
@@ -227,7 +227,7 @@
 	}
 
 	/*add face normals to vertices*/
-	for(f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm ); f; f = BMIter_Step(&faces)){
+	BM_ITER(f, &faces, bm, BM_FACES_OF_MESH, NULL) {
 		if (BM_TestHFlag(f, BM_HIDDEN))
 			continue;
 
@@ -236,7 +236,7 @@
 	}
 	
 	/*average the vertex normals*/
-	for(v = BMIter_New(&verts, bm, BM_VERTS_OF_MESH, bm ); v; v= BMIter_Step(&verts)){
+	BM_ITER(v, &verts, bm, BM_VERTS_OF_MESH, NULL) {
 		if (BM_TestHFlag(v, BM_HIDDEN))
 			continue;
 

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c	2009-09-10 04:12:22 UTC (rev 23104)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c	2009-09-10 06:08:52 UTC (rev 23105)
@@ -411,12 +411,26 @@
 	{{BMOP_OPSLOT_PNT, "scene"},
 	{BMOP_OPSLOT_PNT, "object"},
 	{0, /*null-terminating sentinel*/}},
-	bmesh_to_mesh_exec,
+	object_load_bmesh_exec,
 	0,
 };
 
 
 /*
+  BMesh to Mesh
+
+  Converts a bmesh to a Mesh
+*/
+BMOpDefine def_bmesh_to_mesh = {
+	"bmesh_to_mesh",
+	{{BMOP_OPSLOT_PNT, "meshptr"}, //pointer to a mesh structure to fill in
+	 {BMOP_OPSLOT_INT, "notesselation"}, //don't calculate mfaces
+	 {0, /*null-terminating sentinel*/}},
+	bmesh_to_mesh_exec,
+	0,
+};
+
+/*
   Mesh to BMesh
 
   Load the contents of a mesh into the bmesh.
@@ -749,6 +763,7 @@
 	&def_pointmerge_facedata,
 	&def_vert_average_facedata,
 	&def_meshrotateuvs,
+	&def_bmesh_to_mesh,
 };
 
 int bmesh_total_ops = (sizeof(opdefines) / sizeof(void*));

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators.c	2009-09-10 04:12:22 UTC (rev 23104)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators.c	2009-09-10 06:08:52 UTC (rev 23105)
@@ -1215,7 +1215,7 @@
 
 	va_start(list, fmt);
 	if (!BMO_VInitOpf(bm, &op, fmt, list)) {
-		printf("BMO_CallOpf failed\n");
+		printf("BMO_CallOpf failed, format is:\n    \"%s\"\n", fmt);
 		va_end(list);
 		return 0;
 	}

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h	2009-09-10 04:12:22 UTC (rev 23104)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h	2009-09-10 06:08:52 UTC (rev 23105)
@@ -52,5 +52,6 @@
 void bmesh_pointmerge_facedata_exec(BMesh *bm, BMOperator *op);
 void bmesh_vert_average_facedata_exec(BMesh *bm, BMOperator *op);
 void bmesh_rotateuvs_exec(BMesh *bm, BMOperator *op);
+void object_load_bmesh_exec(BMesh *bm, BMOperator *op);
 
 #endif

Modified: branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c	2009-09-10 04:12:22 UTC (rev 23104)
+++ branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c	2009-09-10 06:08:52 UTC (rev 23105)
@@ -31,10 +31,7 @@
  *
  * This file contains functions
  * for converting a Mesh
- * into a Bmesh.  will not support non-ngon
- * meshes at first, use the editmesh functions
- * until it's implemented, and remove this
- * comment if it already is. -joeedh
+ * into a Bmesh, and back again.
  *
 */
 
@@ -214,10 +211,18 @@
 	}
 }
 
-void bmesh_to_mesh_exec(BMesh *bm, BMOperator *op) {
+void object_load_bmesh_exec(BMesh *bm, BMOperator *op) {
 	Object *ob = BMO_Get_Pnt(op, "object");
 	Scene *scene = BMO_Get_Pnt(op, "scene");
 	Mesh *me = ob->data;
+
+	BMO_CallOpf(bm, "bmesh_to_mesh meshptr=%p", me);
+
+	/*BMESH_TODO eventually we'll have to handle shapekeys here*/
+}
+
+void bmesh_to_mesh_exec(BMesh *bm, BMOperator *op) {
+	Mesh *me = BMO_Get_Pnt(op, "meshptr");
 	MLoop *mloop;
 	MPoly *mpoly;
 	MVert *mvert, *oldverts;
@@ -229,7 +234,8 @@
 	BMFace *f;
 	BMIter iter, liter;
 	int i, j, ototvert, totloop, totface, numTex, numCol;
-	
+	int dotess = !BMO_Get_Int(op, "notesselation");
+
 	numTex = CustomData_number_of_layers(&bm->pdata, CD_MTEXPOLY);
 	numCol = CustomData_number_of_layers(&bm->ldata, CD_MLOOPCOL);
 
@@ -320,104 +326,104 @@
 		medge++;
 	}
 
-	/*new scanfill tesselation code*/	
-
-	/*first counter number of faces we'll need*/
-	totface = 0;
-	BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) {
-		EditVert *eve, *lasteve = NULL, *firsteve = NULL;
-		EditFace *efa;
-		
-		i = 0;
-		BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) {
-			eve = BLI_addfillvert(l->v->co);
-			eve->tmp.p = l;
+	/*new scanfill tesselation code*/
+	if (dotess) {
+		/*first counter number of faces we'll need*/
+		totface = 0;
+		BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) {
+			EditVert *eve, *lasteve = NULL, *firsteve = NULL;
+			EditFace *efa;
 			
-			BMINDEX_SET(l, i);
+			i = 0;
+			BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) {
+				eve = BLI_addfillvert(l->v->co);
+				eve->tmp.p = l;
+				
+				BMINDEX_SET(l, i);
 
-			if (lasteve) {
-				BLI_addfilledge(lasteve, eve);
-			}
+				if (lasteve) {
+					BLI_addfilledge(lasteve, eve);
+				}
 
-			lasteve = eve;
-			if (!firsteve) firsteve = eve;
+				lasteve = eve;
+				if (!firsteve) firsteve = eve;
 
-			i++;
-		}
+				i++;
+			}
 
-		BLI_addfilledge(lasteve, firsteve);
-		BLI_edgefill(0, 0);
+			BLI_addfilledge(lasteve, firsteve);
+			BLI_edgefill(0, 0);
 
-		for (efa=fillfacebase.first; efa; efa=efa->next)
-			totface++;
+			for (efa=fillfacebase.first; efa; efa=efa->next)
+				totface++;
 
-		BLI_end_edgefill();
-	}
-	
-	me->totface = totface;
+			BLI_end_edgefill();
+		}
+		
+		me->totface = totface;
 
-	/* new tess face block */
-	if(totface==0) mface= NULL;
-	else mface= MEM_callocN(totface*sizeof(MFace), "loadeditbMesh face");
+		/* new tess face block */
+		if(totface==0) mface= NULL;
+		else mface= MEM_callocN(totface*sizeof(MFace), "loadeditbMesh face");
 
-	CustomData_add_layer(&me->fdata, CD_MFACE, CD_ASSIGN, mface, me->totface);
-	CustomData_from_bmeshpoly(&me->fdata, &bm->pdata, &bm->ldata, totface);
+		CustomData_add_layer(&me->fdata, CD_MFACE, CD_ASSIGN, mface, me->totface);
+		CustomData_from_bmeshpoly(&me->fdata, &bm->pdata, &bm->ldata, totface);
 
-	mesh_update_customdata_pointers(me);
-	
-	i = 0;
-	BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) {
-		EditVert *eve, *lasteve = NULL, *firsteve = NULL;
-		EditFace *efa;
-		BMLoop *ls[3];
+		mesh_update_customdata_pointers(me);
 		
-		BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) {
-			eve = BLI_addfillvert(l->v->co);
-			eve->tmp.p = l;
+		i = 0;
+		BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) {
+			EditVert *eve, *lasteve = NULL, *firsteve = NULL;
+			EditFace *efa;
+			BMLoop *ls[3];
+			
+			BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) {
+				eve = BLI_addfillvert(l->v->co);
+				eve->tmp.p = l;
 
-			if (lasteve) {
-				BLI_addfilledge(lasteve, eve);
+				if (lasteve) {
+					BLI_addfilledge(lasteve, eve);
+				}
+
+				lasteve = eve;
+				if (!firsteve) firsteve = eve;
 			}
 
-			lasteve = eve;
-			if (!firsteve) firsteve = eve;
-		}
+			BLI_addfilledge(lasteve, firsteve);
+			BLI_edgefill(0, 0);
 
-		BLI_addfilledge(lasteve, firsteve);
-		BLI_edgefill(0, 0);
+			for (efa=fillfacebase.first; efa; efa=efa->next) {
+				ls[0] = efa->v1->tmp.p;
+				ls[1] = efa->v2->tmp.p;
+				ls[2] = efa->v3->tmp.p;
+				

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list