[Bf-blender-cvs] [3736a7cadd7] geometry-nodes: Geometry Nodes: Add ability to clear object's active modifier

Hans Goudey noreply at git.blender.org
Fri Nov 20 15:32:56 CET 2020


Commit: 3736a7cadd77377e3d34a7275c8bfb6608ff16be
Author: Hans Goudey
Date:   Fri Nov 20 09:32:46 2020 -0500
Branches: geometry-nodes
https://developer.blender.org/rB3736a7cadd77377e3d34a7275c8bfb6608ff16be

Geometry Nodes: Add ability to clear object's active modifier

`object.modifiers.active = None` will just clear the active flag
from every modifier.

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

M	source/blender/blenkernel/intern/object.c
M	source/blender/makesrna/intern/rna_object.c

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

diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 57651bb8ef4..6ae8340ce0a 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -1274,15 +1274,22 @@ void BKE_object_modifier_gpencil_hook_reset(Object *ob, HookGpencilModifierData
   }
 }
 
+/**
+ * Set the object's active modifier.
+ *
+ * \param md: If NULL, only clear the active modifier, otherwise
+ * it must be in the #Object.modifiers list.
+ */
 void BKE_object_modifier_set_active(Object *ob, ModifierData *md)
 {
-  BLI_assert(BLI_findindex(&ob->modifiers, md) != -1);
-
   LISTBASE_FOREACH (ModifierData *, md_iter, &ob->modifiers) {
     md_iter->flag &= ~eModifierFlag_Active;
   }
 
-  md->flag |= eModifierFlag_Active;
+  if (md != NULL) {
+    BLI_assert(BLI_findindex(&ob->modifiers, md) != -1);
+    md->flag |= eModifierFlag_Active;
+  }
 }
 
 ModifierData *BKE_object_active_modifier(const Object *ob)
diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c
index a0ae5cc46e7..ee115b74379 100644
--- a/source/blender/makesrna/intern/rna_object.c
+++ b/source/blender/makesrna/intern/rna_object.c
@@ -1624,6 +1624,11 @@ static void rna_Object_active_modifier_set(PointerRNA *ptr, PointerRNA value, Re
   Object *ob = (Object *)ptr->owner_id;
   ModifierData *md = value.data;
 
+  if (RNA_pointer_is_null(&value)) {
+    BKE_object_modifier_set_active(ob, NULL);
+    return;
+  }
+
   if (BLI_findindex(&ob->modifiers, md) == -1) {
     BKE_reportf(
         reports, RPT_ERROR, "Modifier \"%s\" is not in the object's modifier list", md->name);



More information about the Bf-blender-cvs mailing list