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

stroke_menu.py « space_view3d_brush_menus - git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: c2163999a20f52e55ed5bd22657001618c022e36 (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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# gpl author: Ryan Inch (Imaginer)

import bpy
from bpy.types import Menu
from . import utils_core

airbrush = 'AIRBRUSH'
anchored = 'ANCHORED'
space = 'SPACE'
drag_dot = 'DRAG_DOT'
dots = 'DOTS'
line = 'LINE'
curve = 'CURVE'


class StrokeOptionsMenu(Menu):
    bl_label = "Stroke Options"
    bl_idname = "VIEW3D_MT_sv3_stroke_options"

    @classmethod
    def poll(self, context):
        return utils_core.get_mode() in (
                    utils_core.sculpt, utils_core.vertex_paint,
                    utils_core.weight_paint, utils_core.texture_paint,
                    utils_core.particle_edit
                    )

    def init(self):
        has_brush = utils_core.get_brush_link(bpy.context, types="brush")
        if utils_core.get_mode() == utils_core.sculpt:
            settings = bpy.context.tool_settings.sculpt

        elif utils_core.get_mode() == utils_core.texture_paint:
            settings = bpy.context.tool_settings.image_paint

        else:
            settings = bpy.context.tool_settings.vertex_paint

        stroke_method = has_brush.stroke_method if has_brush else None

        return settings, has_brush, stroke_method

    def draw(self, context):
        settings, brush, stroke_method = self.init()
        menu = utils_core.Menu(self)

        menu.add_item().menu(StrokeMethodMenu.bl_idname)
        menu.add_item().separator()

        if stroke_method:
            if stroke_method == space and brush:
                menu.add_item().prop(brush, "spacing",
                                     text=utils_core.PIW + "Spacing", slider=True)

            elif stroke_method == airbrush and brush:
                menu.add_item().prop(brush, "rate",
                                    text=utils_core.PIW + "Rate", slider=True)

            elif stroke_method == anchored and brush:
                menu.add_item().prop(brush, "use_edge_to_edge")

            else:
                pass

            if utils_core.get_mode() == utils_core.sculpt and stroke_method in (drag_dot, anchored):
                pass
            else:
                if brush:
                    menu.add_item().prop(brush, "jitter",
                                        text=utils_core.PIW + "Jitter", slider=True)

            menu.add_item().prop(settings, "input_samples",
                                text=utils_core.PIW + "Input Samples", slider=True)

            if stroke_method in [dots, space, airbrush] and brush:
                menu.add_item().separator()

                menu.add_item().prop(brush, "use_smooth_stroke", toggle=True)

                if brush.use_smooth_stroke:
                    menu.add_item().prop(brush, "smooth_stroke_radius",
                                        text=utils_core.PIW + "Radius", slider=True)
                    menu.add_item().prop(brush, "smooth_stroke_factor",
                                        text=utils_core.PIW + "Factor", slider=True)
        else:
            menu.add_item().label("No Stroke Options available", icon="INFO")


class StrokeMethodMenu(Menu):
    bl_label = "Stroke Method"
    bl_idname = "VIEW3D_MT_sv3_stroke_method"

    def init(self):
        has_brush = utils_core.get_brush_link(bpy.context, types="brush")
        if utils_core.get_mode() == utils_core.sculpt:
            path = "tool_settings.sculpt.brush.stroke_method"

        elif utils_core.get_mode() == utils_core.texture_paint:
            path = "tool_settings.image_paint.brush.stroke_method"

        else:
            path = "tool_settings.vertex_paint.brush.stroke_method"

        return has_brush, path

    def draw(self, context):
        brush, path = self.init()
        menu = utils_core.Menu(self)

        menu.add_item().label(text="Stroke Method")
        menu.add_item().separator()

        if brush:
            # add the menu items dynamicaly based on values in enum property
            for tool in brush.bl_rna.properties['stroke_method'].enum_items:
                if tool.identifier in [anchored, drag_dot] and \
                   utils_core.get_mode() in [utils_core.vertex_paint,
                                             utils_core.weight_paint]:
                    continue

                utils_core.menuprop(
                        menu.add_item(), tool.name, tool.identifier, path,
                        icon='RADIOBUT_OFF', disable=True,
                        disable_icon='RADIOBUT_ON'
                        )
        else:
            menu.add_item().label("No Stroke Method available", icon="INFO")