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")
|