[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