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:
authorAndrew Wiggin <ender79bl@gmail.com>2011-10-15 18:47:37 +0400
committerAndrew Wiggin <ender79bl@gmail.com>2011-10-15 18:47:37 +0400
commit30141b44642609cccb9c252de578a00e92633b29 (patch)
tree9b95b604b19f1b3d8c1832133f90a621e2eafad3 /source/blender
parente9a194e55fd79a8928d43a2990c2c0c570a9bfaa (diff)
select boundary loop tool (aka region to loop) switches to edge select mode if the mode was face select
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/editors/include/ED_mesh.h2
-rw-r--r--source/blender/editors/mesh/bmesh_select.c16
-rw-r--r--source/blender/editors/mesh/bmeshutils.c7
-rw-r--r--source/blender/editors/util/editmode_undo.c2
4 files changed, 22 insertions, 5 deletions
diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h
index cc4ed12c41e..18ee29fe863 100644
--- a/source/blender/editors/include/ED_mesh.h
+++ b/source/blender/editors/include/ED_mesh.h
@@ -297,7 +297,7 @@ int ED_mesh_uv_texture_remove(struct bContext *C, struct Object *ob, struct Mesh
int ED_mesh_color_add(struct bContext *C, struct Scene *scene, struct Object *ob, struct Mesh *me, const char *name, int active_set);
int ED_mesh_color_remove(struct bContext *C, struct Object *ob, struct Mesh *me);
-void EDBM_selectmode_to_scene(struct Scene *scene, struct Object *obedit);
+void EDBM_selectmode_to_scene(struct bContext *C);
#include "../mesh/editbmesh_bvh.h"
diff --git a/source/blender/editors/mesh/bmesh_select.c b/source/blender/editors/mesh/bmesh_select.c
index 8b51b2809a6..c63fd6796a9 100644
--- a/source/blender/editors/mesh/bmesh_select.c
+++ b/source/blender/editors/mesh/bmesh_select.c
@@ -2437,6 +2437,9 @@ static int region_to_loop(bContext *C, wmOperator *UNUSED(op))
BMFace *f;
BMEdge *e;
BMIter iter;
+ ViewContext vc;
+
+ em_setup_viewcontext(C, &vc);
BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) {
BM_SetIndex(e, 0);
@@ -2465,8 +2468,17 @@ static int region_to_loop(bContext *C, wmOperator *UNUSED(op))
if (BM_GetIndex(e) && !BM_TestHFlag(e, BM_HIDDEN))
BM_Select_Edge(em->bm, e, 1);
}
-
+
+ /* If in face-only select mode, switch to edge select mode so that
+ an edge-only selection is not inconsistent state */
+ if (em->selectmode == SCE_SELECT_FACE) {
+ em->selectmode = SCE_SELECT_EDGE;
+ EDBM_selectmode_set(em);
+ EDBM_selectmode_to_scene(C);
+ }
+
WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data);
+
return OPERATOR_FINISHED;
}
@@ -2628,7 +2640,7 @@ static int loop_to_region(bContext *C, wmOperator *op)
BMFace *f;
int selbigger = RNA_boolean_get(op->ptr, "select_bigger");
int a, b;
-
+
/*find the set of regions with smallest number of total faces*/
a = loop_find_regions(em, selbigger);
b = loop_find_regions(em, !selbigger);
diff --git a/source/blender/editors/mesh/bmeshutils.c b/source/blender/editors/mesh/bmeshutils.c
index 1a3c75f522a..51a2f2e279c 100644
--- a/source/blender/editors/mesh/bmeshutils.c
+++ b/source/blender/editors/mesh/bmeshutils.c
@@ -252,14 +252,19 @@ int EDBM_CallOpfSilent(BMEditMesh *em, const char *fmt, ...)
return EDBM_FinishOp(em, &bmop, NULL, 0);
}
-void EDBM_selectmode_to_scene(Scene *scene, Object *obedit)
+void EDBM_selectmode_to_scene(bContext *C)
{
+ Scene *scene = CTX_data_scene(C);
+ Object *obedit = CTX_data_edit_object(C);
BMEditMesh *em = ((Mesh*)obedit->data)->edit_btmesh;
if (!em)
return;
scene->toolsettings->selectmode = em->selectmode;
+
+ /* Request redraw of header buttons (to show new select mode) */
+ WM_event_add_notifier(C, NC_SCENE|ND_TOOLSETTINGS, scene);
}
void EDBM_MakeEditBMesh(ToolSettings *ts, Scene *UNUSED(scene), Object *ob)
diff --git a/source/blender/editors/util/editmode_undo.c b/source/blender/editors/util/editmode_undo.c
index 9b938c44a5f..342f9d43fc9 100644
--- a/source/blender/editors/util/editmode_undo.c
+++ b/source/blender/editors/util/editmode_undo.c
@@ -274,7 +274,7 @@ void undo_editmode_step(bContext *C, int step)
/* special case for editmesh, mode must be copied back to the scene */
if(obedit->type == OB_MESH) {
- EDBM_selectmode_to_scene(CTX_data_scene(C), obedit);
+ EDBM_selectmode_to_scene(C);
}
DAG_id_tag_update(&obedit->id, OB_RECALC_DATA);