Pose library: fix asset creation operator poll when no object active
[blender-addons.git] / space_view3d_pie_menus / pie_sculpt_menu.py
blob964530ddd9d31a21159f45586c38a5174c7f49c8
1 # SPDX-License-Identifier: GPL-2.0-or-later
3 bl_info = {
4 "name": "Hotkey: 'W'",
5 "description": "Sculpt Brush Menu",
6 "author": "pitiwazou, meta-androcto",
7 "version": (0, 1, 0),
8 "blender": (2, 80, 0),
9 "location": "W key",
10 "warning": "",
11 "doc_url": "",
12 "category": "Sculpt Pie"
15 import os
16 import bpy
17 from bpy.types import (
18 Menu,
19 Operator,
23 # Sculpt Draw
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']
31 return {'FINISHED'}
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):
40 global brush_icons
41 layout = self.layout
42 pie = layout.menu_pie()
43 pie.scale_y = 1.2
44 # 4 - LEFT
45 pie.operator("paint.brush_select",
46 text=" Crease", icon_value=brush_icons["crease"]).sculpt_tool = 'CREASE'
47 # 6 - RIGHT
48 pie.operator("paint.brush_select",
49 text=" Blob", icon_value=brush_icons["blob"]).sculpt_tool = 'BLOB'
50 # 2 - BOTTOM
51 pie.menu(PIE_MT_Sculpttwo.bl_idname, text="More Brushes")
52 # 8 - TOP
53 pie.operator("sculpt.sculptraw",
54 text=" Draw", icon_value=brush_icons["draw"])
55 # 7 - TOP - LEFT
56 pie.operator("paint.brush_select",
57 text=" Clay", icon_value=brush_icons["clay"]).sculpt_tool = 'CLAY'
58 # 9 - TOP - RIGHT
59 pie.operator("paint.brush_select",
60 text=" Clay Strips", icon_value=brush_icons["clay_strips"]).sculpt_tool = 'CLAY_STRIPS'
61 # 1 - BOTTOM - LEFT
62 pie.operator("paint.brush_select",
63 text=" Inflate/Deflate", icon_value=brush_icons["inflate"]).sculpt_tool = 'INFLATE'
64 # 3 - BOTTOM - RIGHT
65 pie.menu(PIE_MT_Sculptthree.bl_idname,
66 text=" Grab Brushes", icon_value=brush_icons["grab"])
69 # Pie Sculpt 2
70 class PIE_MT_Sculpttwo(Menu):
71 bl_idname = "PIE_MT_sculpttwo"
72 bl_label = "Pie Sculpt 2"
74 def draw(self, context):
75 global brush_icons
76 layout = self.layout
77 layout.scale_y = 1.5
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'
95 # Pie Sculpt Three
96 class PIE_MT_Sculptthree(Menu):
97 bl_idname = "PIE_MT_sculptthree"
98 bl_label = "Pie Sculpt 3"
100 def draw(self, context):
101 global brush_icons
102 layout = self.layout
103 layout.scale_y = 1.5
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'
117 brush_icons = {}
120 def create_icons():
121 global brush_icons
122 icons_directory = bpy.utils.system_resource('DATAFILES', path="icons")
123 brushes = (
124 "crease", "blob", "smooth", "draw", "clay", "clay_strips", "inflate", "grab",
125 "nudge", "thumb", "snake_hook", "rotate", "flatten", "scrape", "fill", "pinch",
126 "layer", "mask",
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
134 def release_icons():
135 global brush_icons
136 for value in brush_icons.values():
137 bpy.app.icons.release(value)
140 classes = (
141 PIE_MT_SculptPie,
142 PIE_MT_Sculpttwo,
143 PIE_MT_Sculptthree,
144 PIE_OT_SculptSculptDraw,
147 addon_keymaps = []
150 def register():
151 create_icons()
153 for cls in classes:
154 bpy.utils.register_class(cls)
156 wm = bpy.context.window_manager
157 if wm.keyconfigs.addon:
158 # Sculpt Pie Menu
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))
165 def unregister():
166 release_icons()
168 for cls in classes:
169 bpy.utils.unregister_class(cls)
171 wm = bpy.context.window_manager
172 kc = wm.keyconfigs.addon
173 if kc:
174 for km, kmi in addon_keymaps:
175 km.keymap_items.remove(kmi)
176 addon_keymaps.clear()
179 if __name__ == "__main__":
180 register()