editmesh face menu back, ctrl-pkey

This commit is contained in:
2009-01-24 22:21:12 +00:00
parent d62955bcac
commit 3e6b5804fd
3 changed files with 312 additions and 1 deletions

View File

@@ -111,6 +111,7 @@ static int snap_to_center() {return 0;}
/* local prototypes ---------------*/
static void free_tagged_edges_faces(EditMesh *em, EditEdge *eed, EditFace *efa);
int EdgeLoopDelete(EditMesh *em);
void addedgeface_mesh(EditMesh *em);
/********* qsort routines *********/
@@ -695,6 +696,31 @@ void extrude_mesh(Object *obedit, EditMesh *em)
}
// XXX should be a menu item
static int extrude_mesh_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
EditMesh *em= ((Mesh *)obedit->data)->edit_mesh;
extrude_mesh(obedit,em);
ED_undo_push(C, "Extrude Mesh"); // Note this will become depricated
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
return OPERATOR_FINISHED;
}
void MESH_OT_extrude_mesh(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Extrude Mesh";
ot->idname= "MESH_OT_extrude_mesh";
/* api callbacks */
ot->exec= extrude_mesh_exec;
ot->poll= ED_operator_editmesh;
}
void split_mesh(EditMesh *em)
{
@@ -6267,6 +6293,7 @@ void mesh_rotate_colors(EditMesh *em)
}
}
void mesh_mirror_colors(EditMesh *em)
{
EditFace *efa;
@@ -6498,4 +6525,273 @@ void MESH_OT_subdivs(wmOperatorType *ot)
RNA_def_float(ot->srna, "random_factor", 5.0, 0.0f, FLT_MAX, "Random Factor", "", 0.0f, 1000.0f);
RNA_def_float(ot->srna, "smoothness", 5.0f, 0.0f, 1000.0f, "Smoothness", "", 0.0f, FLT_MAX);
}
static int fill_mesh_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
EditMesh *em= ((Mesh *)obedit->data)->edit_mesh;
fill_mesh(em);
ED_undo_push(C, "Fill Mesh"); // Note this will become depricated
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
return OPERATOR_FINISHED;
}
void MESH_OT_fill_mesh(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Fill Mesh";
ot->idname= "MESH_OT_fill_mesh";
/* api callbacks */
ot->exec= fill_mesh_exec;
ot->poll= ED_operator_editmesh;
}
static int beauty_fill_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
EditMesh *em= ((Mesh *)obedit->data)->edit_mesh;
beauty_fill(em);
ED_undo_push(C, "Beauty Fill"); // Note this will become depricated
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
return OPERATOR_FINISHED;
}
void MESH_OT_beauty_fill(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Beauty Fill";
ot->idname= "MESH_OT_beauty_fill";
/* api callbacks */
ot->exec= beauty_fill_exec;
ot->poll= ED_operator_editmesh;
}
static int convert_quads_to_tris_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
EditMesh *em= ((Mesh *)obedit->data)->edit_mesh;
convert_to_triface(em,0);
ED_undo_push(C, "Quads to Tris"); // Note this will become depricated
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
return OPERATOR_FINISHED;
}
void MESH_OT_convert_quads_to_tris(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Quads to Tris";
ot->idname= "MESH_OT_convert_quads_to_tris";
/* api callbacks */
ot->exec= convert_quads_to_tris_exec;
ot->poll= ED_operator_editmesh;
}
static int convert_tris_to_quads_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
EditMesh *em= ((Mesh *)obedit->data)->edit_mesh;
join_triangles(em);
ED_undo_push(C, "Tris To Quads"); // Note this will become depricated
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
return OPERATOR_FINISHED;
}
void MESH_OT_convert_tris_to_quads(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Tris to Quads";
ot->idname= "MESH_OT_convert_tris_to_quads";
/* api callbacks */
ot->exec= convert_tris_to_quads_exec;
ot->poll= ED_operator_editmesh;
}
static int edge_flip_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
EditMesh *em= ((Mesh *)obedit->data)->edit_mesh;
edge_flip(em);
ED_undo_push(C, "Edge Flip"); // Note this will become depricated
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
return OPERATOR_FINISHED;
}
void MESH_OT_edge_flip(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Edge Flip";
ot->idname= "MESH_OT_edge_flip";
/* api callbacks */
ot->exec= edge_flip_exec;
ot->poll= ED_operator_editmesh;
}
static int addedgeface_mesh_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
EditMesh *em= ((Mesh *)obedit->data)->edit_mesh;
addedgeface_mesh(em);
ED_undo_push(C, "Make Edge/Face"); // Note this will become depricated
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
return OPERATOR_FINISHED;
}
void MESH_OT_addedgeface_mesh(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Make Edge/Face";
ot->idname= "MESH_OT_addedgeface_mesh";
/* api callbacks */
ot->exec= addedgeface_mesh_exec;
ot->poll= ED_operator_editmesh;
}
static int mesh_set_smooth_faces_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
EditMesh *em= ((Mesh *)obedit->data)->edit_mesh;
mesh_set_smooth_faces(em,1);
ED_undo_push(C, "Set Smooth Faces"); // Note this will become depricated
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
return OPERATOR_FINISHED;
}
void MESH_OT_mesh_set_smooth_faces(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Set Smooth Faces";
ot->idname= "MESH_OT_mesh_set_smooth_faces";
/* api callbacks */
ot->exec= mesh_set_smooth_faces_exec;
ot->poll= ED_operator_editmesh;
}
static int mesh_set_solid_faces_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
EditMesh *em= ((Mesh *)obedit->data)->edit_mesh;
mesh_set_smooth_faces(em,0);
ED_undo_push(C, "Set Solid Faces"); // Note this will become depricated
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
return OPERATOR_FINISHED;
}
void MESH_OT_mesh_set_solid_faces(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Set Solid Faces";
ot->idname= "MESH_OT_mesh_set_solid_faces";
/* api callbacks */
ot->exec= mesh_set_solid_faces_exec;
ot->poll= ED_operator_editmesh;
}
static int edit_faces_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
int items;
char *menu, *p;
items = 8;
menu= MEM_callocN(items * OP_MAX_TYPENAME, "string");
p= menu + sprintf(menu, "%s %%t", "edit faces");
p+= sprintf(p, "|%s %%x%d", "fill faces", 7);
p+= sprintf(p, "|%s %%x%d", "beauty fill faces", 6);
p+= sprintf(p, "|%s %%x%d", "quads to tris", 5);
p+= sprintf(p, "|%s %%x%d", "tris to quads", 4);
p+= sprintf(p, "|%s %%x%d", "flip triangle edges", 3);
p+= sprintf(p, "|%s %%x%d", "make edge/face", 2);
p+= sprintf(p, "|%s %%x%d", "set smooth", 1);
p+= sprintf(p, "|%s %%x%d", "set solid", 0);
uiPupmenuOperator(C, 20, op, "index", menu);
MEM_freeN(menu);
return OPERATOR_RUNNING_MODAL;
}
static int edit_faces_exec(bContext *C, wmOperator *op)
{
switch(RNA_int_get(op->ptr, "index"))
{
case 7: /* Fill Faces */
fill_mesh_exec(C,op);
break;
case 6: /* Beauty Fill Faces */
beauty_fill_exec(C,op);
break;
case 5: /* Quads to Tris */
convert_quads_to_tris_exec(C,op);
break;
case 4: /* Tris to Quads */
convert_tris_to_quads_exec(C,op);
break;
case 3: /* Flip triangle edges */
edge_flip_exec(C,op);
break;
case 2: /* Make Edge/Face */
addedgeface_mesh_exec(C,op);
break;
case 1: /* Set Smooth */
mesh_set_smooth_faces_exec(C,op);
break;
case 0: /* Set Solid */
mesh_set_solid_faces_exec(C,op);
break;
}
return OPERATOR_FINISHED;
}
void MESH_OT_edit_faces(wmOperatorType *ot)
{
/* identifiers */
ot->name= "edit faces";
ot->idname= "MESH_OT_edit_faces";
/* api callbacks */
ot->invoke= edit_faces_invoke;
ot->exec= edit_faces_exec;
ot->poll= ED_operator_editmesh;
/*props */
RNA_def_int(ot->srna, "index", 0, 0, INT_MAX, "Index", "", 0, 1000);
}

View File

@@ -216,6 +216,17 @@ void MESH_OT_subdivide_multi(struct wmOperatorType *ot);
void MESH_OT_subdivide_multi_fractal(struct wmOperatorType *ot);
void MESH_OT_subdivide_smooth(struct wmOperatorType *ot);
void MESH_OT_removedoublesflag(struct wmOperatorType *ot);
void MESH_OT_extrude_mesh(struct wmOperatorType *ot);
void MESH_OT_edit_faces(struct wmOperatorType *ot);
void MESH_OT_fill_mesh(struct wmOperatorType *ot);
void MESH_OT_beauty_fill(struct wmOperatorType *ot);
void MESH_OT_convert_quads_to_tris(struct wmOperatorType *ot);
void MESH_OT_convert_tris_to_quads(struct wmOperatorType *ot);
void MESH_OT_edge_flip(struct wmOperatorType *ot);
void MESH_OT_addedgeface_mesh(struct wmOperatorType *ot);
void MESH_OT_mesh_set_smooth_faces(struct wmOperatorType *ot);
void MESH_OT_mesh_set_solid_faces(struct wmOperatorType *ot);
#endif // MESH_INTERN_H

View File

@@ -132,7 +132,9 @@ void ED_operatortypes_mesh(void)
WM_operatortype_append(MESH_OT_add_primitive_ico_sphere);
WM_operatortype_append(MESH_OT_add_duplicate);
WM_operatortype_append(MESH_OT_removedoublesflag);
WM_operatortype_append(MESH_OT_extrude_mesh);
WM_operatortype_append(MESH_OT_edit_faces);
}
/* note mesh keymap also for other space? */
@@ -168,6 +170,8 @@ void ED_keymap_mesh(wmWindowManager *wm)
WM_keymap_add_item(keymap, "MESH_OT_subdivide_multi_fractal", WKEY, KM_PRESS, KM_ALT, 0);
WM_keymap_add_item(keymap, "MESH_OT_subdivide_smooth", WKEY, KM_PRESS, KM_CTRL|KM_ALT, 0);*/
WM_keymap_add_item(keymap, "MESH_OT_removedoublesflag", VKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "MESH_OT_extrude_mesh", EKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "MESH_OT_edit_faces", PKEY, KM_PRESS, KM_CTRL, 0);