[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39869] branches/bmesh/blender/source/ blender/blenkernel/intern/editderivedbmesh.c: Bmesh: fix array copies ( fixes snapping), from patch #28429 by Andrew Wiggin (ender79

Howard Trickey howard.trickey at gmail.com
Fri Sep 2 12:43:17 CEST 2011


Revision: 39869
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39869
Author:   howardt
Date:     2011-09-02 10:43:16 +0000 (Fri, 02 Sep 2011)
Log Message:
-----------
Bmesh: fix array copies (fixes snapping), from patch #28429 by Andrew Wiggin (ender79

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c	2011-09-02 09:39:21 UTC (rev 39868)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c	2011-09-02 10:43:16 UTC (rev 39869)
@@ -1174,12 +1174,9 @@
 		edge_r->crease = (unsigned char) (BM_GetCDf(&bm->edata, e, CD_CREASE)*255.0f);
 	}
 
-	edge_r->flag = ME_EDGEDRAW|ME_EDGERENDER;
+	/* Should this be set in BMFlags_To_MEFlags? */
+	edge_r->flag = ME_EDGERENDER;
 	edge_r->flag |= BMFlags_To_MEFlags(e);
-#if 0
-	/* this needs setup of f2 field */
-	if (!ee->f2) edge_r->flag |= ME_LOOSEEDGE;
-#endif
 	
 	edge_r->v1 = GET_INT_FROM_POINTER(BLI_ghash_lookup(bmdm->vhash, e->v1));
 	edge_r->v2 = GET_INT_FROM_POINTER(BLI_ghash_lookup(bmdm->vhash, e->v2));
@@ -1248,7 +1245,7 @@
 		BM_SetIndex(ev, i);
 
 	ee = BMIter_New(&iter, bm, BM_EDGES_OF_MESH, NULL);
-	for( ; ee; ee=BMIter_Step(&iter)) {
+	for( ; ee; ee=BMIter_Step(&iter), edge_r++) {
 		if (has_bweight) {
 			edge_r->bweight = (unsigned char) (BM_GetCDf(&bm->edata, ee, CD_BWEIGHT)*255.0f);
 		}
@@ -1257,13 +1254,9 @@
 			edge_r->crease = (unsigned char) (BM_GetCDf(&bm->edata, ee, CD_CREASE)*255.0f);
 		}
 
-		edge_r->flag = ME_EDGEDRAW|ME_EDGERENDER;
-		if (ee->head.flag & BM_SEAM) edge_r->flag |= ME_SEAM;
-		if (ee->head.flag & BM_SHARP) edge_r->flag |= ME_SHARP;
-#if 0
-		/* this needs setup of f2 (edge draw flags, if I remember right) field */
-		if (!ee->f2) edge_r->flag |= ME_LOOSEEDGE;
-#endif
+		/* Should this be set in BMFlags_To_MEFlags? */
+		edge_r->flag = ME_EDGERENDER;
+		edge_r->flag |= BMFlags_To_MEFlags(ee);
 
 		edge_r->v1 = (int)BM_GetIndex(ee->v1);
 		edge_r->v2 = (int)BM_GetIndex(ee->v2);
@@ -1281,22 +1274,24 @@
 	int i;
 
 	/* store vertexes indices in tmp union */
-	ev = BMIter_New(&iter, bm, BM_VERTS_OF_MESH, NULL);
-	for (i=0; ev; ev=BMIter_Step(&iter), i++)
-		BM_SetIndex(ev, i);
+	i = 0;
+	BM_ITER(ev, &iter, bm, BM_VERTS_OF_MESH, NULL)
+		BM_SetIndex(ev, i++);
 
-	for (i=0; i<bmdm->tc->tottri; i++) {
+	for (i=0; i<bmdm->tc->tottri; i++, face_r++) {
 		l = bmdm->tc->looptris[i];
 		ef = l[0]->f;
 
 		face_r->mat_nr = (unsigned char) ef->mat_nr;
 
-		/*HACK/BMESH_TODO: need to convert this*/
-		face_r->flag = ef->head.flag;
+		face_r->flag = BMFlags_To_MEFlags(ef);
 
 		face_r->v1 = BM_GetIndex(l[0]->v);
 		face_r->v2 = BM_GetIndex(l[1]->v);
 		face_r->v3 = BM_GetIndex(l[2]->v);
+		/*BMESH_TODO: zero is not the best way to signal that
+		  the face is a triangle and not a quad, since 0 is
+		  also the index assigned to a real vertex*/
 		face_r->v4 = 0;
 
 		test_index_face(face_r, NULL, 0, 3);
@@ -1331,6 +1326,7 @@
 			loop_r[i].v = BM_GetIndex(l->v);
 			loop_r[i].e = BM_GetIndex(l->e);
 			i++;
+			loop_r++;
 		}
 	}
 }
@@ -1351,6 +1347,7 @@
 		poly_r[i].mat_nr = f->mat_nr;
 
 		i++;
+		poly_r++;
 		j += f->len;
 	}
 }




More information about the Bf-blender-cvs mailing list