diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-06-06 01:31:01 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-06-06 01:31:01 +0400 |
commit | 4835f63be28331dfe3d1f946a90801ddb925b257 (patch) | |
tree | aec271857f74965463f6b42ac569d6b0383d16c6 /source/blender/bmesh/operators/bmo_subdivide_edgering.c | |
parent | 71758cb5d7fee4f3affa9822050525f79f14a9fb (diff) |
fix issue with new bridge tool interpolation [#35636]
Diffstat (limited to 'source/blender/bmesh/operators/bmo_subdivide_edgering.c')
-rw-r--r-- | source/blender/bmesh/operators/bmo_subdivide_edgering.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/source/blender/bmesh/operators/bmo_subdivide_edgering.c b/source/blender/bmesh/operators/bmo_subdivide_edgering.c index 7f08ad2461a..d9555c409f6 100644 --- a/source/blender/bmesh/operators/bmo_subdivide_edgering.c +++ b/source/blender/bmesh/operators/bmo_subdivide_edgering.c @@ -547,6 +547,7 @@ static void bm_edgering_pair_interpolate(BMesh *bm, LoopPairStore *lpair, { const int resolu = cuts + 2; const int dims = 3; + bool is_a_no_valid, is_b_no_valid; int i; float el_store_a_co[3], el_store_b_co[3]; @@ -559,20 +560,30 @@ static void bm_edgering_pair_interpolate(BMesh *bm, LoopPairStore *lpair, BM_edgeloop_calc_center(bm, el_store_a); BM_edgeloop_calc_center(bm, el_store_b); - BM_edgeloop_calc_normal(bm, el_store_a); - BM_edgeloop_calc_normal(bm, el_store_b); + is_a_no_valid = BM_edgeloop_calc_normal(bm, el_store_a); + is_b_no_valid = BM_edgeloop_calc_normal(bm, el_store_b); copy_v3_v3(el_store_a_co, BM_edgeloop_center_get(el_store_a)); copy_v3_v3(el_store_b_co, BM_edgeloop_center_get(el_store_b)); - copy_v3_v3(el_store_a_no, BM_edgeloop_normal_get(el_store_a)); - copy_v3_v3(el_store_b_no, BM_edgeloop_normal_get(el_store_b)); - /* correct normals need to be flipped to face each other * we know both normals point in the same direction so one will need flipping */ { float el_dir[3]; + float no[3]; sub_v3_v3v3(el_dir, el_store_a_co, el_store_b_co); + normalize_v3_v3(no, el_dir); + + if (is_a_no_valid == false) { + is_a_no_valid = BM_edgeloop_calc_normal_aligned(bm, el_store_a, no); + } + if (is_b_no_valid == false) { + is_b_no_valid = BM_edgeloop_calc_normal_aligned(bm, el_store_b, no); + } + (void)is_a_no_valid, (void)is_b_no_valid; + + copy_v3_v3(el_store_a_no, BM_edgeloop_normal_get(el_store_a)); + copy_v3_v3(el_store_b_no, BM_edgeloop_normal_get(el_store_b)); if (dot_v3v3(el_store_a_no, el_dir) > 0.0f) { negate_v3(el_store_a_no); |