mirror of
https://github.com/blender/blender-addons.git
synced 2025-08-20 13:22:58 +00:00
181 lines
5.8 KiB
Python
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()
|