1 # SPDX-License-Identifier: GPL-2.0-or-later
5 "description": "Sculpt Brush Menu",
6 "author": "pitiwazou, meta-androcto",
12 "category": "Sculpt Pie"
17 from bpy
.types
import (
24 class PIE_OT_SculptSculptDraw(Operator
):
25 bl_idname
= "sculpt.sculptraw"
26 bl_label
= "Sculpt SculptDraw"
27 bl_options
= {'REGISTER', 'UNDO'}
29 def execute(self
, context
):
30 context
.tool_settings
.sculpt
.brush
= bpy
.data
.brushes
['SculptDraw']
34 # Pie Sculp Pie Menus - W
35 class PIE_MT_SculptPie(Menu
):
36 bl_idname
= "PIE_MT_sculpt"
37 bl_label
= "Pie Sculpt"
39 def draw(self
, context
):
42 pie
= layout
.menu_pie()
45 pie
.operator("paint.brush_select",
46 text
=" Crease", icon_value
=brush_icons
["crease"]).sculpt_tool
= 'CREASE'
48 pie
.operator("paint.brush_select",
49 text
=" Blob", icon_value
=brush_icons
["blob"]).sculpt_tool
= 'BLOB'
51 pie
.menu(PIE_MT_Sculpttwo
.bl_idname
, text
="More Brushes")
53 pie
.operator("sculpt.sculptraw",
54 text
=" Draw", icon_value
=brush_icons
["draw"])
56 pie
.operator("paint.brush_select",
57 text
=" Clay", icon_value
=brush_icons
["clay"]).sculpt_tool
= 'CLAY'
59 pie
.operator("paint.brush_select",
60 text
=" Clay Strips", icon_value
=brush_icons
["clay_strips"]).sculpt_tool
= 'CLAY_STRIPS'
62 pie
.operator("paint.brush_select",
63 text
=" Inflate/Deflate", icon_value
=brush_icons
["inflate"]).sculpt_tool
= 'INFLATE'
65 pie
.menu(PIE_MT_Sculptthree
.bl_idname
,
66 text
=" Grab Brushes", icon_value
=brush_icons
["grab"])
70 class PIE_MT_Sculpttwo(Menu
):
71 bl_idname
= "PIE_MT_sculpttwo"
72 bl_label
= "Pie Sculpt 2"
74 def draw(self
, context
):
79 layout
.operator("paint.brush_select", text
=' Smooth',
80 icon_value
=brush_icons
["smooth"]).sculpt_tool
= 'SMOOTH'
81 layout
.operator("paint.brush_select", text
=' Flatten',
82 icon_value
=brush_icons
["flatten"]).sculpt_tool
= 'FLATTEN'
83 layout
.operator("paint.brush_select", text
=' Scrape/Peaks',
84 icon_value
=brush_icons
["scrape"]).sculpt_tool
= 'SCRAPE'
85 layout
.operator("paint.brush_select", text
=' Fill/Deepen',
86 icon_value
=brush_icons
["fill"]).sculpt_tool
= 'FILL'
87 layout
.operator("paint.brush_select", text
=' Pinch/Magnify',
88 icon_value
=brush_icons
["pinch"]).sculpt_tool
= 'PINCH'
89 layout
.operator("paint.brush_select", text
=' Layer',
90 icon_value
=brush_icons
["layer"]).sculpt_tool
= 'LAYER'
91 layout
.operator("paint.brush_select", text
=' Mask',
92 icon_value
=brush_icons
["mask"]).sculpt_tool
= 'MASK'
96 class PIE_MT_Sculptthree(Menu
):
97 bl_idname
= "PIE_MT_sculptthree"
98 bl_label
= "Pie Sculpt 3"
100 def draw(self
, context
):
105 layout
.operator("paint.brush_select",
106 text
=' Grab', icon_value
=brush_icons
["grab"]).sculpt_tool
= 'GRAB'
107 layout
.operator("paint.brush_select",
108 text
=' Nudge', icon_value
=brush_icons
["nudge"]).sculpt_tool
= 'NUDGE'
109 layout
.operator("paint.brush_select",
110 text
=' Thumb', icon_value
=brush_icons
["thumb"]).sculpt_tool
= 'THUMB'
111 layout
.operator("paint.brush_select",
112 text
=' Snakehook', icon_value
=brush_icons
["snake_hook"]).sculpt_tool
= 'SNAKE_HOOK'
113 layout
.operator("paint.brush_select",
114 text
=' Rotate', icon_value
=brush_icons
["rotate"]).sculpt_tool
= 'ROTATE'
122 icons_directory
= bpy
.utils
.system_resource('DATAFILES', path
="icons")
124 "crease", "blob", "smooth", "draw", "clay", "clay_strips", "inflate", "grab",
125 "nudge", "thumb", "snake_hook", "rotate", "flatten", "scrape", "fill", "pinch",
128 for brush
in brushes
:
129 filename
= os
.path
.join(icons_directory
, f
"brush.sculpt.{brush}.dat")
130 icon_value
= bpy
.app
.icons
.new_triangles_from_file(filename
)
131 brush_icons
[brush
] = icon_value
136 for value
in brush_icons
.values():
137 bpy
.app
.icons
.release(value
)
144 PIE_OT_SculptSculptDraw
,
154 bpy
.utils
.register_class(cls
)
156 wm
= bpy
.context
.window_manager
157 if wm
.keyconfigs
.addon
:
159 km
= wm
.keyconfigs
.addon
.keymaps
.new(name
='Sculpt')
160 kmi
= km
.keymap_items
.new('wm.call_menu_pie', 'W', 'PRESS')
161 kmi
.properties
.name
= "PIE_MT_sculpt"
162 addon_keymaps
.append((km
, kmi
))
169 bpy
.utils
.unregister_class(cls
)
171 wm
= bpy
.context
.window_manager
172 kc
= wm
.keyconfigs
.addon
174 for km
, kmi
in addon_keymaps
:
175 km
.keymap_items
.remove(kmi
)
176 addon_keymaps
.clear()
179 if __name__
== "__main__":