the hideous alt-tab selectmode menu is gone, replaced by alt-1, alt-2, and alt-3. need to still make the 'inclusive' feature work somehow though. also fixed some bugs in the selectmode flushing code.

This commit is contained in:
Joseph Eagar
2009-06-18 10:15:23 +00:00
parent 6360db1554
commit 20a7d79929
6 changed files with 77 additions and 59 deletions

View File

@@ -62,8 +62,8 @@ void BM_SelectMode_Flush(BMesh *bm)
if(bm->selectmode & SCE_SELECT_VERTEX) {
for(e = BMIter_New(&edges, bm, BM_EDGES_OF_MESH, bm ); e; e= BMIter_Step(&edges)) {
if(BM_TestHFlag(e->v1, BM_SELECT) && BM_TestHFlag(e->v2, BM_SELECT)) BM_SetHFlag(e, 1);
else BM_ClearHFlag(e, 0);
if(BM_TestHFlag(e->v1, BM_SELECT) && BM_TestHFlag(e->v2, BM_SELECT)) BM_SetHFlag(e, BM_SELECT);
else BM_ClearHFlag(e, BM_SELECT);
}
for(f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm ); f; f= BMIter_Step(&faces)) {
totsel = 0;
@@ -75,9 +75,9 @@ void BM_SelectMode_Flush(BMesh *bm)
} while(l != f->loopbase);
if(totsel == f->len)
BM_SetHFlag(f, 1);
BM_SetHFlag(f, BM_SELECT);
else
BM_ClearHFlag(f, 0);
BM_ClearHFlag(f, BM_SELECT);
}
}
else if(bm->selectmode & SCE_SELECT_EDGE) {
@@ -91,9 +91,9 @@ void BM_SelectMode_Flush(BMesh *bm)
}while(l!=f->loopbase);
if(totsel == f->len)
BM_SetHFlag(f, 1);
BM_SetHFlag(f, BM_SELECT);
else
BM_ClearHFlag(f, 0);
BM_ClearHFlag(f, BM_SELECT);
}
}

View File

@@ -1333,11 +1333,11 @@ void EDBM_selectmode_set(BMEditMesh *em)
if(em->selectmode & SCE_SELECT_VERTEX) {
BMIter iter;
eed = BMIter_New(&iter, em->bm, BM_EDGES_OF_MESH, NULL);
/*eed = BMIter_New(&iter, em->bm, BM_EDGES_OF_MESH, NULL);
for ( ; eed; eed=BMIter_Step(&iter)) BM_Select(em->bm, eed, 0);
efa = BMIter_New(&iter, em->bm, BM_FACES_OF_MESH, NULL);
for ( ; efa; efa=BMIter_Step(&iter)) BM_Select(em->bm, efa, 0);
for ( ; efa; efa=BMIter_Step(&iter)) BM_Select(em->bm, efa, 0);*/
EDBM_selectmode_flush(em);
}

View File

@@ -1083,3 +1083,57 @@ void MESH_OT_edge_face_add(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
static EnumPropertyItem prop_mesh_edit_types[] = {
{1, "VERT", "Vertices", ""},
{2, "EDGE", "Edges", ""},
{3, "FACE", "Faces", ""},
{0, NULL, NULL, NULL}
};
static int mesh_selection_type_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
BMEditMesh *em= ((Mesh *)obedit->data)->edit_btmesh;
int type = RNA_enum_get(op->ptr,"type");
switch (type) {
case 1:
em->selectmode = SCE_SELECT_VERTEX;
break;
case 2:
em->selectmode = SCE_SELECT_EDGE;
break;
case 3:
em->selectmode = SCE_SELECT_FACE;
break;
}
EDBM_selectmode_set(em);
CTX_data_scene(C)->selectmode = em->selectmode;
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
return OPERATOR_FINISHED;
}
void MESH_OT_selection_type(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Selection Mode";
ot->idname= "MESH_OT_selection_type";
/* api callbacks */
ot->invoke= NULL;
ot->exec= mesh_selection_type_exec;
ot->poll= ED_operator_editmesh;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* props */
RNA_def_enum(ot->srna, "type", prop_mesh_edit_types, 0, "Type", "Set the mesh selection type");
RNA_def_boolean(ot->srna, "inclusive", 0, "Inclusive", "Selects geometry around selected geometry, occording to selection mode");
}

View File

@@ -2998,47 +2998,6 @@ static void mesh_selection_type(Scene *scene, EditMesh *em, int val)
// if (EM_texFaceCheck())
}
}
static EnumPropertyItem prop_mesh_edit_types[] = {
{1, "VERT", "Vertices", ""},
{2, "EDGE", "Edges", ""},
{3, "FACE", "Faces", ""},
{0, NULL, NULL, NULL}
};
static int mesh_selection_type_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
mesh_selection_type(CTX_data_scene(C), em, RNA_enum_get(op->ptr,"type"));
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
void MESH_OT_selection_type(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Selection Mode";
ot->idname= "MESH_OT_selection_type";
/* api callbacks */
ot->invoke= WM_menu_invoke;
ot->exec= mesh_selection_type_exec;
ot->poll= ED_operator_editmesh;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* props */
RNA_def_enum(ot->srna, "type", prop_mesh_edit_types, 0, "Type", "Set the mesh selection type");
}
/* ************************* SEAMS AND EDGES **************** */
static int editmesh_mark_seam(bContext *C, wmOperator *op)

View File

@@ -224,10 +224,10 @@ void ED_keymap_mesh(wmWindowManager *wm)
WM_keymap_add_item(keymap, "MESH_OT_vertices_transform_to_sphere", SKEY, KM_PRESS, KM_CTRL|KM_SHIFT , 0);
WM_keymap_add_item(keymap, "MESH_OT_mark_seam", ONEKEY, KM_PRESS, KM_CTRL , 0);
RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_mark_seam", ONEKEY, KM_PRESS, KM_ALT , 0)->ptr,"clear",1);
//RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_mark_seam", ONEKEY, KM_PRESS, KM_ALT , 0)->ptr,"clear",1);
WM_keymap_add_item(keymap, "MESH_OT_mark_sharp", TWOKEY, KM_PRESS, KM_CTRL , 0);
RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_mark_sharp", TWOKEY, KM_PRESS, KM_ALT , 0)->ptr,"set",1);
//WM_keymap_add_item(keymap, "MESH_OT_mark_sharp", TWOKEY, KM_PRESS, KM_CTRL , 0);
//RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_mark_sharp", TWOKEY, KM_PRESS, KM_ALT , 0)->ptr,"set",1);
/* temp hotkeys! */
WM_keymap_add_item(keymap, "MESH_OT_vertices_select_similar", GKEY, KM_PRESS, KM_SHIFT, 0);
@@ -235,8 +235,13 @@ void ED_keymap_mesh(wmWindowManager *wm)
WM_keymap_add_item(keymap, "MESH_OT_faces_select_similar", GKEY, KM_PRESS, KM_SHIFT|KM_CTRL2, 0);
/* selection mode */
WM_keymap_add_item(keymap, "MESH_OT_selection_type", TABKEY, KM_PRESS, KM_CTRL, 0);
kmi = WM_keymap_add_item(keymap, "MESH_OT_selection_type", ONEKEY, KM_PRESS, KM_ALT, 0);
RNA_int_set(kmi->ptr, "type", 1);
kmi = WM_keymap_add_item(keymap, "MESH_OT_selection_type", TWOKEY, KM_PRESS, KM_ALT, 0);
RNA_int_set(kmi->ptr, "type", 2);
kmi = WM_keymap_add_item(keymap, "MESH_OT_selection_type", THREEKEY, KM_PRESS, KM_ALT, 0);
RNA_int_set(kmi->ptr, "type", 3);
/* hide */
WM_keymap_add_item(keymap, "MESH_OT_hide", HKEY, KM_PRESS, 0, 0);
RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_hide", HKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "unselected", 1);
@@ -245,8 +250,8 @@ void ED_keymap_mesh(wmWindowManager *wm)
/* tools */
WM_keymap_add_item(keymap, "MESH_OT_normals_make_consistent", NKEY, KM_PRESS, KM_CTRL, 0);
RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_normals_make_consistent", NKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0)->ptr, "inside", 1);
WM_keymap_add_item(keymap, "MESH_OT_vertices_smooth", THREEKEY, KM_PRESS, KM_CTRL , 0);
WM_keymap_add_item(keymap, "MESH_OT_flip_editnormals", THREEKEY, KM_PRESS, KM_ALT , 0);
//WM_keymap_add_item(keymap, "MESH_OT_vertices_smooth", THREEKEY, KM_PRESS, KM_CTRL , 0);
//WM_keymap_add_item(keymap, "MESH_OT_flip_editnormals", THREEKEY, KM_PRESS, KM_ALT , 0);
WM_keymap_add_item(keymap, "MESH_OT_subdivs", WKEY, KM_PRESS, 0, 0); // this is the menu
/*WM_keymap_add_item(keymap, "MESH_OT_subdivide_multi", WKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0);

View File

@@ -174,9 +174,9 @@ void view3d_keymap(wmWindowManager *wm)
WM_keymap_add_item(keymap, "VIEW3D_OT_localview", PADSLASHKEY, KM_PRESS, 0, 0);
/* layers, shift + alt are properties set in invoke() */
RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", ONEKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 1);
RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", TWOKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 2);
RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", THREEKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 3);
RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", ONEKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "nr", 1);
RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", TWOKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "nr", 2);
RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", THREEKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "nr", 3);
RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", FOURKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 4);
RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", FIVEKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 5);
RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", SIXKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 6);