Files
blender-addons/space_view3d_pie_menus/pie_sculpt_menu.py
2022-09-29 11:09:22 +10:00

181 lines
5.8 KiB
Python

# SPDX-License-Identifier: GPL-2.0-or-later
bl_info = {
"name": "Hotkey: 'W'",
"description": "Sculpt Brush Menu",
"author": "pitiwazou, meta-androcto",
"version": (0, 1, 0),
"blender": (2, 80, 0),
"location": "W key",
"warning": "",
"doc_url": "",
"category": "Sculpt Pie"
}
import os
import bpy
from bpy.types import (
Menu,
Operator,
)
# Sculpt Draw
class PIE_OT_SculptSculptDraw(Operator):
bl_idname = "sculpt.sculptraw"
bl_label = "Sculpt SculptDraw"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
context.tool_settings.sculpt.brush = bpy.data.brushes['SculptDraw']
return {'FINISHED'}
# Pie Sculp Pie Menus - W
class PIE_MT_SculptPie(Menu):
bl_idname = "PIE_MT_sculpt"
bl_label = "Pie Sculpt"
def draw(self, context):
global brush_icons
layout = self.layout
pie = layout.menu_pie()
pie.scale_y = 1.2
# 4 - LEFT
pie.operator("paint.brush_select",
text=" Crease", icon_value=brush_icons["crease"]).sculpt_tool = 'CREASE'
# 6 - RIGHT
pie.operator("paint.brush_select",
text=" Blob", icon_value=brush_icons["blob"]).sculpt_tool = 'BLOB'
# 2 - BOTTOM
pie.menu(PIE_MT_Sculpttwo.bl_idname, text="More Brushes")
# 8 - TOP
pie.operator("sculpt.sculptraw",
text=" Draw", icon_value=brush_icons["draw"])
# 7 - TOP - LEFT
pie.operator("paint.brush_select",
text=" Clay", icon_value=brush_icons["clay"]).sculpt_tool = 'CLAY'
# 9 - TOP - RIGHT
pie.operator("paint.brush_select",
text=" Clay Strips", icon_value=brush_icons["clay_strips"]).sculpt_tool = 'CLAY_STRIPS'
# 1 - BOTTOM - LEFT
pie.operator("paint.brush_select",
text=" Inflate/Deflate", icon_value=brush_icons["inflate"]).sculpt_tool = 'INFLATE'
# 3 - BOTTOM - RIGHT
pie.menu(PIE_MT_Sculptthree.bl_idname,
text=" Grab Brushes", icon_value=brush_icons["grab"])
# Pie Sculpt 2
class PIE_MT_Sculpttwo(Menu):
bl_idname = "PIE_MT_sculpttwo"
bl_label = "Pie Sculpt 2"
def draw(self, context):
global brush_icons
layout = self.layout
layout.scale_y = 1.5
layout.operator("paint.brush_select", text=' Smooth',
icon_value=brush_icons["smooth"]).sculpt_tool = 'SMOOTH'
layout.operator("paint.brush_select", text=' Flatten',
icon_value=brush_icons["flatten"]).sculpt_tool = 'FLATTEN'
layout.operator("paint.brush_select", text=' Scrape/Peaks',
icon_value=brush_icons["scrape"]).sculpt_tool = 'SCRAPE'
layout.operator("paint.brush_select", text=' Fill/Deepen',
icon_value=brush_icons["fill"]).sculpt_tool = 'FILL'
layout.operator("paint.brush_select", text=' Pinch/Magnify',
icon_value=brush_icons["pinch"]).sculpt_tool = 'PINCH'
layout.operator("paint.brush_select", text=' Layer',
icon_value=brush_icons["layer"]).sculpt_tool = 'LAYER'
layout.operator("paint.brush_select", text=' Mask',
icon_value=brush_icons["mask"]).sculpt_tool = 'MASK'
# Pie Sculpt Three
class PIE_MT_Sculptthree(Menu):
bl_idname = "PIE_MT_sculptthree"
bl_label = "Pie Sculpt 3"
def draw(self, context):
global brush_icons
layout = self.layout
layout.scale_y = 1.5
layout.operator("paint.brush_select",
text=' Grab', icon_value=brush_icons["grab"]).sculpt_tool = 'GRAB'
layout.operator("paint.brush_select",
text=' Nudge', icon_value=brush_icons["nudge"]).sculpt_tool = 'NUDGE'
layout.operator("paint.brush_select",
text=' Thumb', icon_value=brush_icons["thumb"]).sculpt_tool = 'THUMB'
layout.operator("paint.brush_select",
text=' Snakehook', icon_value=brush_icons["snake_hook"]).sculpt_tool = 'SNAKE_HOOK'
layout.operator("paint.brush_select",
text=' Rotate', icon_value=brush_icons["rotate"]).sculpt_tool = 'ROTATE'
brush_icons = {}
def create_icons():
global brush_icons
icons_directory = bpy.utils.system_resource('DATAFILES', path="icons")
brushes = (
"crease", "blob", "smooth", "draw", "clay", "clay_strips", "inflate", "grab",
"nudge", "thumb", "snake_hook", "rotate", "flatten", "scrape", "fill", "pinch",
"layer", "mask",
)
for brush in brushes:
filename = os.path.join(icons_directory, f"brush.sculpt.{brush}.dat")
icon_value = bpy.app.icons.new_triangles_from_file(filename)
brush_icons[brush] = icon_value
def release_icons():
global brush_icons
for value in brush_icons.values():
bpy.app.icons.release(value)
classes = (
PIE_MT_SculptPie,
PIE_MT_Sculpttwo,
PIE_MT_Sculptthree,
PIE_OT_SculptSculptDraw,
)
addon_keymaps = []
def register():
create_icons()
for cls in classes:
bpy.utils.register_class(cls)
wm = bpy.context.window_manager
if wm.keyconfigs.addon:
# Sculpt Pie Menu
km = wm.keyconfigs.addon.keymaps.new(name='Sculpt')
kmi = km.keymap_items.new('wm.call_menu_pie', 'W', 'PRESS')
kmi.properties.name = "PIE_MT_sculpt"
addon_keymaps.append((km, kmi))
def unregister():
release_icons()
for cls in classes:
bpy.utils.unregister_class(cls)
wm = bpy.context.window_manager
kc = wm.keyconfigs.addon
if kc:
for km, kmi in addon_keymaps:
km.keymap_items.remove(kmi)
addon_keymaps.clear()
if __name__ == "__main__":
register()