diff options
author | Ton Roosendaal <ton@blender.org> | 2011-01-15 17:07:11 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2011-01-15 17:07:11 +0300 |
commit | 384025f1a0ceaadfd1d623cc61f25d7426301a5b (patch) | |
tree | 792051d3d2978de5896875aa7989b0fb78855383 /source/blender | |
parent | 4cb79661eb4b69b66a5c5c980790db360c7d7332 (diff) |
Bugfix #25636
On using loop-selects, the active vertex got cleared, it could still
simply indicate one of the vertices of indicated edge to become active.
That keeps the Ui for vertex-groups drawing correct, for example.
Also made loop-ring select store active edge for tools, like the loop-select.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/mesh/editmesh_mods.c | 7 | ||||
-rw-r--r-- | source/blender/editors/mesh/loopcut.c | 12 |
2 files changed, 16 insertions, 3 deletions
diff --git a/source/blender/editors/mesh/editmesh_mods.c b/source/blender/editors/mesh/editmesh_mods.c index cdccc1e0110..818f92c73c6 100644 --- a/source/blender/editors/mesh/editmesh_mods.c +++ b/source/blender/editors/mesh/editmesh_mods.c @@ -2078,8 +2078,11 @@ static void mouse_mesh_loop(bContext *C, short mval[2], short extend, short ring // if (EM_texFaceCheck()) /* sets as active, useful for other tools */ - if(select && em->selectmode & SCE_SELECT_EDGE) { - EM_store_selection(em, eed, EDITEDGE); + if(select) { + if(em->selectmode & SCE_SELECT_VERTEX) + EM_store_selection(em, eed->v1, EDITVERT); + if(em->selectmode & SCE_SELECT_EDGE) + EM_store_selection(em, eed, EDITEDGE); } WM_event_add_notifier(C, NC_GEOM|ND_SELECT, vc.obedit->data); diff --git a/source/blender/editors/mesh/loopcut.c b/source/blender/editors/mesh/loopcut.c index 42df009bb16..933aed0a758 100644 --- a/source/blender/editors/mesh/loopcut.c +++ b/source/blender/editors/mesh/loopcut.c @@ -272,9 +272,12 @@ static void ringsel_finish(bContext *C, wmOperator *op) int cuts= (lcd->do_cut)? RNA_int_get(op->ptr,"number_cuts"): 0; if (lcd->eed) { + EditMesh *em = BKE_mesh_get_editmesh(lcd->ob->data); + edgering_sel(lcd, cuts, 1); + if (lcd->do_cut) { - EditMesh *em = BKE_mesh_get_editmesh(lcd->ob->data); + esubdivideflag(lcd->ob, em, SELECT, 0.0f, 0.0f, 0, cuts, 0, SUBDIV_SELECT_LOOPCUT); /* force edge slide to edge select mode in in face select mode */ @@ -293,6 +296,13 @@ static void ringsel_finish(bContext *C, wmOperator *op) WM_event_add_notifier(C, NC_GEOM|ND_DATA, lcd->ob->data); } else { + + /* sets as active, useful for other tools */ + if(em->selectmode & SCE_SELECT_VERTEX) + EM_store_selection(em, lcd->eed->v1, EDITVERT); + if(em->selectmode & SCE_SELECT_EDGE) + EM_store_selection(em, lcd->eed, EDITEDGE); + EM_selectmode_flush(lcd->em); WM_event_add_notifier(C, NC_GEOM|ND_SELECT, lcd->ob->data); } |