[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22610] branches/bmesh/blender/source/ blender: rearranged some code a bit

Joseph Eagar joeedh at gmail.com
Tue Aug 18 22:05:10 CEST 2009


Revision: 22610
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22610
Author:   joeedh
Date:     2009-08-18 22:05:08 +0200 (Tue, 18 Aug 2009)

Log Message:
-----------
rearranged some code a bit

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/BKE_customdata.h
    branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
    branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    branches/bmesh/blender/source/blender/bmesh/bmesh.h
    branches/bmesh/blender/source/blender/bmesh/bmesh_operator_api.h
    branches/bmesh/blender/source/blender/bmesh/docs/bmesh_design.mwiki
    branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c
    branches/bmesh/blender/source/blender/editors/mesh/editmesh_mods.c
    branches/bmesh/blender/source/blender/editors/space_view3d/view3d_snap.c

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_customdata.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_customdata.h	2009-08-18 19:58:27 UTC (rev 22609)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_customdata.h	2009-08-18 20:05:08 UTC (rev 22610)
@@ -162,12 +162,13 @@
 void CustomData_copy_data(const struct CustomData *source,
                           struct CustomData *dest, int source_index,
                           int dest_index, int count);
+void CustomData_copy_elements(int type, void *source, void *dest, int count);
 void CustomData_em_copy_data(const struct CustomData *source,
                             struct CustomData *dest, void *src_block,
                             void **dest_block);
 void CustomData_bmesh_copy_data(const struct CustomData *source, 
-							struct CustomData *dest,void *src_block, 
-							void **dest_block);
+				struct CustomData *dest, void *src_block, 
+				void **dest_block);
 
 /* frees data in a CustomData object
  * return 1 on success, 0 on failure

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c	2009-08-18 19:58:27 UTC (rev 22609)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c	2009-08-18 20:05:08 UTC (rev 22610)
@@ -282,27 +282,75 @@
 {
 	DMFaceIter *iter = dm->newFaceIter(dm);
 	DMLoopIter *liter;
+	CustomData *oldata, *opdata;
 	MPoly *mpoly;
 	MLoop *mloop;
-	int i;
+	int l, i, j, lasttype;
 
+	oldata = dm->getLoopDataLayout(dm);
+	opdata = dm->getFaceDataLayout(dm);
+
+	CustomData_copy(oldata, ldata, CD_MASK_DERIVEDMESH, CD_CALLOC, totloop);
+	CustomData_copy(opdata, pdata, CD_MASK_DERIVEDMESH, CD_CALLOC, dm->getNumFaces(dm));
+
 	mloop = MEM_callocN(sizeof(MLoop)*totloop, "MLoop from dm_add_polys_from_iter");
+	CustomData_add_layer(ldata, CD_MLOOP, CD_ASSIGN, mloop, totloop);
 	mpoly = MEM_callocN(sizeof(MPoly)*dm->getNumFaces(dm), "MPoly from dm_add_polys_from_iter");
-	
-	CustomData_add_layer(ldata, CD_MLOOP, CD_ASSIGN, mloop, totloop);
 	CustomData_add_layer(pdata, CD_MPOLY, CD_ASSIGN, mpoly, dm->getNumFaces(dm));
 
-	i = 0;
+	l = 0;
 	for (; !iter->done; iter->step(iter), mpoly++) {
 		mpoly->flag = iter->flags;
-		mpoly->loopstart = i;
+		mpoly->loopstart = l;
 		mpoly->totloop = iter->len;
 		mpoly->mat_nr = iter->mat_nr;
 		
+		j = 0;
+		lasttype = -1;
+		for (i=0; i<opdata->totlayer; i++) {
+			void *e1, *e2;
+
+			if (opdata->layers[i].type == CD_MPOLY)
+				continue;
+			
+			e1 = iter->getCDData(iter, opdata->layers[i].type, j);
+			e2 = CustomData_get_layer_n(pdata, opdata->layers[i].type, j);
+
+			CustomData_copy_elements(opdata->layers[i].type, e1, e2, 1);
+			
+			if (opdata->layers[i].type == lasttype)
+				j++;
+			else
+				j = 0;
+
+			lasttype = opdata->layers[i].type;				
+		}
+
 		liter = iter->getLoopsIter(iter);
-		for (; !liter->done; liter->step(liter), mloop++, i++) {
+		for (; !liter->done; liter->step(liter), mloop++, l++) {
 			mloop->v = liter->vindex;
 			mloop->e = liter->eindex;
+
+			j = 0;
+			lasttype = -1;
+			for (i=0; i<oldata->totlayer; i++) {
+				void *e1, *e2;
+
+				if (oldata->layers[i].type == CD_MLOOP)
+					continue;
+				
+				e1 = liter->getLoopCDData(liter, oldata->layers[i].type, j);
+				e2 = CustomData_get_layer_n(ldata, oldata->layers[i].type, j);
+
+				CustomData_copy_elements(oldata->layers[i].type, e1, e2, 1);
+				
+				if (oldata->layers[i].type == lasttype)
+					j++;
+				else
+					j = 0;
+
+				lasttype = oldata->layers[i].type;				
+			}
 		}
 	}
 	iter->free(iter);
@@ -312,33 +360,21 @@
 {
 	DMFaceIter *iter = source->newFaceIter(source);
 	DMLoopIter *liter;
-	MPoly *mpoly;
-	MLoop *mloop;
-	int i;
+	int totloop = 0;
 
-	mloop = MEM_callocN(sizeof(MLoop)*source->numLoopData, "MLoop from dm_add_polys_from_iter");
-	mpoly = MEM_callocN(sizeof(MPoly)*source->getNumFaces(source), "MPoly from dm_add_polys_from_iter");
-	
-	CustomData_add_layer(&target->loopData, CD_MLOOP, CD_ASSIGN, mloop, source->numLoopData);
-	CustomData_add_layer(&target->polyData, CD_MPOLY, CD_ASSIGN, mpoly, source->getNumFaces(source));
-	
-	target->numLoopData = source->numLoopData;
-	target->numPolyData = source->numPolyData;
-
-	i = 0;
-	for (; !iter->done; iter->step(iter), mpoly++) {
-		mpoly->flag = iter->flags;
-		mpoly->loopstart = i;
-		mpoly->totloop = iter->len;
-		mpoly->mat_nr = iter->mat_nr;
-		
+	for (; !iter->done; iter->step(iter)) {
 		liter = iter->getLoopsIter(iter);
-		for (; !liter->done; liter->step(liter), mloop++, i++) {
-			mloop->v = liter->vindex;
-			mloop->e = liter->eindex;
+		for (; !liter->done; liter->step(liter)) {
+			totloop++;
 		}
 	}
+
 	iter->free(iter);
+
+	dm_add_polys_from_iter(&target->loopData, &target->polyData, source, totloop);
+
+	target->numLoopData = totloop;
+	target->numPolyData = source->getNumFaces(source);
 }
 
 void DM_to_mesh(DerivedMesh *dm, Mesh *me)
@@ -1044,7 +1080,7 @@
 	}
 }
 
-static void emDM_drawFacesTex(void *dm, int (*setDrawOptions)(MTFace *tface, MCol *mcol, int matnr))
+static void emDM_drawFacesTex(void *dm, int (*setDrawOptions)(MTFace *tface, int has_vcol, int matnr))
 {
 	emDM_drawFacesTex_common(dm, setDrawOptions, NULL, NULL);
 }

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2009-08-18 19:58:27 UTC (rev 22609)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2009-08-18 20:05:08 UTC (rev 22610)
@@ -1311,7 +1311,7 @@
 
 void *cddm_loopiter_getcddata(void *self, int type, int layer)
 {
-	CDDM_FaceIter *iter = self;
+	CDDM_LoopIter *iter = self;
 
 	if (layer == -1) return CustomData_get(&iter->cddm->dm.loopData, 
 		                               iter->head.index, type);
@@ -1321,13 +1321,13 @@
 
 void *cddm_loopiter_getvertcddata(void *self, int type, int layer)
 {
-	CDDM_FaceIter *iter = self;
+	CDDM_LoopIter *iter = self;
 
 	if (layer == -1) return CustomData_get(&iter->cddm->dm.vertData, 
-		                               iter->cddm->mloop[iter->head.index].v,
+		                               iter->cddm->mloop[iter->head.vindex].v,
 					       type);
 	else return CustomData_get_n(&iter->cddm->dm.vertData, type, 
-	                             iter->cddm->mloop[iter->head.index].v, layer);
+	                             iter->cddm->mloop[iter->head.vindex].v, layer);
 }
 
 DMLoopIter *cddmiter_get_loopiter(void *self)
@@ -1406,8 +1406,6 @@
 	CustomData_copy_data(&source->vertData, &dm->vertData, 0, 0, numVerts);
 	CustomData_copy_data(&source->edgeData, &dm->edgeData, 0, 0, numEdges);
 	CustomData_copy_data(&source->faceData, &dm->faceData, 0, 0, numFaces);
-	CustomData_copy_data(&source->loopData, &dm->loopData, 0, 0, numLoops);
-	CustomData_copy_data(&source->polyData, &dm->polyData, 0, 0, numPolys);
 
 	/* now add mvert/medge/mface layers */
 	cddm->mvert = source->dupVertArray(source);

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c	2009-08-18 19:58:27 UTC (rev 22609)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c	2009-08-18 20:05:08 UTC (rev 22610)
@@ -1465,6 +1465,16 @@
 			data->layers[i].flag |= CD_FLAG_NOCOPY;
 }
 
+void CustomData_copy_elements(int type, void *source, void *dest, int count)
+{
+	const LayerTypeInfo *typeInfo = layerType_getInfo(type);
+
+	if (typeInfo->copy)
+		typeInfo->copy(source, dest, count);
+	else
+		memcpy(dest, source, typeInfo->size*count);
+}
+
 void CustomData_copy_data(const CustomData *source, CustomData *dest,
                           int source_index, int dest_index, int count)
 {

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c	2009-08-18 19:58:27 UTC (rev 22609)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c	2009-08-18 20:05:08 UTC (rev 22610)
@@ -275,6 +275,9 @@
 	/*private variables, for number of verts/edges/faces
 	  within the above hash/table members*/
 	int tv, te, tf;
+
+	/*customdata layout of the tesselated faces*/
+	CustomData tessface_layout;
 } EditDerivedBMesh;
 
 static void bmdm_recalc_lookups(EditDerivedBMesh *bmdm)
@@ -1312,6 +1315,8 @@
 	iter->head.flags = BMFlags_To_MEFlags(iter->f);
 	iter->head.index++;
 
+	iter->head.len = iter->f->len;
+
 	iter->nextf = BMIter_Step(&iter->iter);
 
 	if (!iter->nextf) iter->head.done = 1;
@@ -1330,16 +1335,16 @@
 {
 	bmDM_loopIter *iter = self;
 
-	iter->l = iter->nextl;
+	iter->l = BMIter_Step(&iter->iter);
+	if (!iter->l) {
+		iter->head.done = 1;
+		return;
+	}
 
 	bmvert_to_mvert(iter->l->v, &iter->head.v);
 	iter->head.index++;
 	iter->head.vindex = BMINDEX_GET(iter->l->v);
 	iter->head.eindex = BMINDEX_GET(iter->l->e);
-
-	iter->nextl = BMIter_Step(&iter->iter);
-
-	if (!iter->nextl) iter->head.done = 1;
 }
 
 void *bmDM_getLoopCDData(void *self, int type, int layer)
@@ -1378,15 +1383,15 @@
 
 	iter->bm = fiter->bm;
 	iter->f = fiter->f;
-	iter->nextl = BMIter_New(&iter->iter, iter->bm, BM_LOOPS_OF_FACE, iter->f);
+	iter->l = BMIter_New(&iter->iter, iter->bm, BM_LOOPS_OF_FACE, iter->f);
 
 	iter->head.step = bmDM_loopIterStep;
 	iter->head.getLoopCDData = bmDM_getLoopCDData;
 	iter->head.getVertCDData = bmDM_getVertCDData;
 
-	bmvert_to_mvert(iter->nextl->v, &iter->head.v);
-	iter->head.vindex = BMINDEX_GET(iter->nextl->v);
-	iter->head.eindex = BMINDEX_GET(iter->nextl->e);
+	bmvert_to_mvert(iter->l->v, &iter->head.v);
+	iter->head.vindex = BMINDEX_GET(iter->l->v);
+	iter->head.eindex = BMINDEX_GET(iter->l->e);
 
 	return (DMLoopIter*) iter;
 }
@@ -1450,19 +1455,76 @@
 	}
 }
 
+CustomData *bmDm_getVertDataLayout(DerivedMesh *dm)
+{
+	EditDerivedBMesh *bmdm = (EditDerivedBMesh*)dm;
+
+	return &bmdm->tc->bm->vdata;
+}
+
+CustomData *bmDm_getEdgeDataLayout(DerivedMesh *dm)
+{
+	EditDerivedBMesh *bmdm = (EditDerivedBMesh*)dm;
+
+	return &bmdm->tc->bm->edata;
+}
+
+CustomData *bmDm_getTessFaceDataLayout(DerivedMesh *dm)
+{

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list