[Bf-extensions-cvs] [f2d0c03f] blender-v2.93-release: Fix T103455: Modifier tools add-on don't support GPencil modifiers

Pratik Borhade noreply at git.blender.org
Fri Jan 13 10:24:16 CET 2023


Commit: f2d0c03fdade9c484908451573b328bed325e81b
Author: Pratik Borhade
Date:   Mon Dec 26 12:32:00 2022 +0530
Branches: blender-v2.93-release
https://developer.blender.org/rBAf2d0c03fdade9c484908451573b328bed325e81b

Fix T103455: Modifier tools add-on don't support GPencil modifiers

Modifier stack for GPencil object is handled separately than the geometry
objects (mesh/Curve). This patch provides support for GPencil modifier.
`modifier_type` function is added to assign correct modifier list
according to the object type.

Reviewed by: antoniov

Differential Revision: https://developer.blender.org/D16865

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

M	space_view3d_modifier_tools.py

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

diff --git a/space_view3d_modifier_tools.py b/space_view3d_modifier_tools.py
index 1fb64635..f76615c1 100644
--- a/space_view3d_modifier_tools.py
+++ b/space_view3d_modifier_tools.py
@@ -53,7 +53,9 @@ class ApplyAllModifiers(Operator):
             contx = bpy.context.copy()
             contx['object'] = obj
 
-            for mod in obj.modifiers[:]:
+            modifiers = modifier_type(obj)
+
+            for mod in modifiers[:]:
                 contx['modifier'] = mod
                 is_mod = True
                 try:
@@ -61,6 +63,10 @@ class ApplyAllModifiers(Operator):
                                         contx,
                                         modifier=contx['modifier'].name
                                         )
+
+                    bpy.ops.object.gpencil_modifier_apply(
+                                        modifier=contx['modifier'].name
+                                        )
                 except:
                     obj_name = getattr(obj, "name", "NO NAME")
                     collect_names.append(obj_name)
@@ -106,10 +112,11 @@ class DeleteAllModifiers(Operator):
 
         for obj in context.selected_objects:
             is_select = True
-            modifiers = obj.modifiers[:]
-            for modi in modifiers:
+            modifiers = modifier_type(obj)
+
+            for modi in modifiers[:]:
                 is_mod = True
-                obj.modifiers.remove(modi)
+                modifiers.remove(modi)
 
         if is_select:
             if is_mod:
@@ -143,12 +150,16 @@ class ToggleApplyModifiersView(Operator):
         skipped = set()             # collect names
         count_modifiers = 0         # check for message_a (all skipped)
 
+        modifiers = modifier_type(context.active_object)
+
         # check if the active object has only one non exposed modifier as the logic will fail
-        if len(context.active_object.modifiers) == 1 and \
-                context.active_object.modifiers[0].type in skip_type:
+        if len(modifiers) == 1 and \
+                modifiers[0].type in skip_type:
 
             for obj in context.selected_objects:
-                for mod in obj.modifiers:
+                mod_sel = modifier_type(obj)
+
+                for mod in mod_sel:
                     if mod.type in skip_type:
                         skipped.add(mod.name)
                         continue
@@ -157,7 +168,7 @@ class ToggleApplyModifiersView(Operator):
                         is_apply = False
                         break
         else:
-            for mod in context.active_object.modifiers:
+            for mod in modifiers:
                 if mod.type in skip_type:
                     skipped.add(mod.name)
                     continue
@@ -166,9 +177,9 @@ class ToggleApplyModifiersView(Operator):
                     is_apply = False
                     break
 
-        count_modifiers = len(context.active_object.modifiers)
+        count_modifiers = len(modifiers)
         # active object - no selection
-        for mod in context.active_object.modifiers:
+        for mod in modifiers:
             if mod.type in skip_type:
                 count_modifiers -= 1
                 skipped.add(mod.name)
@@ -177,9 +188,12 @@ class ToggleApplyModifiersView(Operator):
             mod.show_viewport = is_apply
 
         for obj in context.selected_objects:
-            count_modifiers += len(obj.modifiers)
 
-            for mod in obj.modifiers:
+            modifiers = modifier_type(obj)
+
+            count_modifiers += len(modifiers)
+
+            for mod in modifiers:
                 if mod.type in skip_type:
                     skipped.add(mod.name)
                     count_modifiers -= 1
@@ -210,9 +224,11 @@ class ToggleAllShowExpanded(Operator):
 
     def execute(self, context):
         obj = context.active_object
-        if (len(obj.modifiers)):
+        modifiers = modifier_type(obj)
+
+        if (len(modifiers)):
             vs = 0
-            for mod in obj.modifiers:
+            for mod in modifiers:
                 if (mod.show_expanded):
                     vs += 1
                 else:
@@ -220,7 +236,7 @@ class ToggleAllShowExpanded(Operator):
             is_close = False
             if (0 < vs):
                 is_close = True
-            for mod in obj.modifiers:
+            for mod in modifiers:
                 mod.show_expanded = not is_close
         else:
             self.report({'WARNING'}, "Not a single modifier to Expand/Collapse")
@@ -234,7 +250,7 @@ class ToggleAllShowExpanded(Operator):
 # Menus #
 def menu(self, context):
     if (context.active_object):
-        if (len(context.active_object.modifiers)):
+        if (len(context.active_object.modifiers) or len(context.active_object.grease_pencil_modifiers)):
             col = self.layout.column(align=True)
 
             row = col.row(align=True)
@@ -254,13 +270,18 @@ def menu(self, context):
 
 def menu_func(self, context):
     if (context.active_object):
-        if (len(context.active_object.modifiers)):
+        if (len(context.active_object.modifiers) or len(context.active_object.grease_pencil_modifiers)):
             layout = self.layout
             layout.separator()
             layout.operator(ApplyAllModifiers.bl_idname,
                             icon='IMPORT',
                             text="Apply All Modifiers")
 
+def modifier_type(object):
+        if object.type == 'GPENCIL':
+            return object.grease_pencil_modifiers
+        return object.modifiers
+
 # Register
 classes = [
     ApplyAllModifiers,
@@ -277,6 +298,8 @@ def register():
     # Add "Specials" menu to the "Modifiers" menu
     bpy.types.DATA_PT_modifiers.prepend(menu)
 
+    bpy.types.DATA_PT_gpencil_modifiers.prepend(menu)
+
     # Add apply operator to the Apply 3D View Menu
     bpy.types.VIEW3D_MT_object_apply.append(menu_func)
 
@@ -285,6 +308,8 @@ def unregister():
     # Remove "Specials" menu from the "Modifiers" menu.
     bpy.types.DATA_PT_modifiers.remove(menu)
 
+    bpy.types.DATA_PT_gpencil_modifiers.remove(menu)
+
     # Remove apply operator to the Apply 3D View Menu
     bpy.types.VIEW3D_MT_object_apply.remove(menu_func)



More information about the Bf-extensions-cvs mailing list