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>2013-05-31 19:48:42 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-05-31 19:48:42 +0400
commitdb42a596aafeb7b33bee63c6bc8da205582b5257 (patch)
tree017c76bb07f87fe4079e3dc2c81011bfce47dbc4 /source/blender/bmesh/operators/bmo_bridge.c
parentfe02323632bca510b9900d45ad4c45e8f16b0098 (diff)
fix [#35578] New bridge tool; bowtie crossing when destination edges form one half of an 'X'
Diffstat (limited to 'source/blender/bmesh/operators/bmo_bridge.c')
-rw-r--r--source/blender/bmesh/operators/bmo_bridge.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/source/blender/bmesh/operators/bmo_bridge.c b/source/blender/bmesh/operators/bmo_bridge.c
index 53bb88aee0a..9da6e812032 100644
--- a/source/blender/bmesh/operators/bmo_bridge.c
+++ b/source/blender/bmesh/operators/bmo_bridge.c
@@ -168,6 +168,21 @@ static void bridge_loop_pair(BMesh *bm,
}
sub_v3_v3v3(el_dir, BM_edgeloop_center_get(el_store_a), BM_edgeloop_center_get(el_store_b));
+
+ if (is_closed) {
+ /* if all loops are closed this will calculate twice for all loops */
+ BM_edgeloop_calc_normal(bm, el_store_a);
+ BM_edgeloop_calc_normal(bm, el_store_b);
+ }
+ else {
+ /* normalizing isn't strictly needed but without we may get very large values */
+ float no[3];
+ normalize_v3_v3(no, el_dir);
+ BM_edgeloop_calc_normal_aligned(bm, el_store_a, no);
+ negate_v3(no);
+ BM_edgeloop_calc_normal_aligned(bm, el_store_b, no);
+ }
+
if ((dot_v3v3(BM_edgeloop_normal_get(el_store_a), el_dir) < 0.0f) !=
(dot_v3v3(BM_edgeloop_normal_get(el_store_b), el_dir) < 0.0f))
{
@@ -426,7 +441,6 @@ void bmo_bridge_loops_exec(BMesh *bm, BMOperator *op)
count = BM_mesh_edgeloops_find(bm, &eloops, bm_edge_test_cb, bm);
- BM_mesh_edgeloops_calc_normal(bm, &eloops);
BM_mesh_edgeloops_calc_center(bm, &eloops);
if (count < 2) {