[Bf-blender-cvs] [b7d7051dc39] geometry-nodes: Geometry Nodes: Add an operator to set the active modifer

Hans Goudey noreply at git.blender.org
Thu Nov 19 20:47:48 CET 2020


Commit: b7d7051dc390e1dcc8e05a4a0db7ab59a5cf7d7f
Author: Hans Goudey
Date:   Thu Nov 19 14:47:43 2020 -0500
Branches: geometry-nodes
https://developer.blender.org/rBb7d7051dc390e1dcc8e05a4a0db7ab59a5cf7d7f

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.

===================================================================

M	source/blender/editors/object/object_intern.h
M	source/blender/editors/object/object_modifier.c
M	source/blender/editors/object/object_ops.c

===================================================================

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;
 
@@ -1616,6 +1619,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);



More information about the Bf-blender-cvs mailing list