[Bf-blender-cvs] [b82e84f] master: BMesh: we actually can set loop indices too while converting from Mesh to BMesh...

Bastien Montagne noreply at git.blender.org
Mon Jun 23 16:22:37 CEST 2014


Commit: b82e84f17917915d83bc3da292d2441bc126f87c
Author: Bastien Montagne
Date:   Mon Jun 23 16:11:48 2014 +0200
https://developer.blender.org/rBb82e84f17917915d83bc3da292d2441bc126f87c

BMesh: we actually can set loop indices too while converting from Mesh to BMesh...

===================================================================

M	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 b7be0cc..05f3ff5 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) {




More information about the Bf-blender-cvs mailing list