From b82e84f17917915d83bc3da292d2441bc126f87c Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Mon, 23 Jun 2014 16:11:48 +0200 Subject: BMesh: we actually can set loop indices too while converting from Mesh to BMesh... --- source/blender/bmesh/intern/bmesh_mesh_conv.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'source/blender/bmesh/intern/bmesh_mesh_conv.c') diff --git a/source/blender/bmesh/intern/bmesh_mesh_conv.c b/source/blender/bmesh/intern/bmesh_mesh_conv.c index b7be0cc0ae2..05f3ff5b60b 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_conv.c +++ b/source/blender/bmesh/intern/bmesh_mesh_conv.c @@ -233,7 +233,7 @@ void BM_mesh_bm_from_me(BMesh *bm, Mesh *me, BMEdge *e, **etable = NULL; BMFace *f; float (*keyco)[3] = NULL; - int totuv, i, j; + int totuv, totloops, i, j; int cd_vert_bweight_offset; int cd_edge_bweight_offset; @@ -395,7 +395,7 @@ void BM_mesh_bm_from_me(BMesh *bm, Mesh *me, mloop = me->mloop; mp = me->mpoly; - for (i = 0; i < me->totpoly; i++, mp++) { + for (i = 0, totloops = 0; i < me->totpoly; i++, mp++) { BMLoop *l_iter; BMLoop *l_first; @@ -426,6 +426,9 @@ void BM_mesh_bm_from_me(BMesh *bm, Mesh *me, j = mp->loopstart; l_iter = l_first = BM_FACE_FIRST_LOOP(f); do { + /* don't use 'j' since we may have skipped some faces, hence some loops. */ + BM_elem_index_set(l_iter, totloops++); /* set_ok */ + /* Save index of correspsonding MLoop */ CustomData_to_bmesh_block(&me->ldata, &bm->ldata, j++, &l_iter->head.data, true); } while ((l_iter = l_iter->next) != l_first); @@ -438,8 +441,7 @@ void BM_mesh_bm_from_me(BMesh *bm, Mesh *me, } } - bm->elem_index_dirty &= ~BM_FACE; /* added in order, clear dirty flag */ - bm->elem_index_dirty |= BM_LOOP; /* did not set the loop indices */ + bm->elem_index_dirty &= ~(BM_FACE | BM_LOOP); /* added in order, clear dirty flag */ if (me->mselect && me->totselect != 0) { -- cgit v1.2.3