[Bf-blender-cvs] [d655a8f] master: BMesh: BM_face_triangulate take edge array

Campbell Barton noreply at git.blender.org
Sun Feb 1 23:24:08 CET 2015


Commit: d655a8f16867d2d2a0bdc652128261e75ad894e9
Author: Campbell Barton
Date:   Mon Feb 2 09:09:36 2015 +1100
Branches: master
https://developer.blender.org/rBd655a8f16867d2d2a0bdc652128261e75ad894e9

BMesh: BM_face_triangulate take edge array

To access edges created between the tris.

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

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

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

diff --git a/source/blender/bmesh/intern/bmesh_polygon.c b/source/blender/bmesh/intern/bmesh_polygon.c
index e4aa4bb..bc06ba2 100644
--- a/source/blender/bmesh/intern/bmesh_polygon.c
+++ b/source/blender/bmesh/intern/bmesh_polygon.c
@@ -743,7 +743,9 @@ bool BM_face_point_inside_test(BMFace *f, const float co[3])
 void BM_face_triangulate(
         BMesh *bm, BMFace *f,
         BMFace **r_faces_new,
-        int *r_faces_new_tot,
+        int     *r_faces_new_tot,
+        BMEdge **r_edges_new,
+        int     *r_edges_new_tot,
         const int quad_method,
         const int ngon_method,
         const bool use_tag,
@@ -755,6 +757,7 @@ void BM_face_triangulate(
 	BMLoop *l_iter, *l_first, *l_new;
 	BMFace *f_new;
 	int nf_i = 0;
+	int ne_i = 0;
 	bool use_beauty = (ngon_method == MOD_TRIANGULATE_NGON_BEAUTY);
 
 	BLI_assert(BM_face_is_normal_valid(f));
@@ -835,6 +838,9 @@ void BM_face_triangulate(
 		if (r_faces_new) {
 			r_faces_new[nf_i++] = f_new;
 		}
+		if (r_edges_new) {
+			r_edges_new[ne_i++] = l_new->e;
+		}
 	}
 	else if (f->len > 4) {
 
@@ -895,8 +901,7 @@ void BM_face_triangulate(
 				}
 			}
 
-			/* we know any edge that we create and _isnt_ */
-			if (use_tag) {
+			if (use_tag || r_edges_new) {
 				/* new faces loops */
 				l_iter = l_first = l_new;
 				do {
@@ -906,7 +911,12 @@ void BM_face_triangulate(
 					bool is_new_edge = (l_iter == l_iter->radial_next);
 
 					if (is_new_edge) {
-						BM_elem_flag_enable(e, BM_ELEM_TAG);
+						if (use_tag) {
+							BM_elem_flag_enable(e, BM_ELEM_TAG);
+						}
+						if (r_edges_new) {
+							r_edges_new[ne_i++] = e;
+						}
 					}
 					/* note, never disable tag's */
 				} while ((l_iter = l_iter->next) != l_first);
@@ -925,6 +935,10 @@ void BM_face_triangulate(
 	if (r_faces_new_tot) {
 		*r_faces_new_tot = nf_i;
 	}
+
+	if (r_edges_new_tot) {
+		*r_edges_new_tot = ne_i;
+	}
 }
 
 /**




More information about the Bf-blender-cvs mailing list