Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2015-11-21 02:07:18 +0300
committerCampbell Barton <ideasman42@gmail.com>2015-11-21 02:12:10 +0300
commitd47fbece5130fccc7aaaee6046f99a38d3762636 (patch)
tree8b9edc69fb1e9ffca062213773cf833d89040545 /source/blender/bmesh/tools/bmesh_path.c
parent9a2290a30b478f6bf0863796d8129b9fe7e368f1 (diff)
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.
Diffstat (limited to 'source/blender/bmesh/tools/bmesh_path.c')
-rw-r--r--source/blender/bmesh/tools/bmesh_path.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/source/blender/bmesh/tools/bmesh_path.c b/source/blender/bmesh/tools/bmesh_path.c
index 6633803414b..1c05b8ae5d4 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);
}