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: ff0708e76729125d8e4fec16219f90ce66fffe8c (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
from bpy.props import *
from .Utils.core import *

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


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

    @classmethod
    def poll(self, context):
        if get_mode() in [sculpt, vertex_paint, weight_paint, texture_paint, particle_edit]:
            return True
        else:
            return False

    def init(self):
        if get_mode() == sculpt:
            settings = bpy.context.tool_settings.sculpt
            brush = settings.brush

            if bpy.app.version > (2, 71):
                stroke_method = brush.stroke_method

            else:
                stroke_method = brush.sculpt_stroke_method

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

        else:
            settings = bpy.context.tool_settings.vertex_paint
            brush = settings.brush
            stroke_method = brush.stroke_method

        return settings, brush, stroke_method

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

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

        menu.add_item().separator()

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

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

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

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

        menu.add_item().prop(settings, "input_samples", text=PIW+"Input Samples", slider=True)
        
        if stroke_method in [dots, space, airbrush]:
            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=PIW+"Radius", slider=True)
                menu.add_item().prop(brush, "smooth_stroke_factor", text=PIW+"Factor", slider=True)


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

    def init(self):
        if get_mode() == sculpt:
            brush = bpy.context.tool_settings.sculpt.brush
            path = "tool_settings.sculpt.brush.stroke_method"

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

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

        return brush, path

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

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

        # 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 get_mode() in [vertex_paint, weight_paint]:
                continue
                
            menuprop(menu.add_item(), tool.name, tool.identifier, path,
                     icon='RADIOBUT_OFF', disable=True,
                     disable_icon='RADIOBUT_ON')