[Bf-blender-cvs] [d47fbec] master: BMesh: improve face-path-picking w/ tri-fans

Campbell Barton noreply at git.blender.org
Sat Nov 21 00:19:16 CET 2015


Commit: d47fbece5130fccc7aaaee6046f99a38d3762636
Author: Campbell Barton
Date:   Sat Nov 21 10:07:18 2015 +1100
Branches: master
https://developer.blender.org/rBd47fbece5130fccc7aaaee6046f99a38d3762636

BMesh: improve face-path-picking w/ tri-fans

Face paths including triangle-fans would often be avoided because
the face center and edge would 'zig-zag'.

Resolve using wighted face center and picking an edge-point between face centers.

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

M	source/blender/bmesh/tools/bmesh_path.c

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

diff --git a/source/blender/bmesh/tools/bmesh_path.c b/source/blender/bmesh/tools/bmesh_path.c
index 6633803..1c05b8a 100644
--- a/source/blender/bmesh/tools/bmesh_path.c
+++ b/source/blender/bmesh/tools/bmesh_path.c
@@ -306,9 +306,27 @@ static float facetag_cut_cost(BMFace *f_a, BMFace *f_b, BMEdge *e)
 	float f_b_cent[3];
 	float e_cent[3];
 
-	BM_face_calc_center_mean(f_a, f_a_cent);
-	BM_face_calc_center_mean(f_b, f_b_cent);
+	BM_face_calc_center_mean_weighted(f_a, f_a_cent);
+	BM_face_calc_center_mean_weighted(f_b, f_b_cent);
+#if 0
 	mid_v3_v3v3(e_cent, e->v1->co, e->v2->co);
+#else
+	/* for triangle fans it gives better results to pick a point on the edge */
+	{
+		float ix_e[3], ix_f[3], f;
+		isect_line_line_v3(e->v1->co, e->v2->co, f_a_cent, f_b_cent, ix_e, ix_f);
+		f = line_point_factor_v3(ix_e, e->v1->co, e->v2->co);
+		if (f < 0.0) {
+			copy_v3_v3(e_cent, e->v1->co);
+		}
+		else if (f > 1.0) {
+			copy_v3_v3(e_cent, e->v2->co);
+		}
+		else {
+			copy_v3_v3(e_cent, ix_e);
+		}
+	}
+#endif
 
 	return step_cost_3_v3(f_a_cent, e_cent, f_b_cent);
 }




More information about the Bf-blender-cvs mailing list