diff options
author | Francisco De La Cruz <dlcs.frank@gmail.com> | 2012-04-07 23:53:39 +0400 |
---|---|---|
committer | Francisco De La Cruz <dlcs.frank@gmail.com> | 2012-04-07 23:53:39 +0400 |
commit | cbd95d815972d37652179de4a6d74f9ae767a789 (patch) | |
tree | 3d1218c65bb8ddc78c930a49026a53f89c748341 /source/blender/bmesh/operators | |
parent | fd37970b80945f27af58b8361014e617396b7814 (diff) |
Fix [#30855] Vertex Slide not using the active vertex
Now uses the last selected vertex.
Also, snapping thresholds are now dynamic and the tool's operation should be more consistent with multiple edges selected on invocation.
Diffstat (limited to 'source/blender/bmesh/operators')
-rw-r--r-- | source/blender/bmesh/operators/bmo_slide.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/source/blender/bmesh/operators/bmo_slide.c b/source/blender/bmesh/operators/bmo_slide.c index faeeafe97f6..0e6a1161334 100644 --- a/source/blender/bmesh/operators/bmo_slide.c +++ b/source/blender/bmesh/operators/bmo_slide.c @@ -47,10 +47,10 @@ void bmo_vert_slide_exec(BMesh *bm, BMOperator *op) BMHeader *h; BMVert *vertex; BMEdge *edge; + BMEdge *slide_edge; int is_start_v1 = 0; /* Selection counts */ - int selected_verts = 0; int selected_edges = 0; /* Get slide amount */ @@ -69,9 +69,6 @@ void bmo_vert_slide_exec(BMesh *bm, BMOperator *op) /* Count selected edges */ BMO_ITER(h, &oiter, bm, op, "edge", BM_VERT | BM_EDGE) { switch (h->htype) { - case BM_VERT: - selected_verts++; - break; case BM_EDGE: selected_edges++; /* Mark all selected edges (cast BMHeader->BMEdge) */ @@ -80,9 +77,8 @@ void bmo_vert_slide_exec(BMesh *bm, BMOperator *op) } } - /* Only allow sliding between two verts */ - - if (selected_verts != 2 || selected_edges == 0) { + /* Only allow sliding if an edge is selected */ + if (selected_edges == 0) { if (G.debug & G_DEBUG) fprintf(stderr, "vertslide: select a single edge\n"); return; @@ -90,15 +86,15 @@ void bmo_vert_slide_exec(BMesh *bm, BMOperator *op) /* Make sure we get the correct edge. */ BM_ITER(edge, &iter, bm, BM_EDGES_OF_VERT, vertex) { - if (BMO_elem_flag_test(bm, edge, EDGE_MARK)) { - is_start_v1 = (edge->v1 == vertex); + if (BMO_elem_flag_test(bm, edge, EDGE_MARK) && BM_vert_in_edge(edge, vertex)) { + slide_edge = edge; break; } } /* Found edge */ - if (edge) { - BMVert *other = BM_edge_other_vert(edge, vertex); + if (slide_edge) { + BMVert *other = BM_edge_other_vert(slide_edge, vertex); /* mark */ BMO_elem_flag_enable(bm, vertex, VERT_MARK); |