[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42100] branches/bmesh/blender/source/ blender/blenkernel/intern/cdderivedmesh.c: fix misisng edge hash free when CDDM_tessfaces_to_faces ran on an empty mesh

Campbell Barton ideasman42 at gmail.com
Wed Nov 23 18:48:55 CET 2011


Revision: 42100
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42100
Author:   campbellbarton
Date:     2011-11-23 17:48:55 +0000 (Wed, 23 Nov 2011)
Log Message:
-----------
fix misisng edge hash free when CDDM_tessfaces_to_faces ran on an empty mesh

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

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-11-23 17:30:47 UTC (rev 42099)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-11-23 17:48:55 UTC (rev 42100)
@@ -2646,10 +2646,8 @@
 	CDDerivedMesh *cddm = (CDDerivedMesh*)dm;
 	MFace *mf;
 	MEdge *me;
-	MLoop *ml;
-	MPoly *mp;
 	EdgeHash *eh = BLI_edgehash_new();
-	int i, l, totloop, *polyindex;
+	int i, totloop;
 	
 	/*ensure we have all the edges we need*/
 	CDDM_calc_edges(dm);
@@ -2672,47 +2670,51 @@
 	cddm->dm.numLoopData = totloop;
 	cddm->dm.numPolyData = cddm->dm.numFaceData;
 
-	if (!totloop) return;
+	if (totloop) {
+		MLoop *ml;
+		MPoly *mp;
+		int l, *polyindex;
 
-	cddm->mloop = MEM_callocN(sizeof(MLoop)*totloop, "cddm->mloop in CDDM_tessfaces_to_faces");
-	cddm->mpoly = MEM_callocN(sizeof(MPoly)*cddm->dm.numFaceData, "cddm->mpoly in CDDM_tessfaces_to_faces");
-	
-	CustomData_add_layer(&cddm->dm.loopData, CD_MLOOP, CD_ASSIGN, cddm->mloop, totloop);
-	CustomData_add_layer(&cddm->dm.polyData, CD_MPOLY, CD_ASSIGN, cddm->mpoly, cddm->dm.numPolyData);
-	CustomData_merge(&cddm->dm.faceData, &cddm->dm.polyData, 
-		CD_MASK_ORIGINDEX, CD_DUPLICATE, cddm->dm.numFaceData);
+		cddm->mloop = MEM_callocN(sizeof(MLoop)*totloop, "cddm->mloop in CDDM_tessfaces_to_faces");
+		cddm->mpoly = MEM_callocN(sizeof(MPoly)*cddm->dm.numFaceData, "cddm->mpoly in CDDM_tessfaces_to_faces");
 
-	polyindex = CustomData_get_layer(&cddm->dm.faceData, CD_POLYINDEX);
+		CustomData_add_layer(&cddm->dm.loopData, CD_MLOOP, CD_ASSIGN, cddm->mloop, totloop);
+		CustomData_add_layer(&cddm->dm.polyData, CD_MPOLY, CD_ASSIGN, cddm->mpoly, cddm->dm.numPolyData);
+		CustomData_merge(&cddm->dm.faceData, &cddm->dm.polyData,
+			CD_MASK_ORIGINDEX, CD_DUPLICATE, cddm->dm.numFaceData);
 
-	mf = cddm->mface;
-	mp = cddm->mpoly;
-	ml = cddm->mloop;
-	l = 0;
-	for (i=0; i<cddm->dm.numFaceData; i++, mf++, mp++) {
-		mp->flag = mf->flag;
-		mp->loopstart = l;
-		mp->mat_nr = mf->mat_nr;
-		mp->totloop = mf->v4 ? 4 : 3;
-		
-		ml->v = mf->v1;
-		ml->e = GET_INT_FROM_POINTER(BLI_edgehash_lookup(eh, mf->v1, mf->v2));
-		ml++, l++;
+		polyindex = CustomData_get_layer(&cddm->dm.faceData, CD_POLYINDEX);
 
-		ml->v = mf->v2;
-		ml->e = GET_INT_FROM_POINTER(BLI_edgehash_lookup(eh, mf->v2, mf->v3));
-		ml++, l++;
+		mf = cddm->mface;
+		mp = cddm->mpoly;
+		ml = cddm->mloop;
+		l = 0;
+		for (i=0; i<cddm->dm.numFaceData; i++, mf++, mp++) {
+			mp->flag = mf->flag;
+			mp->loopstart = l;
+			mp->mat_nr = mf->mat_nr;
+			mp->totloop = mf->v4 ? 4 : 3;
 
-		ml->v = mf->v3;
-		ml->e = GET_INT_FROM_POINTER(BLI_edgehash_lookup(eh, mf->v3, mf->v4?mf->v4:mf->v1));
-		ml++, l++;
+			ml->v = mf->v1;
+			ml->e = GET_INT_FROM_POINTER(BLI_edgehash_lookup(eh, mf->v1, mf->v2));
+			ml++, l++;
 
-		if (mf->v4) {
-			ml->v = mf->v4;
-			ml->e =	GET_INT_FROM_POINTER(BLI_edgehash_lookup(eh, mf->v4, mf->v1));
+			ml->v = mf->v2;
+			ml->e = GET_INT_FROM_POINTER(BLI_edgehash_lookup(eh, mf->v2, mf->v3));
 			ml++, l++;
+
+			ml->v = mf->v3;
+			ml->e = GET_INT_FROM_POINTER(BLI_edgehash_lookup(eh, mf->v3, mf->v4?mf->v4:mf->v1));
+			ml++, l++;
+
+			if (mf->v4) {
+				ml->v = mf->v4;
+				ml->e =	GET_INT_FROM_POINTER(BLI_edgehash_lookup(eh, mf->v4, mf->v1));
+				ml++, l++;
+			}
+
+			*polyindex = i;
 		}
-
-		*polyindex = i;
 	}
 
 	BLI_edgehash_free(eh, NULL);




More information about the Bf-blender-cvs mailing list