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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user