OverviewFilesCommitsIssuesDocsReleasesPeers

hardops / operators / modifiers / skin.py

65 lines · python ref:
import bpy
from ... utility import addon
from ...ui_framework.operator_ui import Master


class HOPS_OT_MOD_Skin(bpy.types.Operator):
    bl_idname = "hops.mod_skin"
    bl_label = "Add skin Modifier"
    bl_options = {'REGISTER', 'UNDO'}
    bl_description = """LMB - Add skin Modifier
LMB + CTRL - Add new skin Modifier

Shift - Arms

"""
    called_ui = False

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        HOPS_OT_MOD_Skin.called_ui = False

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

    def invoke(self, context, event):

        if event.shift:
            bpy.ops.hops.sculpt_arms("INVOKE_DEFAULT")
            return {"FINISHED"}

        for object in [o for o in context.selected_objects if o.type == 'MESH']:
            if event.ctrl:
                self.add_skin_modifier(object)

            else:
                if not self.skin_modifiers(object):
                    self.add_skin_modifier(object)

        # Operator UI
        if not HOPS_OT_MOD_Skin.called_ui:
            HOPS_OT_MOD_Skin.called_ui = True

            ui = Master()
            draw_data = [
                ["SKIN"],
                ["Skin Modifier added"]]
            ui.receive_draw_data(draw_data=draw_data)
            ui.draw(draw_bg=addon.preference().ui.Hops_operator_draw_bg, draw_border=addon.preference().ui.Hops_operator_draw_border)

        return {"FINISHED"}

    @staticmethod
    def skin_modifiers(object):
        return [modifier for modifier in object.modifiers if modifier.type == "SKIN"]

    def add_skin_modifier(self, object):
        skin_mod = object.modifiers.new(name="skin", type="SKIN")
        skin_mod.branch_smoothing = 0
        skin_mod.use_smooth_shade = True
        skin_mod.use_x_symmetry = False
        skin_mod.use_y_symmetry = False
        skin_mod.use_z_symmetry = False