diff options
author | Joseph Eagar <joeedh@gmail.com> | 2009-03-02 05:21:18 +0300 |
---|---|---|
committer | Joseph Eagar <joeedh@gmail.com> | 2009-03-02 05:21:18 +0300 |
commit | 3faf2b6db7cbe42c3439cad09b7035a25fa5c6c2 (patch) | |
tree | a76411d92e16566899f711263504b6b572f2c16f /source/blender/editors/mesh/editmesh_tools.c | |
parent | 68341862ddf05e30ffbb9f2e7dd3a05e8cc81e77 (diff) |
more tweaks to triangulator. also added a bmeshutils.c file in editors/mesh for ui-related bmesh functions. and made delete only faces use the bmesh del operator, so it can handle ngons.
Diffstat (limited to 'source/blender/editors/mesh/editmesh_tools.c')
-rw-r--r-- | source/blender/editors/mesh/editmesh_tools.c | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index e026bb8ea88..c339c0b72a4 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -1147,16 +1147,7 @@ static int delete_mesh_exec(bContext *C, wmOperator *op) BMO_Finish_Op(bm, &bmop); - if (BMO_GetError(bm, &errmsg, NULL)) { - BKE_report(op->reports, RPT_ERROR, errmsg); - BMO_ClearStack(bm); - return OPERATOR_CANCELLED; - } - - em2 = bmesh_to_editmesh(bm); - set_editMesh(em, em2); - MEM_freeN(em2); - BM_Free_Mesh(bm); + if (!EDBM_Finish(bm, em, op, C)) return OPERATOR_CANCELLED; } else if(event==6) { if(!EdgeLoopDelete(em, op)) @@ -1263,16 +1254,24 @@ static int delete_mesh_exec(bContext *C, wmOperator *op) if(em->selected.first) BLI_freelistN(&(em->selected)); } else if(event==5) { + BMesh *bm = editmesh_to_bmesh(em); + BMOperator bmop; + EditMesh *em2; + char *errmsg; + str= "Erase Only Faces"; - efa= em->faces.first; - while(efa) { - nextvl= efa->next; - if(efa->f & SELECT) { - BLI_remlink(&em->faces, efa); - free_editface(em, efa); - } - efa= nextvl; - } + + BMO_Init_Op(&bmop, BMOP_DEL); + BMO_HeaderFlag_To_Slot(bm, &bmop, BMOP_DEL_MULTIN, + BM_SELECT, BM_FACE); + BMO_Set_Int(&bmop, BMOP_DEL_CONTEXT, DEL_ONLYFACES); + + BMO_Exec_Op(bm, &bmop); + + BMO_Finish_Op(bm, &bmop); + + if (!EDBM_Finish(bm, em, op, C)) return OPERATOR_CANCELLED; + } EM_fgon_flags(em); // redo flags and indices for fgons |