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-04-19 06:36:52 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-04-19 06:36:52 +0400
commit79ac3576caefdc7d75f3882d5abeb656892bc771 (patch)
tree2cf215036783732031eef3da816920eb9470c5c3 /source/blender/editors/transform/transform.c
parente0464a05497bfdbe581ba4152a55d2ed0eed3a77 (diff)
fix for incorrect edge loop slide direction when one of the loop sides was lost walking around the loop.
Diffstat (limited to 'source/blender/editors/transform/transform.c')
-rw-r--r--source/blender/editors/transform/transform.c34
1 files changed, 17 insertions, 17 deletions
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 0549ff1f168..0f8f5fda9ae 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -5324,14 +5324,14 @@ static int createEdgeSlideVerts(TransInfo *t)
copy_v3_v3(sv->v_co_orig, v->co);
sv->loop_nr = loop_nr;
- copy_v3_v3(sv->dir_a, vec_a);
- if (l_b)
- copy_v3_v3(sv->dir_b, vec_b);
-
- l = BM_loop_other_edge_loop(l_a, v);
- sv->v_a = BM_edge_other_vert(l->e, v);
+ if (l_a) {
+ copy_v3_v3(sv->dir_a, vec_a);
+ l = BM_loop_other_edge_loop(l_a, v);
+ sv->v_a = BM_edge_other_vert(l->e, v);
+ }
if (l_b) {
+ copy_v3_v3(sv->dir_b, vec_b);
l = BM_loop_other_edge_loop(l_b, v);
sv->v_b = BM_edge_other_vert(l->e, v);
}
@@ -5346,10 +5346,12 @@ static int createEdgeSlideVerts(TransInfo *t)
sv->v = v;
copy_v3_v3(sv->v_co_orig, v->co);
sv->loop_nr = loop_nr;
-
- l = BM_loop_other_edge_loop(l_a, v);
- sv->v_a = BM_edge_other_vert(l->e, v);
- sub_v3_v3v3(sv->dir_a, BM_edge_other_vert(l->e, v)->co, v->co);
+
+ if (l_a) {
+ l = BM_loop_other_edge_loop(l_a, v);
+ sv->v_a = BM_edge_other_vert(l->e, v);
+ sub_v3_v3v3(sv->dir_a, BM_edge_other_vert(l->e, v)->co, v->co);
+ }
if (l_b) {
l = BM_loop_other_edge_loop(l_b, v);
@@ -5363,18 +5365,16 @@ static int createEdgeSlideVerts(TransInfo *t)
break;
}
- l_a = get_next_loop(v, l_a, e1, e, vec_a);
+ l_a = l_a ? get_next_loop(v, l_a, e1, e, vec_a) : NULL;
l_b = l_b ? get_next_loop(v, l_b, e1, e, vec_b) : NULL;
- if (UNLIKELY(l_a == NULL && l_b != NULL)) {
- l_a = l_b;
- l_b = NULL;
- swap_v3_v3(vec_a, vec_b);
- }
+ /* find the opposite loop if it was missing previously */
+ if (l_a == NULL && l_b && (l_b->radial_next != l_b)) l_a = l_b->radial_next;
+ else if (l_b == NULL && l_a && (l_a->radial_next != l_a)) l_b = l_a->radial_next;
BM_elem_flag_disable(v, BM_ELEM_TAG);
BM_elem_flag_disable(v2, BM_ELEM_TAG);
- } while (e != v_first->e && l_a);
+ } while ((e != v_first->e) && (l_a || l_b));
loop_nr++;
}