[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45672] trunk/blender/source/blender/ blenkernel/intern: bmesh api todo:

Campbell Barton ideasman42 at gmail.com
Mon Apr 16 06:17:38 CEST 2012


Revision: 45672
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45672
Author:   campbellbarton
Date:     2012-04-16 04:17:33 +0000 (Mon, 16 Apr 2012)
Log Message:
-----------
bmesh api todo:
emDM_getTessFaceDataArray now returns UV's and Colors from editmode loops.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c

Modified: trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2012-04-16 02:28:18 UTC (rev 45671)
+++ trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2012-04-16 04:17:33 UTC (rev 45672)
@@ -1989,13 +1989,6 @@
 	cddm->mloop = CustomData_get_layer(&dm->loopData, CD_MLOOP);
 	cddm->mpoly = CustomData_get_layer(&dm->polyData, CD_MPOLY);
 
-	/* any callers that need tessface data can calculate it - campbell */
-#if 0
-	/* BMESH_TODO: Find out why this is necessary (or else find a way to remove
-	 * it). If it is necessary, add a comment explaining why. */
-	CDDM_recalc_tessellation((DerivedMesh *)cddm);
-#endif
-
 	return dm;
 }
 

Modified: trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c	2012-04-16 02:28:18 UTC (rev 45671)
+++ trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c	2012-04-16 04:17:33 UTC (rev 45672)
@@ -1492,36 +1492,50 @@
 {
 	EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm;
 	BMesh *bm= bmdm->tc->bm;
-	BMFace *efa;
-	char *data, *bmdata;
 	void *datalayer;
-	int index /*, offset*/ /*UNUSED */, size, i;
 
 	datalayer = DM_get_tessface_data_layer(dm, type);
 	if (datalayer)
 		return datalayer;
 
-	/* layers are store per face for editmesh, we convert to a tbmporary
+	/* layers are store per face for editmesh, we convert to a temporary
 	 * data layer array in the derivedmesh when these are requested */
 	if (type == CD_MTFACE || type == CD_MCOL) {
-		index = CustomData_get_layer_index(&bm->pdata, type);
+		const int type_from = (type == CD_MTFACE) ? CD_MTEXPOLY : CD_MLOOPCOL;
+		int index;
+		char *data, *bmdata;
+		index = CustomData_get_layer_index(&bm->pdata, type_from);
 
 		if (index != -1) {
 			/* offset = bm->pdata.layers[index].offset; */ /* UNUSED */
-			size = CustomData_sizeof(type);
+			const int size = CustomData_sizeof(type);
+			int i, j;
 
 			DM_add_tessface_layer(dm, type, CD_CALLOC, NULL);
 			index = CustomData_get_layer_index(&dm->faceData, type);
 			dm->faceData.layers[index].flag |= CD_FLAG_TEMPORARY;
 
 			data = datalayer = DM_get_tessface_data_layer(dm, type);
-			for (i=0; i<bmdm->tc->tottri; i++, data+=size) {
-				efa = bmdm->tc->looptris[i][0]->f;
-				/* BMESH_TODO: need to still add tface data,
-				 * derived from the loops.*/
-				bmdata = CustomData_bmesh_get(&bm->pdata, efa->head.data, type);
-				memcpy(data, bmdata, size);
+
+			if (type == CD_MTFACE) {
+				for (i = 0; i < bmdm->tc->tottri; i++, data += size) {
+					BMFace *efa = bmdm->tc->looptris[i][0]->f;
+					bmdata = CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY);
+					ME_MTEXFACE_CPY(((MTFace *)data), ((MTexPoly *)bmdata));
+					for (j = 0; j < 3; j++) {
+						bmdata = CustomData_bmesh_get(&bm->ldata, bmdm->tc->looptris[i][j]->head.data, CD_MLOOPUV);
+						copy_v2_v2(((MTFace *)data)->uv[j], ((MLoopUV *)bmdata)->uv);
+					}
+				}
 			}
+			else {
+				for (i = 0; i < bmdm->tc->tottri; i++, data += size) {
+					for (j = 0; j < 3; j++) {
+						bmdata = CustomData_bmesh_get(&bm->ldata, bmdm->tc->looptris[i][j]->head.data, CD_MLOOPCOL);
+						MESH_MLOOPCOL_TO_MCOL(((MLoopCol *)bmdata), (((MCol *)data) + j));
+					}
+				}
+			}
 		}
 	}
 




More information about the Bf-blender-cvs mailing list