OverviewFilesCommitsIssuesDocsReleasesPeers

hardops / operators / modifiers / Apply_modfiers.py

76 lines · python ref:
import bpy
from .. meshtools.applymod import apply_mod
from ... utility import modifier
from ... utility import addon
from bpy.props import EnumProperty



mods_types = [
    ('BOOLEAN', '', '', 'MOD_BOOLEAN', 1),
    ('MIRROR', '', '', 'MOD_MIRROR', 2),
    ('BEVEL', '', '', 'MOD_BEVEL', 3),
    ('SKIN', '', '', 'MOD_SKIN', 4),
    ('SOLIDIFY', '', '', 'MOD_SOLIDIFY', 5),
    ('SUBSURF', '', '', 'MOD_SUBSURF', 6),
    ('DECIMATE', '', '', 'MOD_DECIM', 7),
    ('DISPLACE', '', '', 'MOD_DISPLACE', 8),
    ('WEIGHTED_NORMAL', '', '', 'MOD_NORMALEDIT', 9),
    ('SHRINKWRAP', '', '', 'MOD_SHRINKWRAP', 10),
    ('SCREW', '', '', 'MOD_SCREW', 11),
    ('WIREFRAME', '', '', 'MOD_WIREFRAME', 12),
    ('CAST', '', '', 'MOD_CAST', 13),
    ('TRIANGULATE', '', '', 'MOD_TRIANGULATE', 14),
    ('LATTICE', '', '', 'MOD_LATTICE', 15),
    ('EDGE_SPLIT', '', '', 'MOD_EDGESPLIT', 16),
    ('ARRAY', '', '', 'MOD_ARRAY', 17)]



class HOPS_OT_MOD_Apply(bpy.types.Operator):
    bl_idname = "hops.mod_apply"
    bl_label = "Apply Modifier"
    bl_options = {'REGISTER', 'UNDO'}
    bl_description = """Apply Modifiers
    
LMB - Apply Modifiers
CTRL - Smart Apply 

"""
    modifier_types: EnumProperty(
        name='Start Operation',
        description='Start with the previously used settings of operation',
        items=mods_types,
        options={"ENUM_FLAG"},
        default={'BOOLEAN', 'MIRROR', 'BEVEL', 'SKIN', 'SOLIDIFY', 'SUBSURF', 'DECIMATE', 'DISPLACE', 'WEIGHTED_NORMAL', 'SHRINKWRAP', 'SCREW', 'WIREFRAME', 'CAST', 'LATTICE', 'EDGE_SPLIT', 'ARRAY'})

    @classmethod
    def poll(cls, context):
        return any(o.type == 'MESH' for o in context.selected_objects)

    # def draw(self, context):
    #     layout = self.layout
    #     layout.label(text='modifiers applied')
        # col = layout.column()
        # col.scale_x = 1.4
        # col.scale_y = 1.4
        # row = col.row()
        # row.prop(self, "modifier_types", expand=True)

    def invoke(self, context, event):            
        count = len(context.active_object.modifiers[:])
        for object in [o for o in context.selected_objects if o.type == 'MESH']:
            if event.ctrl:
                apply_mod(self, object, clear_last=False)
                bpy.ops.hops.display_notification(info=f'Smart Apply' )
                bpy.ops.hops.draw_wire_mesh_launcher('INVOKE_DEFAULT', target='SELECTED')
                self.report({'INFO'}, F'Smart Applied')
                return {"FINISHED"}
            else:
                modifier.apply(object)
                #bpy.ops.mesh.customdata_custom_splitnormals_clear()
                bpy.ops.hops.draw_wire_mesh_launcher('INVOKE_DEFAULT', target='SELECTED')
                if addon.preference().ui.Hops_extra_info:
                    bpy.ops.hops.display_notification(info=f"Applied {count} Modifiers")
        return {"FINISHED"}