diff --git a/source/blender/blenkernel/intern/editderivedbmesh.c b/source/blender/blenkernel/intern/editderivedbmesh.c index 83cdd839b4b..40c2485196a 100644 --- a/source/blender/blenkernel/intern/editderivedbmesh.c +++ b/source/blender/blenkernel/intern/editderivedbmesh.c @@ -1371,12 +1371,10 @@ static void bmDM_copyLoopArray(DerivedMesh *dm, MLoop *loop_r) BM_SetIndex(e, i++); } - i = 0; BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { - loop_r[i].v = BM_GetIndex(l->v); - loop_r[i].e = BM_GetIndex(l->e); - i++; + loop_r->v = BM_GetIndex(l->v); + loop_r->e = BM_GetIndex(l->e); loop_r++; } } @@ -1388,18 +1386,17 @@ static void bmDM_copyPolyArray(DerivedMesh *dm, MPoly *poly_r) BMesh *bm = ((EditDerivedBMesh *)dm)->tc->bm; BMIter iter; BMFace *f; - int i, j; + int i; - i = j = 0; + i = 0; BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) { - poly_r[i].flag = BMFlags_To_MEFlags(f); - poly_r[i].loopstart = j; - poly_r[i].totloop = f->len; - poly_r[i].mat_nr = f->mat_nr; + poly_r->flag = BMFlags_To_MEFlags(f); + poly_r->loopstart = i; + poly_r->totloop = f->len; + poly_r->mat_nr = f->mat_nr; - i++; poly_r++; - j += f->len; + i += f->len; } } diff --git a/source/blender/bmesh/intern/bmesh_mods.c b/source/blender/bmesh/intern/bmesh_mods.c index f4a6ece738e..ce55ce18b27 100644 --- a/source/blender/bmesh/intern/bmesh_mods.c +++ b/source/blender/bmesh/intern/bmesh_mods.c @@ -22,7 +22,7 @@ * BME_MODS.C * * This file contains functions for locally modifying - * the topology of existing mesh data. (split, join, flip ect). + * the topology of existing mesh data. (split, join, flip etc). * */ @@ -124,8 +124,8 @@ int BM_Dissolve_Disk(BMesh *bm, BMVert *v) { /*handle two-valence*/ f = e->l->f; - f = e->l->radial_next->f; - + f2 = e->l->radial_next->f; + if (f != f2 && !BM_Join_TwoFaces(bm, f, f2, NULL)) return 0; @@ -220,6 +220,9 @@ void BM_Dissolve_Disk(BMesh *bm, BMVert *v){ * every edge (not just edge e). This part of the functionality might need * to be reconsidered. * + * If the windings do not match the winding of the new face will follow + * f1's winding (i.e. f2 will be reversed before the join). + * * Returns: * pointer to the combined face */ @@ -483,7 +486,7 @@ BMEdge* BM_Collapse_Vert(BMesh *bm, BMEdge *ke, BMVert *kv, float fac){ BM_Kill_Vert(bm, kv); } else { BMVert *tv2; - BMEdge *e2, *ne; + BMEdge *e2; /*ok, no faces, means we have a wire edge*/ e2 = bmesh_disk_nextedge(ke, kv);