Import images: add file handler
[blender-addons.git] / space_view3d_pie_menus / pie_sculpt_menu.py
blobcd57b7be9f2b3e2422257bc97ef08235037bdc47
1 # SPDX-FileCopyrightText: 2016-2022 Blender Foundation
3 # SPDX-License-Identifier: GPL-2.0-or-later
5 bl_info = {
6 "name": "Hotkey: 'W'",
7 "description": "Sculpt Brush Menu",
8 "author": "pitiwazou, meta-androcto",
9 "version": (0, 1, 0),
10 "blender": (2, 80, 0),
11 "location": "W key",
12 "warning": "",
13 "doc_url": "",
14 "category": "Sculpt Pie"
17 import os
18 import bpy
19 from bpy.types import (
20 Menu,
21 Operator,
25 # Sculpt Draw
26 class PIE_OT_SculptSculptDraw(Operator):
27 bl_idname = "sculpt.sculptraw"
28 bl_label = "Sculpt SculptDraw"
29 bl_options = {'REGISTER', 'UNDO'}
31 def execute(self, context):
32 context.tool_settings.sculpt.brush = bpy.data.brushes['SculptDraw']
33 return {'FINISHED'}
36 # Pie Sculp Pie Menus - W
37 class PIE_MT_SculptPie(Menu):
38 bl_idname = "PIE_MT_sculpt"
39 bl_label = "Pie Sculpt"
41 def draw(self, context):
42 global brush_icons
43 layout = self.layout
44 pie = layout.menu_pie()
45 pie.scale_y = 1.2
46 # 4 - LEFT
47 pie.operator("paint.brush_select",
48 text=" Crease", icon_value=brush_icons["crease"]).sculpt_tool = 'CREASE'
49 # 6 - RIGHT
50 pie.operator("paint.brush_select",
51 text=" Blob", icon_value=brush_icons["blob"]).sculpt_tool = 'BLOB'
52 # 2 - BOTTOM
53 pie.menu(PIE_MT_Sculpttwo.bl_idname, text="More Brushes")
54 # 8 - TOP
55 pie.operator("sculpt.sculptraw",
56 text=" Draw", icon_value=brush_icons["draw"])
57 # 7 - TOP - LEFT
58 pie.operator("paint.brush_select",
59 text=" Clay", icon_value=brush_icons["clay"]).sculpt_tool = 'CLAY'
60 # 9 - TOP - RIGHT
61 pie.operator("paint.brush_select",
62 text=" Clay Strips", icon_value=brush_icons["clay_strips"]).sculpt_tool = 'CLAY_STRIPS'
63 # 1 - BOTTOM - LEFT
64 pie.operator("paint.brush_select",
65 text=" Inflate/Deflate", icon_value=brush_icons["inflate"]).sculpt_tool = 'INFLATE'
66 # 3 - BOTTOM - RIGHT
67 pie.menu(PIE_MT_Sculptthree.bl_idname,
68 text=" Grab Brushes", icon_value=brush_icons["grab"])
71 # Pie Sculpt 2
72 class PIE_MT_Sculpttwo(Menu):
73 bl_idname = "PIE_MT_sculpttwo"
74 bl_label = "Pie Sculpt 2"
76 def draw(self, context):
77 global brush_icons
78 layout = self.layout
79 layout.scale_y = 1.5
81 layout.operator("paint.brush_select", text=' Smooth',
82 icon_value=brush_icons["smooth"]).sculpt_tool = 'SMOOTH'
83 layout.operator("paint.brush_select", text=' Flatten',
84 icon_value=brush_icons["flatten"]).sculpt_tool = 'FLATTEN'
85 layout.operator("paint.brush_select", text=' Scrape/Peaks',
86 icon_value=brush_icons["scrape"]).sculpt_tool = 'SCRAPE'
87 layout.operator("paint.brush_select", text=' Fill/Deepen',
88 icon_value=brush_icons["fill"]).sculpt_tool = 'FILL'
89 layout.operator("paint.brush_select", text=' Pinch/Magnify',
90 icon_value=brush_icons["pinch"]).sculpt_tool = 'PINCH'
91 layout.operator("paint.brush_select", text=' Layer',
92 icon_value=brush_icons["layer"]).sculpt_tool = 'LAYER'
93 layout.operator("paint.brush_select", text=' Mask',
94 icon_value=brush_icons["mask"]).sculpt_tool = 'MASK'
97 # Pie Sculpt Three
98 class PIE_MT_Sculptthree(Menu):
99 bl_idname = "PIE_MT_sculptthree"
100 bl_label = "Pie Sculpt 3"
102 def draw(self, context):
103 global brush_icons
104 layout = self.layout
105 layout.scale_y = 1.5
107 layout.operator("paint.brush_select",
108 text=' Grab', icon_value=brush_icons["grab"]).sculpt_tool = 'GRAB'
109 layout.operator("paint.brush_select",
110 text=' Nudge', icon_value=brush_icons["nudge"]).sculpt_tool = 'NUDGE'
111 layout.operator("paint.brush_select",
112 text=' Thumb', icon_value=brush_icons["thumb"]).sculpt_tool = 'THUMB'
113 layout.operator("paint.brush_select",
114 text=' Snakehook', icon_value=brush_icons["snake_hook"]).sculpt_tool = 'SNAKE_HOOK'
115 layout.operator("paint.brush_select",
116 text=' Rotate', icon_value=brush_icons["rotate"]).sculpt_tool = 'ROTATE'
119 brush_icons = {}
122 def create_icons():
123 global brush_icons
124 icons_directory = bpy.utils.system_resource('DATAFILES', path="icons")
125 brushes = (
126 "crease", "blob", "smooth", "draw", "clay", "clay_strips", "inflate", "grab",
127 "nudge", "thumb", "snake_hook", "rotate", "flatten", "scrape", "fill", "pinch",
128 "layer", "mask",
130 for brush in brushes:
131 filename = os.path.join(icons_directory, f"brush.sculpt.{brush}.dat")
132 icon_value = bpy.app.icons.new_triangles_from_file(filename)
133 brush_icons[brush] = icon_value
136 def release_icons():
137 global brush_icons
138 for value in brush_icons.values():
139 bpy.app.icons.release(value)
142 classes = (
143 PIE_MT_SculptPie,
144 PIE_MT_Sculpttwo,
145 PIE_MT_Sculptthree,
146 PIE_OT_SculptSculptDraw,
149 addon_keymaps = []
152 def register():
153 create_icons()
155 for cls in classes:
156 bpy.utils.register_class(cls)
158 wm = bpy.context.window_manager
159 if wm.keyconfigs.addon:
160 # Sculpt Pie Menu
161 km = wm.keyconfigs.addon.keymaps.new(name='Sculpt')
162 kmi = km.keymap_items.new('wm.call_menu_pie', 'W', 'PRESS')
163 kmi.properties.name = "PIE_MT_sculpt"
164 addon_keymaps.append((km, kmi))
167 def unregister():
168 release_icons()
170 for cls in classes:
171 bpy.utils.unregister_class(cls)
173 wm = bpy.context.window_manager
174 kc = wm.keyconfigs.addon
175 if kc:
176 for km, kmi in addon_keymaps:
177 km.keymap_items.remove(kmi)
178 addon_keymaps.clear()
181 if __name__ == "__main__":
182 register()