From e8c54b682a2ab658a0e87b45f442220c1caaadcd Mon Sep 17 00:00:00 2001 From: Howard Trickey Date: Fri, 1 Nov 2013 11:42:11 +0000 Subject: Add 'cut-through' option for Knife Project operator. If enabled, it makes knife project act as the cut-through (Shift-K) version of knife. This option will soon be more useful when a better cut-though Knife change is submitted, allowing this to work for cuts within faces in addition to cuts across them. --- source/blender/editors/mesh/editmesh_knife.c | 3 +-- source/blender/editors/mesh/editmesh_knife_project.c | 9 ++++++++- source/blender/editors/mesh/mesh_intern.h | 3 ++- 3 files changed, 11 insertions(+), 4 deletions(-) (limited to 'source/blender/editors/mesh') diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 306aedaa9ec..adb03ab837b 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -3539,7 +3539,7 @@ static bool edbm_mesh_knife_face_isect(ARegion *ar, LinkNode *polys, BMFace *f, /** * \param use_tag When set, tag all faces inside the polylines. */ -void EDBM_mesh_knife(bContext *C, LinkNode *polys, bool use_tag) +void EDBM_mesh_knife(bContext *C, LinkNode *polys, bool use_tag, bool cut_through) { KnifeTool_OpData *kcd; @@ -3548,7 +3548,6 @@ void EDBM_mesh_knife(bContext *C, LinkNode *polys, bool use_tag) /* init */ { const bool only_select = false; - const bool cut_through = false; const bool is_interactive = false; /* can enable for testing */ kcd = MEM_callocN(sizeof(KnifeTool_OpData), __func__); diff --git a/source/blender/editors/mesh/editmesh_knife_project.c b/source/blender/editors/mesh/editmesh_knife_project.c index f473939d0aa..57a85f1162d 100644 --- a/source/blender/editors/mesh/editmesh_knife_project.c +++ b/source/blender/editors/mesh/editmesh_knife_project.c @@ -42,6 +42,9 @@ #include "BKE_editmesh.h" #include "BKE_report.h" +#include "RNA_define.h" +#include "RNA_access.h" + #include "MEM_guardedalloc.h" #include "WM_types.h" @@ -117,6 +120,7 @@ static int knifeproject_exec(bContext *C, wmOperator *op) Scene *scene = CTX_data_scene(C); Object *obedit = CTX_data_edit_object(C); BMEditMesh *em = BKE_editmesh_from_object(obedit); + const bool cut_through = RNA_boolean_get(op->ptr, "cut_through"); LinkNode *polys = NULL; @@ -129,7 +133,7 @@ static int knifeproject_exec(bContext *C, wmOperator *op) CTX_DATA_END; if (polys) { - EDBM_mesh_knife(C, polys, true); + EDBM_mesh_knife(C, polys, true, cut_through); /* select only tagged faces */ BM_mesh_elem_hflag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT, false); @@ -166,4 +170,7 @@ void MESH_OT_knife_project(wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING; + + /* parameters */ + RNA_def_boolean(ot->srna, "cut_through", false, "Cut through", "Cut through all faces, not just visible ones"); } diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h index ed026258e4b..98c145c9ce7 100644 --- a/source/blender/editors/mesh/mesh_intern.h +++ b/source/blender/editors/mesh/mesh_intern.h @@ -116,7 +116,8 @@ void MESH_OT_inset(struct wmOperatorType *ot); /* *** editmesh_knife.c *** */ void MESH_OT_knife_tool(struct wmOperatorType *ot); void MESH_OT_knife_project(struct wmOperatorType *ot); -void EDBM_mesh_knife(struct bContext *C, struct LinkNode *polys, bool use_tag); +void EDBM_mesh_knife(struct bContext *C, struct LinkNode *polys, + bool use_tag, bool cut_through); struct wmKeyMap *knifetool_modal_keymap(struct wmKeyConfig *keyconf); -- cgit v1.2.3