[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