forked from bartvdbraak/blender
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.
This commit is contained in:
parent
2c57e4f577
commit
e8c54b682a
@ -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__);
|
||||
|
@ -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");
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user