[Bf-blender-cvs] [3b24eaa] master: Fix T37583: regression in bmesh triangulate breaking python's use of face_map

Campbell Barton noreply at git.blender.org
Tue Nov 26 22:12:27 CET 2013


Commit: 3b24eaad9af8025cb38879cbc345f7debceba5a9
Author: Campbell Barton
Date:   Wed Nov 27 08:08:00 2013 +1100
http://developer.blender.org/rB3b24eaad9af8025cb38879cbc345f7debceba5a9

Fix T37583: regression in bmesh triangulate breaking python's use of face_map

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

M	source/blender/bmesh/intern/bmesh_core.c
M	source/blender/bmesh/intern/bmesh_core.h
M	source/blender/bmesh/intern/bmesh_polygon.c

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

diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c
index 0726af4..a270830 100644
--- a/source/blender/bmesh/intern/bmesh_core.c
+++ b/source/blender/bmesh/intern/bmesh_core.c
@@ -2294,7 +2294,7 @@ BMVert *bmesh_urmv(BMesh *bm, BMFace *f_sep, BMVert *v_sep)
  * low level function so both face pointers remain intact but point to swapped data.
  * \note must be from the same bmesh.
  */
-void bmesh_face_swap_data(BMesh *bm, BMFace *f_a, BMFace *f_b)
+void bmesh_face_swap_data(BMFace *f_a, BMFace *f_b)
 {
 	BMLoop *l_iter, *l_first;
 
@@ -2311,5 +2311,8 @@ void bmesh_face_swap_data(BMesh *bm, BMFace *f_a, BMFace *f_b)
 	} while ((l_iter = l_iter->next) != l_first);
 
 	SWAP(BMFace, (*f_a), (*f_b));
-	bm->elem_index_dirty |= BM_FACE;
+
+	/* swap back */
+	SWAP(void *, f_a->head.data, f_b->head.data);
+	SWAP(int, f_a->head.index, f_b->head.index);
 }
diff --git a/source/blender/bmesh/intern/bmesh_core.h b/source/blender/bmesh/intern/bmesh_core.h
index 9e33509..e9fd4e6 100644
--- a/source/blender/bmesh/intern/bmesh_core.h
+++ b/source/blender/bmesh/intern/bmesh_core.h
@@ -87,6 +87,6 @@ BMFace *bmesh_jfke(BMesh *bm, BMFace *f1, BMFace *f2, BMEdge *e);
 BMVert *bmesh_urmv(BMesh *bm, BMFace *f_sep, BMVert *v_sep);
 BMVert *bmesh_urmv_loop(BMesh *bm, BMLoop *l_sep);
 
-void    bmesh_face_swap_data(BMesh *bm, BMFace *f_a, BMFace *f_b);
+void    bmesh_face_swap_data(BMFace *f_a, BMFace *f_b);
 
 #endif /* __BMESH_CORE_H__ */
diff --git a/source/blender/bmesh/intern/bmesh_polygon.c b/source/blender/bmesh/intern/bmesh_polygon.c
index 3db6ba0..341143e 100644
--- a/source/blender/bmesh/intern/bmesh_polygon.c
+++ b/source/blender/bmesh/intern/bmesh_polygon.c
@@ -1011,7 +1011,7 @@ void BM_face_triangulate(BMesh *bm, BMFace *f,
 		if ((!use_beauty) || (!r_faces_new)) {
 			/* we can't delete the real face, because some of the callers expect it to remain valid.
 			 * so swap data and delete the last created tri */
-			bmesh_face_swap_data(bm, f, f_new);
+			bmesh_face_swap_data(f, f_new);
 			BM_face_kill(bm, f_new);
 		}
 
@@ -1071,7 +1071,7 @@ void BM_face_triangulate(BMesh *bm, BMFace *f,
 
 				/* we can't delete the real face, because some of the callers expect it to remain valid.
 				 * so swap data and delete the last created tri */
-				bmesh_face_swap_data(bm, f, f_new);
+				bmesh_face_swap_data(f, f_new);
 				BM_face_kill(bm, f_new);
 			}
 		}




More information about the Bf-blender-cvs mailing list