Welcome to mirror list, hosted at ThFree Co, Russian Federation.

utils_core.py « space_view3d_brush_menus - git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: dc99ba0bdc176cea25047f007f149e99dd47a955 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# gpl author: Ryan Inch (Imaginer)

import bpy

get_addon_name = 'space_view3d_brush_menus'

# Property Icon Width
PIW = '       '


# check for (currently) brushes being linked
def get_brush_link(context, types="brush"):
    tool_settings = context.tool_settings
    has_brush = None

    if get_mode() == 'SCULPT':
        datapath = tool_settings.sculpt

    elif get_mode() == 'VERTEX_PAINT':
        datapath = tool_settings.vertex_paint

    elif get_mode() == 'WEIGHT_PAINT':
        datapath = tool_settings.weight_paint

    elif get_mode() == 'TEXTURE_PAINT':
        datapath = tool_settings.image_paint
    else:
        datapath = None

    if types == "brush":
        has_brush = getattr(datapath, "brush", None)

    return has_brush


# Addon settings
def addon_settings():
    # separate function just for more convenience
    addon = bpy.context.preferences.addons[get_addon_name]
    colum_n = addon.preferences.column_set if addon else 1

    return colum_n


def error_handlers(self, op_name, error, reports="ERROR", func=False):
    if self and reports:
        self.report({'WARNING'}, reports + " (See Console for more info)")

    is_func = "Function" if func else "Operator"
    print("\n[Sculpt/Paint Brush Menus]\n{}: {}\nError: {}\n".format(is_func, op_name, error))


# Object modes:
# 'OBJECT' 'EDIT' 'SCULPT'
# 'VERTEX_PAINT' 'WEIGHT_PAINT' 'TEXTURE_PAINT'
# 'PARTICLE_EDIT' 'POSE' 'GPENCIL_EDIT'
def get_mode():
    return bpy.context.object.mode

def menuprop(item, name, value, data_path,
             icon='NONE', disable=False, disable_icon=None,
             custom_disable_exp=None, method=None, path=False):

    # disable the ui
    if disable:
        disabled = False

        # used if you need a custom expression to disable the ui
        if custom_disable_exp:
            if custom_disable_exp[0] == custom_disable_exp[1]:
                item.enabled = False
                disabled = True

        # check if the ui should be disabled for numbers
        elif isinstance(eval("bpy.context.{}".format(data_path)), float):
            if round(eval("bpy.context.{}".format(data_path)), 2) == value:
                item.enabled = False
                disabled = True

        # check if the ui should be disabled for anything else
        else:
            if eval("bpy.context.{}".format(data_path)) == value:
                item.enabled = False
                disabled = True

        # change the icon to the disable_icon if the ui has been disabled
        if disable_icon and disabled:
            icon = disable_icon

    # creates the menu item
    prop = item.operator("wm.context_set_value", text=name, icon=icon)

    # sets what the menu item changes
    if path:
        prop.value = value
        value = eval(value)

    elif type(value) == str:
        prop.value = "'{}'".format(value)

    else:
        prop.value = '{}'.format(value)

    # sets the path to what is changed
    prop.data_path = data_path