diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-02-27 11:05:01 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-02-27 11:05:01 +0400 |
commit | 3468eba71a30b9a2235a9f46e8998117b25c5baf (patch) | |
tree | 2057db04df0a9c5529d089b6aec510680a82ab99 /source/blender/editors | |
parent | 67f38af41510dbab4b4fecda417334a1997a119f (diff) |
fix for own regression, edge path tagging worked but toggline bevel didnt.
reported as bug [#34449]
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/mesh/editmesh_select.c | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index 85aeb713f05..2c6ce107eae 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -1339,6 +1339,22 @@ static int edgetag_context_check(Scene *scene, BMesh *bm, BMEdge *e) return 0; } +static void edgetag_ensure_cd_flag(Scene *scene, Mesh *me) +{ + BMesh *bm = me->edit_btmesh->bm; + + switch (scene->toolsettings->edge_mode) { + case EDGE_MODE_TAG_CREASE: + BM_mesh_cd_flag_ensure(bm, me, ME_CDFLAG_EDGE_CREASE); + break; + case EDGE_MODE_TAG_BEVEL: + BM_mesh_cd_flag_ensure(bm, me, ME_CDFLAG_EDGE_BWEIGHT); + break; + default: + break; + } +} + static int edgetag_shortest_path(Scene *scene, BMesh *bm, BMEdge *e_src, BMEdge *e_dst) { /* BM_ELEM_TAG flag is used to store visited edges */ @@ -1352,16 +1368,7 @@ static int edgetag_shortest_path(Scene *scene, BMesh *bm, BMEdge *e_src, BMEdge /* note, would pass BM_EDGE except we are looping over all edges anyway */ BM_mesh_elem_index_ensure(bm, BM_VERT /* | BM_EDGE */); - switch (scene->toolsettings->edge_mode) { - case EDGE_MODE_TAG_CREASE: - BM_mesh_cd_flag_ensure(bm, BKE_mesh_from_object(OBACT), ME_CDFLAG_EDGE_CREASE); - break; - case EDGE_MODE_TAG_BEVEL: - BM_mesh_cd_flag_ensure(bm, BKE_mesh_from_object(OBACT), ME_CDFLAG_EDGE_BWEIGHT); - break; - default: - break; - } + edgetag_ensure_cd_flag(scene, OBACT->data); BM_ITER_MESH_INDEX (e, &eiter, bm, BM_EDGES_OF_MESH, i) { if (BM_elem_flag_test(e, BM_ELEM_HIDDEN) == FALSE) { @@ -1451,7 +1458,7 @@ static int mouse_mesh_shortest_path_edge(ViewContext *vc) e_dst = EDBM_edge_find_nearest(vc, &dist); if (e_dst) { Mesh *me = vc->obedit->data; - int path = 0; + bool is_path = false; if (em->bm->selected.last) { BMEditSelection *ese = em->bm->selected.last; @@ -1462,13 +1469,14 @@ static int mouse_mesh_shortest_path_edge(ViewContext *vc) if (e_act != e_dst) { if (edgetag_shortest_path(vc->scene, em->bm, e_act, e_dst)) { BM_select_history_remove(em->bm, e_act); - path = 1; + is_path = true; } } } } - if (path == 0) { + if (is_path == false) { int act = (edgetag_context_check(vc->scene, em->bm, e_dst) == 0); + edgetag_ensure_cd_flag(vc->scene, vc->obedit->data); edgetag_context_set(em->bm, vc->scene, e_dst, act); /* switch the edge option */ } |