diff options
author | Hans Goudey <h.goudey@me.com> | 2020-11-19 22:47:43 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2020-11-19 22:47:43 +0300 |
commit | b7d7051dc390e1dcc8e05a4a0db7ab59a5cf7d7f (patch) | |
tree | 8fc28c5ff2b0113ea2496eda18b758439a7e61aa | |
parent | e0516d4d8e0d48e1991c9eaa765a34036126cde1 (diff) |
Geometry Nodes: Add an operator to set the active modifer
Also make new modifiers active, and properly set the active
state when duplicating a modifier.
-rw-r--r-- | source/blender/editors/object/object_intern.h | 1 | ||||
-rw-r--r-- | source/blender/editors/object/object_modifier.c | 45 | ||||
-rw-r--r-- | source/blender/editors/object/object_ops.c | 1 |
3 files changed, 47 insertions, 0 deletions
diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index d0c6134bab5..207057ea6a6 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -173,6 +173,7 @@ void OBJECT_OT_modifier_apply(struct wmOperatorType *ot); void OBJECT_OT_modifier_apply_as_shapekey(wmOperatorType *ot); void OBJECT_OT_modifier_convert(struct wmOperatorType *ot); void OBJECT_OT_modifier_copy(struct wmOperatorType *ot); +void OBJECT_OT_modifier_set_active(struct wmOperatorType *ot); void OBJECT_OT_multires_subdivide(struct wmOperatorType *ot); void OBJECT_OT_multires_reshape(struct wmOperatorType *ot); void OBJECT_OT_multires_higher_levels_delete(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c index 6bd95cd8e51..b05f3454391 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -239,6 +239,8 @@ ModifierData *ED_object_modifier_add( } } + BKE_object_modifier_set_active(ob, new_md); + DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY); DEG_relations_tag_update(bmain); @@ -921,6 +923,7 @@ int ED_object_modifier_copy( BKE_modifier_copydata(md, nmd); BLI_insertlinkafter(&ob->modifiers, md, nmd); BKE_modifier_unique_name(&ob->modifiers, nmd); + BKE_object_modifier_set_active(ob, nmd); nmd->flag |= eModifierFlag_OverrideLibrary_Local; @@ -1617,6 +1620,48 @@ void OBJECT_OT_modifier_copy(wmOperatorType *ot) /** \} */ /* ------------------------------------------------------------------- */ +/** \name Set Active Modifier Operator + * \{ */ + +static int modifier_set_active_exec(bContext *C, wmOperator *op) +{ + Object *ob = ED_object_active_context(C); + ModifierData *md = edit_modifier_property_get(op, ob, 0); + + BKE_object_modifier_set_active(ob, md); + + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob); + + return OPERATOR_FINISHED; +} + +static int modifier_set_active_invoke(bContext *C, wmOperator *op, const wmEvent *event) +{ + int retval; + if (edit_modifier_invoke_properties(C, op, event, &retval)) { + return modifier_set_active_exec(C, op); + } + return retval; +} + +void OBJECT_OT_modifier_set_active(wmOperatorType *ot) +{ + ot->name = "Set Active Modifier"; + ot->description = "Activate the modifier to use as the context"; + ot->idname = "OBJECT_OT_modifier_set_active"; + + ot->invoke = modifier_set_active_invoke; + ot->exec = modifier_set_active_exec; + ot->poll = edit_modifier_liboverride_allowed_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_INTERNAL; + edit_modifier_properties(ot); +} + +/** \} */ + +/* ------------------------------------------------------------------- */ /** \name Multires Delete Higher Levels Operator * \{ */ diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index 3fc29f3147b..8ba0ce5fd08 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -137,6 +137,7 @@ void ED_operatortypes_object(void) WM_operatortype_append(OBJECT_OT_modifier_apply_as_shapekey); WM_operatortype_append(OBJECT_OT_modifier_convert); WM_operatortype_append(OBJECT_OT_modifier_copy); + WM_operatortype_append(OBJECT_OT_modifier_set_active); WM_operatortype_append(OBJECT_OT_multires_subdivide); WM_operatortype_append(OBJECT_OT_multires_reshape); WM_operatortype_append(OBJECT_OT_multires_higher_levels_delete); |