From 12b09190d8c927c07faba63220d41e91f388d145 Mon Sep 17 00:00:00 2001 From: Sietse Brouwer Date: Fri, 1 Nov 2024 16:56:17 +0100 Subject: [PATCH] Support for Blender 4.3 (with Brush Asset Shelf) --- __init__.py | 20 +-- __init__extension.py | 71 ++++++++ __init__legacy.py | 83 +++++++++ blender_manifest.toml | 2 +- docs/images/link_brush_to_tool_1.jpg | Bin 0 -> 85750 bytes docs/images/link_brush_to_tool_2.jpg | Bin 0 -> 72921 bytes preferences.py | 231 +++++++++++++++++++++++-- readme.md | 33 +++- tool_data.py | 246 +++++++++++++++++++++++---- tool_wheel_draw.py | 64 ++++--- tool_wheel_operator.py | 110 ++++++++---- 11 files changed, 746 insertions(+), 114 deletions(-) create mode 100644 __init__extension.py create mode 100644 __init__legacy.py create mode 100644 docs/images/link_brush_to_tool_1.jpg create mode 100644 docs/images/link_brush_to_tool_2.jpg diff --git a/__init__.py b/__init__.py index c4fea96..8b6fdf7 100644 --- a/__init__.py +++ b/__init__.py @@ -1,15 +1,3 @@ -bl_info = { - "name": "GP Tool Wheel", - "author": "Sietse Brouwer", - "version": (1, 0, 5), - "blender": (3, 0, 0), - "description": "Extended pie menu for selecting Grease Pencil tools quickly.", - "doc_url": "https://github.com/SietseB/GP-Tool-Wheel", - "tracker_url": "https://github.com/SietseB/GP-Tool-Wheel/issues", - "category": "3D View" -} - - if 'bpy' in locals(): import importlib importlib.reload(preferences) @@ -36,6 +24,9 @@ def addon_init(): # Assign hotkey to tool wheel operator preferences.assign_hotkey_to_tool_wheel() + # Add brush asset context menu item + preferences.add_brush_asset_context_menu_item() + # Load tool icons tool_data.tool_data.get_tool_icon_textures() @@ -50,6 +41,7 @@ def register(): bpy.utils.register_class(preferences.GPTOOLWHEEL_OT_AssignHotkey) bpy.utils.register_class(preferences.GPTOOLWHEEL_OT_SavePrefDefinition) bpy.utils.register_class(preferences.GPTOOLWHEEL_OT_LoadPrefDefinition) + bpy.utils.register_class(preferences.GPENCIL_OT_link_brush_to_gp_tool_wheel) bpy.utils.register_class(tool_wheel_operator.GPENCIL_OT_tool_wheel) # Delayed inits @@ -65,11 +57,15 @@ def unregister(): bpy.utils.unregister_class(preferences.GPTOOLWHEEL_OT_AssignHotkey) bpy.utils.unregister_class(preferences.GPTOOLWHEEL_OT_SavePrefDefinition) bpy.utils.unregister_class(preferences.GPTOOLWHEEL_OT_LoadPrefDefinition) + bpy.utils.unregister_class(preferences.GPENCIL_OT_link_brush_to_gp_tool_wheel) bpy.utils.unregister_class(tool_wheel_operator.GPENCIL_OT_tool_wheel) # Remove hotkey preferences.remove_hotkey_of_tool_wheel() + # Remove brush asset context menu item + preferences.remove_brush_asset_context_menu_item() + if __name__ == "__main__": register() diff --git a/__init__extension.py b/__init__extension.py new file mode 100644 index 0000000..8b6fdf7 --- /dev/null +++ b/__init__extension.py @@ -0,0 +1,71 @@ +if 'bpy' in locals(): + import importlib + importlib.reload(preferences) + importlib.reload(tool_wheel_operator) + importlib.reload(tool_data) +else: + from . import preferences + from . import tool_wheel_operator + from . import tool_data + +import bpy + + +# Inits +def addon_init(): + # Blender ready to assign hotkey? + if bpy.context.window_manager.keyconfigs.active is None: + # Keep interval timer alive + return 0.2 + + # Set default preferences (when needed) + preferences.set_default_preferences() + + # Assign hotkey to tool wheel operator + preferences.assign_hotkey_to_tool_wheel() + + # Add brush asset context menu item + preferences.add_brush_asset_context_menu_item() + + # Load tool icons + tool_data.tool_data.get_tool_icon_textures() + + +# Addon registration +def register(): + bpy.utils.register_class(preferences.GPToolWheel_PG_tool) + bpy.utils.register_class(preferences.GPToolWheel_PG_mode_order) + bpy.utils.register_class(preferences.GPToolWheelPreferences) + bpy.utils.register_class(preferences.GPTOOLWHEEL_UL_ModeList) + bpy.utils.register_class(preferences.GPTOOLWHEEL_OT_MoveItem) + bpy.utils.register_class(preferences.GPTOOLWHEEL_OT_AssignHotkey) + bpy.utils.register_class(preferences.GPTOOLWHEEL_OT_SavePrefDefinition) + bpy.utils.register_class(preferences.GPTOOLWHEEL_OT_LoadPrefDefinition) + bpy.utils.register_class(preferences.GPENCIL_OT_link_brush_to_gp_tool_wheel) + bpy.utils.register_class(tool_wheel_operator.GPENCIL_OT_tool_wheel) + + # Delayed inits + bpy.app.timers.register(addon_init, first_interval=0.2) + + +def unregister(): + bpy.utils.unregister_class(preferences.GPToolWheel_PG_tool) + bpy.utils.unregister_class(preferences.GPToolWheel_PG_mode_order) + bpy.utils.unregister_class(preferences.GPToolWheelPreferences) + bpy.utils.unregister_class(preferences.GPTOOLWHEEL_UL_ModeList) + bpy.utils.unregister_class(preferences.GPTOOLWHEEL_OT_MoveItem) + bpy.utils.unregister_class(preferences.GPTOOLWHEEL_OT_AssignHotkey) + bpy.utils.unregister_class(preferences.GPTOOLWHEEL_OT_SavePrefDefinition) + bpy.utils.unregister_class(preferences.GPTOOLWHEEL_OT_LoadPrefDefinition) + bpy.utils.unregister_class(preferences.GPENCIL_OT_link_brush_to_gp_tool_wheel) + bpy.utils.unregister_class(tool_wheel_operator.GPENCIL_OT_tool_wheel) + + # Remove hotkey + preferences.remove_hotkey_of_tool_wheel() + + # Remove brush asset context menu item + preferences.remove_brush_asset_context_menu_item() + + +if __name__ == "__main__": + register() diff --git a/__init__legacy.py b/__init__legacy.py new file mode 100644 index 0000000..ecdd2e9 --- /dev/null +++ b/__init__legacy.py @@ -0,0 +1,83 @@ +bl_info = { + "name": "GP Tool Wheel", + "author": "Sietse Brouwer", + "version": (1, 0, 6), + "blender": (3, 0, 0), + "description": "Extended pie menu for selecting Grease Pencil tools quickly.", + "doc_url": "https://github.com/SietseB/GP-Tool-Wheel", + "tracker_url": "https://github.com/SietseB/GP-Tool-Wheel/issues", + "category": "3D View" +} + + +if 'bpy' in locals(): + import importlib + importlib.reload(preferences) + importlib.reload(tool_wheel_operator) + importlib.reload(tool_data) +else: + from . import preferences + from . import tool_wheel_operator + from . import tool_data + +import bpy + + +# Inits +def addon_init(): + # Blender ready to assign hotkey? + if bpy.context.window_manager.keyconfigs.active is None: + # Keep interval timer alive + return 0.2 + + # Set default preferences (when needed) + preferences.set_default_preferences() + + # Assign hotkey to tool wheel operator + preferences.assign_hotkey_to_tool_wheel() + + # Add brush asset context menu item + preferences.add_brush_asset_context_menu_item() + + # Load tool icons + tool_data.tool_data.get_tool_icon_textures() + + +# Addon registration +def register(): + bpy.utils.register_class(preferences.GPToolWheel_PG_tool) + bpy.utils.register_class(preferences.GPToolWheel_PG_mode_order) + bpy.utils.register_class(preferences.GPToolWheelPreferences) + bpy.utils.register_class(preferences.GPTOOLWHEEL_UL_ModeList) + bpy.utils.register_class(preferences.GPTOOLWHEEL_OT_MoveItem) + bpy.utils.register_class(preferences.GPTOOLWHEEL_OT_AssignHotkey) + bpy.utils.register_class(preferences.GPTOOLWHEEL_OT_SavePrefDefinition) + bpy.utils.register_class(preferences.GPTOOLWHEEL_OT_LoadPrefDefinition) + bpy.utils.register_class(preferences.GPENCIL_OT_link_brush_to_gp_tool_wheel) + bpy.utils.register_class(tool_wheel_operator.GPENCIL_OT_tool_wheel) + + # Delayed inits + bpy.app.timers.register(addon_init, first_interval=0.2) + + +def unregister(): + bpy.utils.unregister_class(preferences.GPToolWheel_PG_tool) + bpy.utils.unregister_class(preferences.GPToolWheel_PG_mode_order) + bpy.utils.unregister_class(preferences.GPToolWheelPreferences) + bpy.utils.unregister_class(preferences.GPTOOLWHEEL_UL_ModeList) + bpy.utils.unregister_class(preferences.GPTOOLWHEEL_OT_MoveItem) + bpy.utils.unregister_class(preferences.GPTOOLWHEEL_OT_AssignHotkey) + bpy.utils.unregister_class(preferences.GPTOOLWHEEL_OT_SavePrefDefinition) + bpy.utils.unregister_class(preferences.GPTOOLWHEEL_OT_LoadPrefDefinition) + bpy.utils.unregister_class(preferences.GPENCIL_OT_link_brush_to_gp_tool_wheel) + bpy.utils.unregister_class(tool_wheel_operator.GPENCIL_OT_tool_wheel) + + # Remove hotkey + preferences.remove_hotkey_of_tool_wheel() + + # Remove brush asset context menu item + preferences.remove_brush_asset_context_menu_item() + + +if __name__ == "__main__": + register() diff --git a/blender_manifest.toml b/blender_manifest.toml index e45e6bc..c43b3f0 100644 --- a/blender_manifest.toml +++ b/blender_manifest.toml @@ -3,7 +3,7 @@ schema_version = "1.0.0" # Example of manifest file for a Blender extension # Change the values according to your extension id = "grease_pencil_tool_wheel" -version = "1.0.5" +version = "1.0.6" name = "GP Tool Wheel" tagline = "Extended pie menu for selecting Grease Pencil tools quickly" maintainer = "Sietse Brouwer " diff --git a/docs/images/link_brush_to_tool_1.jpg b/docs/images/link_brush_to_tool_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47880f06b874b6485a4246741ca8e5c7d9f09466 GIT binary patch literal 85750 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 (4, 3, 0)) + + # Save preference definition + box = layout.box() + col = box.column(align=True) + row = col.row() + row.operator('gp_tool_wheel.save_pref_definition') + row.operator('gp_tool_wheel.load_pref_definition') + col.separator(factor=1.5) + col.label(text='You can save and load the GP Tool Wheel preferences for backup purposes or', icon='FILE_TICK') + col.label(text='for distribution to other Blender installations.') # Keyboard shortcut + layout.separator(factor=0) box = layout.box() row = box.row() row.label(text='Keyboard shortcut for GP Tool Wheel:') @@ -337,18 +362,51 @@ def draw(self, _): grid = box.grid_flow(row_major=True, columns=3, even_columns=True) col = grid.column() col.label(text=td.tools_per_mode[mode]['name']) - for tool in td.tools_per_mode[mode]['tools']: - col.prop(tool['pref'], 'enabled', text=tool['name']) + for index, tool in enumerate(td.tools_per_mode[mode]['tools']): + pref = get_tool_preference(mode, index) + name = tool['as_asset']['name'] if use_brush_assets and 'as_asset' in tool and 'name' in tool['as_asset'] \ + else tool['name'] + col.prop(pref, 'enabled', text=name) + + # Brush assets + if bpy.app.version < (4, 3, 0): + return - # Save preference definition - layout.separator(factor=0) box = layout.box() + box.label(text='Brush Assets') col = box.column(align=True) - row = col.row() - row.operator('gp_tool_wheel.save_pref_definition') - row.operator('gp_tool_wheel.load_pref_definition') - col.separator(factor=1.5) - col.label(text='You can save and load the GP Tool Wheel preferences for distribution to other Blender installations.') + col.separator(factor=1) + col.label(text='Tip: instead of making manual changes here, you can right-click on a brush in', icon='BRUSHES_ALL') + col.label(text="the brush asset shelf and choose 'Set as Tool in GP Tool Wheel...'.") + + col = box.column() + col.separator(factor=1.0) + col.label(text='Draw Mode') + sub = col.column() + + tool = td.tools_per_mode['draw']['tools'][td.tint_tool_index] + row = sub.row().split(factor=0.25) + row.label(text='') + row.column().label(text=tool['name']) + pref = get_tool_preference('draw', td.tint_tool_index) + sub.prop(pref, 'asset_lib_type', text='Library Type') + sub.prop(pref, 'asset_lib_id', text='Library') + sub.prop(pref, 'asset_id', text='Asset') + + col = box.column() + col.separator(factor=4) + col.label(text='Sculpt Mode') + sub = col.column() + + for index, tool in enumerate(td.tools_per_mode['sculpt']['tools']): + pref = get_tool_preference('sculpt', index) + row = sub.row().split(factor=0.25) + row.label(text='') + row.column().label(text=tool['name']) + sub.prop(pref, 'asset_lib_type', text='Library Type') + sub.prop(pref, 'asset_lib_id', text='Library') + sub.prop(pref, 'asset_id', text='Asset') + sub.separator(factor=1.0) # When not set already, set default tool preferences @@ -366,6 +424,17 @@ def set_default_preferences(): pref.tool_index = i pref.enabled = tool['default'] + # When brush asset data is not set, add it + for mode in td.modes: + for i, tool in enumerate(td.tools_per_mode[mode]['tools']): + if 'as_asset' in tool and tool['as_asset']['tool'] == '': + pref = get_tool_preference(mode, i) + asset = tool['as_asset'] + if pref.asset_lib_type == '': + pref.asset_lib_type = asset['asset_library_type'] + pref.asset_lib_id = asset['asset_library_identifier'] + pref.asset_id = asset['relative_asset_identifier'] + # When there is no mode order, add it mode_order = addon_prefs.mode_order if not mode_order: @@ -385,6 +454,15 @@ def set_default_preferences(): addon_prefs.kmi_oskey = False +# Get tool preference (by mode and tool index) +def get_tool_preference(mode, index): + prefs = bpy.context.preferences.addons[__package__].preferences + for pref in prefs.tools: + if pref.mode == mode and pref.tool_index == index: + return pref + return None + + # Get the tool preferences def get_tool_preferences(): # Get tool preferences @@ -401,6 +479,12 @@ def get_tool_preferences(): tool['enabled'] = pref.enabled tool['pref'] = pref + if 'as_asset' in tool and tool['as_asset']['tool'] == '' and pref.asset_id: + asset = tool['as_asset'] + asset['asset_library_type'] = pref.asset_lib_type + asset['asset_library_identifier'] = pref.asset_lib_id + asset['relative_asset_identifier'] = pref.asset_id + # Check for new tools, not yet set in list for mode in td.modes: for i, tool in enumerate(td.tools_per_mode[mode]['tools']): @@ -412,12 +496,135 @@ def get_tool_preferences(): tool['enabled'] = pref.enabled tool['pref'] = pref + if 'as_asset' in tool and tool['as_asset']['tool'] == '' and pref.asset_id: + asset = tool['as_asset'] + asset['asset_library_type'] = pref.asset_lib_type + asset['asset_library_identifier'] = pref.asset_lib_id + asset['relative_asset_identifier'] = pref.asset_id + # Get mode order td.mode_order = [] for pref in prefs.mode_order: td.mode_order.append(pref.order) +class GPENCIL_OT_link_brush_to_gp_tool_wheel(Operator): + '''Link current brush asset to a tool in the GP Tool Wheel''' + bl_idname = "gpencil.link_brush_to_gp_tool_wheel" + bl_label = "Set Brush in GP Tool Wheel" + bl_options = {'REGISTER', 'UNDO'} + + brush_items_draw: EnumProperty(items=[('0', 'Tint', '')], name='Tool') + brush_items_sculpt: EnumProperty(items=[ + ('0', 'Smooth', ''), + ('1', 'Thickness', ''), + ('2', 'Strength', ''), + ('3', 'Randomize', ''), + ('4', 'Grab', ''), + ('5', 'Pull', ''), + ('6', 'Twist', ''), + ('7', 'Pinch', ''), + ('8', 'Clone', ''), + ], name='Tool') + + sculpt_tools = ['smooth', 'thickness', 'strength', 'randomize', 'grab', 'pull', 'twist', 'pinch', 'clone'] + brush_name = '' + + @classmethod + def poll(cls, context): + if context.mode not in ['PAINT_GREASE_PENCIL', 'SCULPT_GREASE_PENCIL']: + return False + + brush_asset = None + if context.mode == 'PAINT_GREASE_PENCIL': + brush_asset = context.tool_settings.gpencil_paint.brush_asset_reference + elif context.mode == 'SCULPT_GREASE_PENCIL': + brush_asset = context.tool_settings.gpencil_sculpt_paint.brush_asset_reference + return brush_asset is not None + + def invoke(self, context, _): + # Get brush asset name (part after last / in relative_asset_identifier) + brush_asset = None + if context.mode == 'PAINT_GREASE_PENCIL': + brush_asset = context.tool_settings.gpencil_paint.brush_asset_reference + elif context.mode == 'SCULPT_GREASE_PENCIL': + brush_asset = context.tool_settings.gpencil_sculpt_paint.brush_asset_reference + brush_name = brush_asset.relative_asset_identifier + brush_name = brush_name[brush_name.rfind('/') + 1:] + self.brush_name = brush_name + + # And make a tool guess, based on the brush name + if context.mode == 'SCULPT_GREASE_PENCIL': + brush_name_parts = brush_name.lower().split() + for part in brush_name_parts: + if part and part in self.sculpt_tools: + tool_index = self.sculpt_tools.index(part) + self.brush_items_sculpt = str(tool_index) + break + + # Invoke dialog + return context.window_manager.invoke_props_dialog(self, width=240) + + def draw(self, context): + layout = self.layout + layout.label(text=f"Use brush '{self.brush_name}' for tool:") + if context.mode == 'PAINT_GREASE_PENCIL': + layout.props_enum(self, 'brush_items_draw') + if context.mode == 'SCULPT_GREASE_PENCIL': + layout.props_enum(self, 'brush_items_sculpt') + layout.label(text="in the GP Tool Wheel.") + + def execute(self, context): + wheel_tool_asset = None + mode = '' + index = 0 + if context.mode == 'PAINT_GREASE_PENCIL': + brush_asset = context.tool_settings.gpencil_paint.brush_asset_reference + wheel_tool_asset = td.tools_per_mode['draw']['tools'][td.tint_tool_index]['as_asset'] + mode = 'draw' + index = td.tint_tool_index + if context.mode == 'SCULPT_GREASE_PENCIL': + brush_asset = context.tool_settings.gpencil_sculpt_paint.brush_asset_reference + wheel_tool_asset = td.tools_per_mode['sculpt']['tools'][int(self.brush_items_sculpt)]['as_asset'] + mode = 'sculpt' + index = int(self.brush_items_sculpt) + + if wheel_tool_asset is not None: + wheel_tool_asset['asset_library_type'] = brush_asset.asset_library_type + wheel_tool_asset['asset_library_identifier'] = brush_asset.asset_library_identifier + wheel_tool_asset['relative_asset_identifier'] = brush_asset.relative_asset_identifier + + # Update tool in addon preferences + pref = get_tool_preference(mode, index) + pref.asset_lib_type = brush_asset.asset_library_type + pref.asset_lib_id = brush_asset.asset_library_identifier + pref.asset_id = brush_asset.relative_asset_identifier + context.preferences.is_dirty = True + + return {'FINISHED'} + + +def brush_asset_context_menu_draw(self, _): + layout = self.layout + layout.separator() + layout.operator("gpencil.link_brush_to_gp_tool_wheel", text="Set as Tool in GP Tool Wheel...") + + +# Add operator to brush asset context menu for linking a brush asset to a tool in the tool wheel +def add_brush_asset_context_menu_item(): + if bpy.app.version >= (4, 3, 0): + if hasattr(bpy.types.VIEW3D_MT_brush_context_menu.draw, '_draw_funcs'): + if brush_asset_context_menu_draw in bpy.types.VIEW3D_MT_brush_context_menu.draw._draw_funcs: + return + bpy.types.VIEW3D_MT_brush_context_menu.append(brush_asset_context_menu_draw) + + +# Remove operator from brush asset context menu +def remove_brush_asset_context_menu_item(): + if bpy.app.version >= (4, 3, 0): + bpy.types.VIEW3D_MT_brush_context_menu.remove(brush_asset_context_menu_draw) + + # Get show hints preference settings def get_show_hints(): return bpy.context.preferences.addons[__package__].preferences.show_hints diff --git a/readme.md b/readme.md index ddbf671..d5d3323 100644 --- a/readme.md +++ b/readme.md @@ -23,11 +23,12 @@ You can customize your wheel in the add-on preferences. Up to Blender 4.1, go to `Edit` > `Preferences...` > `Add-ons` and look for `3D View: GP Tool Wheel`. -For Blender 4.2 and higher, go to `Edit` > `Preferences...` > `Extensions` and look for `GP Tool Wheel`. +For Blender 4.2 and higher, go to `Edit` > `Preferences...` > `Add-ons` and look for `GP Tool Wheel`. Click on the arrow on the left. -Here you can compose your ideal, tailor made wheel. Perhaps you want to change it in a kind of 'Quick favorites' menu, with only the modes and tools you often use. Or assign Tab as shortcut, replacing the default pie menu. +Here you can compose your ideal, tailor made wheel. Perhaps you want to change it in a kind of 'Quick favorites' menu, with only the modes and tools you often use. +Or assign Tab as shortcut, replacing the default pie menu. > **Circle of GP life:** defining the order of modes @@ -44,10 +45,31 @@ Here you can compose your ideal, tailor made wheel. Perhaps you want to change i > ![Save and load preferences to/from definition file](docs/images/gp_tool_wheel_preferences_3.png) +## Link brush assets (new in Blender 4.3) + +Blender 4.3 ships with the new Brush Asset Shelf, with default brushes and the option to define custom brushes yourself. +For Grease Pencil, the Brush Shelf is active in Draw and Sculpt Mode. +By default, GP Tool Wheel uses the _Essential_ brush assets that ship with Blender. + +But you can assign a custom brush to a tool in the wheel. Right-click on the brush and choose _Set as Tool in GP Tool Wheel..._ + +![Brush asset context menu with link brush to GP Tool Wheel](docs/images/link_brush_to_tool_1.jpg) + +In the dialog that follows, select the tool in the GP Tool Wheel and click OK. + +![Link brush to a tool in the GP Tool Wheel](docs/images/link_brush_to_tool_2.jpg) + +Now this brush will be activated when you click on it in the wheel. + + ## Installation GP Tool Wheel is suited for Blender 3.0 and higher. -Up to Blender 4.1, installation of the add-on is done in the usual Blender way: +For Blender 4.2 and higher, the add-on is [available as an extension](https://extensions.blender.org/add-ons/grease-pencil-tool-wheel/) at the Blender Extension platform. +Click on the big blue 'Get Add-on' button and follow the instructions. + + +Up to Blender 4.1 (or when you don't want to use the Extension platform), installation of the add-on is done in the usual Blender 'legacy' way: - Download [the latest release](https://github.com/SietseB/GP-Tool-Wheel/releases). (Make sure it is a zip file, not automatically unzipped.) - In Blender, go to `Edit` > `Preferences...` > `Add-ons`. Click on `Install...` and select the zip file. - When the stars are in your favour, the add-on appears. Activate it. @@ -59,7 +81,10 @@ Up to Blender 4.1, installation of the add-on is done in the usual Blender way: ## Changelog -- v1.0.5 - 2024-05-23 +- v1.0.6 – 2024-11-01 + - Adapted for Blender 4.3, with the new Brush Asset Shelf + - New feature: Assign a custom brush in the Asset Shelf to a tool in the GP Tool Wheel +- v1.0.5 – 2024-05-23 - Now uses UI scale: bigger wheel when UI scale is higher - Support for Grease Pencil v3 - Save and load preferences to a custom file path diff --git a/tool_data.py b/tool_data.py index b0f90d5..2ce42f8 100644 --- a/tool_data.py +++ b/tool_data.py @@ -40,6 +40,17 @@ def __init__(self): [0, 1, 2, 3, 5], [0, 1, 2, 3, 4, 5], ] + # Non-draw brush assets in Draw mode + self.non_draw_assets = [ + '/Fill', + '/Tint', + '/Eraser', + ] + # Tool index for Draw tool + self.draw_tool_index = 0 + self.tint_tool_index = 3 + + # Available tools per mode self.tools_per_mode = {} s = self.tools_per_mode s['weight'] = { @@ -49,11 +60,36 @@ def __init__(self): 'modev3': 'WEIGHT_GREASE_PENCIL', 'active_tools': [], 'tools': [ - {'name': 'Weight', 'tool': 'builtin_brush.Weight', 'icon': 'weight_paint_weight', 'default': True}, - {'name': 'Blur', 'tool': 'builtin_brush.Blur', 'icon': 'vertex_paint_blur', 'default': True}, - {'name': 'Average', 'tool': 'builtin_brush.Average', 'icon': 'vertex_paint_average', 'default': True}, - {'name': 'Smear', 'tool': 'builtin_brush.Smear', 'icon': 'vertex_paint_smear', 'default': True}, - {'name': 'Gradient', 'tool': 'builtin.gradient', 'icon': 'weight_paint_gradient', 'default': False}, + {'name': 'Weight', 'tool': 'builtin_brush.Weight', 'icon': 'weight_paint_weight', 'default': True, 'as_asset': { + 'tool': 'builtin.brush', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, + {'name': 'Blur', 'tool': 'builtin_brush.Blur', 'icon': 'vertex_paint_blur', 'default': True, 'as_asset': { + 'tool': 'builtin_brush.blur', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, + {'name': 'Average', 'tool': 'builtin_brush.Average', 'icon': 'vertex_paint_average', 'default': True, 'as_asset': { + 'tool': 'builtin_brush.average', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, + {'name': 'Smear', 'tool': 'builtin_brush.Smear', 'icon': 'vertex_paint_smear', 'default': True, 'as_asset': { + 'tool': 'builtin_brush.smear', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, + {'name': 'Gradient', 'tool': 'builtin_brush.Gradient', 'icon': 'weight_paint_gradient', 'default': False, 'as_asset': { + 'tool': 'builtin_brush.gradient', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, ] } s['draw'] = { @@ -63,19 +99,85 @@ def __init__(self): 'modev3': 'PAINT_GREASE_PENCIL', 'active_tools': [], 'tools': [ - {'name': 'Draw', 'tool': 'builtin_brush.Draw', 'icon': 'draw_draw', 'default': True}, - {'name': 'Fill', 'tool': 'builtin_brush.Fill', 'icon': 'draw_fill', 'default': True}, - {'name': 'Erase', 'tool': 'builtin_brush.Erase', 'icon': 'draw_erase', 'default': True}, - {'name': 'Tint', 'tool': 'builtin_brush.Tint', 'icon': 'draw_tint', 'default': True}, - {'name': 'Cutter', 'tool': 'builtin.cutter', 'icon': 'draw_cutter', 'default': True}, - {'name': 'Eyedropper', 'tool': 'builtin.eyedropper', 'icon': 'draw_eyedropper', 'default': True}, - {'name': 'Line', 'tool': 'builtin.line', 'icon': 'draw_line', 'default': True}, - {'name': 'Polyline', 'tool': 'builtin.polyline', 'icon': 'draw_polyline', 'default': True}, - {'name': 'Arc', 'tool': 'builtin.arc', 'icon': 'draw_arc', 'default': True}, - {'name': 'Curve', 'tool': 'builtin.curve', 'icon': 'draw_curve', 'default': True}, - {'name': 'Box', 'tool': 'builtin.box', 'icon': 'draw_box', 'default': True}, - {'name': 'Circle', 'tool': 'builtin.circle', 'icon': 'draw_circle', 'default': True}, - {'name': 'Interpolate', 'tool': 'builtin.interpolate', 'icon': 'edit_interpolate', 'default': False}, + {'name': 'Draw', 'tool': 'builtin_brush.Draw', 'icon': 'draw_draw', 'default': True, 'as_asset': { + 'tool': 'builtin.brush', + 'asset_library_type': 'ESSENTIALS', + 'asset_library_identifier': '', + 'relative_asset_identifier': 'brushes/essentials_brushes-gp_draw.blend/Brush/Pencil' + }}, + {'name': 'Fill', 'tool': 'builtin_brush.Fill', 'icon': 'draw_fill', 'default': True, 'as_asset': { + 'tool': 'builtin_brush.Fill', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, + {'name': 'Erase', 'tool': 'builtin_brush.Erase', 'icon': 'draw_erase', 'default': True, 'as_asset': { + 'tool': 'builtin_brush.Erase', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, + {'name': 'Tint', 'tool': 'builtin_brush.Tint', 'icon': 'draw_tint', 'default': True, 'as_asset': { + 'tool': '', + 'asset_library_type': 'ESSENTIALS', + 'asset_library_identifier': '', + 'relative_asset_identifier': 'brushes/essentials_brushes-gp_draw.blend/Brush/Tint' + }}, + {'name': 'Cutter', 'tool': 'builtin.cutter', 'icon': 'draw_cutter', 'default': True, 'as_asset': { + 'tool': 'builtin.trim', + 'name': 'Trim', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, + {'name': 'Eyedropper', 'tool': 'builtin.eyedropper', 'icon': 'draw_eyedropper', 'default': True, 'as_asset': { + 'tool': 'builtin.eyedropper', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, + {'name': 'Line', 'tool': 'builtin.line', 'icon': 'draw_line', 'default': True, 'as_asset': { + 'tool': 'builtin.line', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, + {'name': 'Polyline', 'tool': 'builtin.polyline', 'icon': 'draw_polyline', 'default': True, 'as_asset': { + 'tool': 'builtin.polyline', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, + {'name': 'Arc', 'tool': 'builtin.arc', 'icon': 'draw_arc', 'default': True, 'as_asset': { + 'tool': 'builtin.arc', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, + {'name': 'Curve', 'tool': 'builtin.curve', 'icon': 'draw_curve', 'default': True, 'as_asset': { + 'tool': 'builtin.curve', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, + {'name': 'Box', 'tool': 'builtin.box', 'icon': 'draw_box', 'default': True, 'as_asset': { + 'tool': 'builtin.box', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, + {'name': 'Circle', 'tool': 'builtin.circle', 'icon': 'draw_circle', 'default': True, 'as_asset': { + 'tool': 'builtin.circle', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, + {'name': 'Interpolate', 'tool': 'builtin.interpolate', 'icon': 'edit_interpolate', 'default': False, 'as_asset': { + 'tool': 'builtin.interpolate', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, ] } s['vertex'] = { @@ -85,11 +187,36 @@ def __init__(self): 'modev3': 'VERTEX_GREASE_PENCIL', 'active_tools': [], 'tools': [ - {'name': 'Draw', 'tool': 'builtin_brush.Draw', 'icon': 'vertex_paint_draw', 'default': True}, - {'name': 'Blur', 'tool': 'builtin_brush.Blur', 'icon': 'vertex_paint_blur', 'default': True}, - {'name': 'Average', 'tool': 'builtin_brush.Average', 'icon': 'vertex_paint_average', 'default': True}, - {'name': 'Smear', 'tool': 'builtin_brush.Smear', 'icon': 'vertex_paint_smear', 'default': True}, - {'name': 'Replace', 'tool': 'builtin_brush.Replace', 'icon': 'vertex_paint_replace', 'default': True}, + {'name': 'Draw', 'tool': 'builtin_brush.Draw', 'icon': 'vertex_paint_draw', 'default': True, 'as_asset': { + 'tool': 'builtin.brush', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, + {'name': 'Blur', 'tool': 'builtin_brush.Blur', 'icon': 'vertex_paint_blur', 'default': True, 'as_asset': { + 'tool': 'builtin_brush.blur', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, + {'name': 'Average', 'tool': 'builtin_brush.Average', 'icon': 'vertex_paint_average', 'default': True, 'as_asset': { + 'tool': 'builtin_brush.average', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, + {'name': 'Smear', 'tool': 'builtin_brush.Smear', 'icon': 'vertex_paint_smear', 'default': True, 'as_asset': { + 'tool': 'builtin_brush.smear', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, + {'name': 'Replace', 'tool': 'builtin_brush.Replace', 'icon': 'vertex_paint_replace', 'default': True, 'as_asset': { + 'tool': 'builtin_brush.replace', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, ] } s['edit'] = { @@ -109,7 +236,14 @@ def __init__(self): {'name': 'Bend', 'tool': 'builtin.bend', 'icon': 'edit_bend', 'default': False}, {'name': 'Shear', 'tool': 'builtin.shear', 'icon': 'edit_shear', 'default': False}, {'name': 'Transform Fill', 'tool': 'builtin.transform_fill', - 'icon': 'edit_transform_fill', 'default': False}, + 'icon': 'edit_transform_fill', 'default': False, 'as_asset': { + 'tool': 'builtin.texture_gradient', + 'name': 'Gradient', + 'icon': 'weight_paint_gradient', + 'asset_library_type': '', + 'asset_library_identifier': '', + 'relative_asset_identifier': '' + }}, {'name': 'Interpolate', 'tool': 'builtin.interpolate', 'icon': 'edit_interpolate', 'default': True}, ] } @@ -120,15 +254,61 @@ def __init__(self): 'modev3': 'SCULPT_GREASE_PENCIL', 'active_tools': [], 'tools': [ - {'name': 'Smooth', 'tool': 'builtin_brush.Smooth', 'icon': 'sculpt_smooth', 'default': True}, - {'name': 'Thickness', 'tool': 'builtin_brush.Thickness', 'icon': 'sculpt_thickness', 'default': True}, - {'name': 'Strength', 'tool': 'builtin_brush.Strength', 'icon': 'sculpt_strength', 'default': True}, - {'name': 'Randomize', 'tool': 'builtin_brush.Randomize', 'icon': 'sculpt_randomize', 'default': True}, - {'name': 'Grab', 'tool': 'builtin_brush.Grab', 'icon': 'sculpt_grab', 'default': True}, - {'name': 'Push', 'tool': 'builtin_brush.Push', 'icon': 'sculpt_push', 'default': True}, - {'name': 'Twist', 'tool': 'builtin_brush.Twist', 'icon': 'sculpt_twist', 'default': False}, - {'name': 'Pinch', 'tool': 'builtin_brush.Pinch', 'icon': 'sculpt_pinch', 'default': False}, - {'name': 'Clone', 'tool': 'builtin_brush.Clone', 'icon': 'sculpt_clone', 'default': True}, + {'name': 'Smooth', 'tool': 'builtin_brush.Smooth', 'icon': 'sculpt_smooth', 'default': True, 'as_asset': { + 'tool': '', + 'asset_library_type': 'ESSENTIALS', + 'asset_library_identifier': '', + 'relative_asset_identifier': 'brushes/essentials_brushes-gp_sculpt.blend/Brush/Smooth' + }}, + {'name': 'Thickness', 'tool': 'builtin_brush.Thickness', 'icon': 'sculpt_thickness', 'default': True, 'as_asset': { + 'tool': '', + 'asset_library_type': 'ESSENTIALS', + 'asset_library_identifier': '', + 'relative_asset_identifier': 'brushes/essentials_brushes-gp_sculpt.blend/Brush/Thickness' + }}, + {'name': 'Strength', 'tool': 'builtin_brush.Strength', 'icon': 'sculpt_strength', 'default': True, 'as_asset': { + 'tool': '', + 'asset_library_type': 'ESSENTIALS', + 'asset_library_identifier': '', + 'relative_asset_identifier': 'brushes/essentials_brushes-gp_sculpt.blend/Brush/Strength' + }}, + {'name': 'Randomize', 'tool': 'builtin_brush.Randomize', 'icon': 'sculpt_randomize', 'default': True, 'as_asset': { + 'tool': '', + 'asset_library_type': 'ESSENTIALS', + 'asset_library_identifier': '', + 'relative_asset_identifier': 'brushes/essentials_brushes-gp_sculpt.blend/Brush/Randomize' + }}, + {'name': 'Grab', 'tool': 'builtin_brush.Grab', 'icon': 'sculpt_grab', 'default': True, 'as_asset': { + 'tool': '', + 'asset_library_type': 'ESSENTIALS', + 'asset_library_identifier': '', + 'relative_asset_identifier': 'brushes/essentials_brushes-gp_sculpt.blend/Brush/Grab' + }}, + {'name': 'Push', 'tool': 'builtin_brush.Push', 'icon': 'sculpt_push', 'default': True, 'as_asset': { + 'tool': '', + 'name': 'Pull', + 'asset_library_type': 'ESSENTIALS', + 'asset_library_identifier': '', + 'relative_asset_identifier': 'brushes/essentials_brushes-gp_sculpt.blend/Brush/Pull' + }}, + {'name': 'Twist', 'tool': 'builtin_brush.Twist', 'icon': 'sculpt_twist', 'default': False, 'as_asset': { + 'tool': '', + 'asset_library_type': 'ESSENTIALS', + 'asset_library_identifier': '', + 'relative_asset_identifier': 'brushes/essentials_brushes-gp_sculpt.blend/Brush/Twist' + }}, + {'name': 'Pinch', 'tool': 'builtin_brush.Pinch', 'icon': 'sculpt_pinch', 'default': False, 'as_asset': { + 'tool': '', + 'asset_library_type': 'ESSENTIALS', + 'asset_library_identifier': '', + 'relative_asset_identifier': 'brushes/essentials_brushes-gp_sculpt.blend/Brush/Pinch' + }}, + {'name': 'Clone', 'tool': 'builtin_brush.Clone', 'icon': 'sculpt_clone', 'default': True, 'as_asset': { + 'tool': '', + 'asset_library_type': 'ESSENTIALS', + 'asset_library_identifier': '', + 'relative_asset_identifier': 'brushes/essentials_brushes-gp_sculpt.blend/Brush/Clone' + }}, ] } s['object'] = { diff --git a/tool_wheel_draw.py b/tool_wheel_draw.py index b9c4c9b..10caf35 100644 --- a/tool_wheel_draw.py +++ b/tool_wheel_draw.py @@ -182,6 +182,15 @@ def prepare(self, event, area, context): if region.alignment == 'RIGHT' and region.width > right_padding: right_padding = region.width + # Get height of tool header and brush asset shelf + top_padding = 2 + bottom_padding = 2 + for region in area.regions: + if region.type in ['HEADER', 'TOOL_HEADER']: + top_padding += region.height + if region.type in ['ASSET_SHELF', 'ASSET_SHELF_HEADER']: + bottom_padding += region.height + # Make sure bounding box is within area bounds dx = 0 dy = 0 @@ -190,11 +199,11 @@ def prepare(self, event, area, context): max_x += dx if max_x > area.width - right_padding: dx = area.width - right_padding - max_x - if min_y < 3: - dy = 3 - min_y + if min_y < bottom_padding: + dy = bottom_padding - min_y max_y += dy - if max_y > area.height - 54: - dy = area.height - 54 - max_y + if max_y > area.height - top_padding: + dy = area.height - top_padding - max_y # Adjust xy of boxes if not within area bounds if dx != 0 or dy != 0: @@ -344,6 +353,7 @@ def draw(self, context): ipad = ToolButton.BUTTON_IMG_PADDING * ui_scale gpu.state.blend_set('ALPHA') self.active_mode = '' + use_brush_assets = (bpy.app.version >= (4, 3, 0)) # Get active mode, based on angle of mouse in the wheel dx = self.mouse_x - self.center_x @@ -367,7 +377,8 @@ def draw(self, context): active_box = box # Draw center wheel - draw_texture_2d(td.textures['inner_wheel'], (self.center_x - 24, self.center_y - 24), 48, 48) + draw_texture_2d(td.textures['inner_wheel'], (self.center_x - 24 * ui_scale, + self.center_y - 24 * ui_scale), 48 * ui_scale, 48 * ui_scale) # Iterate boxes (modes) active_tool = -1 @@ -399,7 +410,10 @@ def draw(self, context): gpu.matrix.pop() # Draw tool icon - texture = td.textures[tool['icon']] + icon = tool['icon'] + if use_brush_assets and 'as_asset' in tool and 'icon' in tool['as_asset']: + icon = tool['as_asset']['icon'] + texture = td.textures[icon] x = button.x + ipad y = button.y - button.h - ipad draw_texture_2d(texture, (x, y), button.w, button.h) @@ -429,34 +443,34 @@ def draw(self, context): # Draw dot on inner wheel if significant_angle: angle = math.radians(angle) - dx = self.center_x + math.cos(angle) * 19 - 4 - dy = self.center_y + math.sin(angle) * 19 - 4 - draw_texture_2d(td.textures['active_dot'], (dx, dy), 8, 8) + dx = self.center_x + math.cos(angle) * 19 * ui_scale - 4 * ui_scale + dy = self.center_y + math.sin(angle) * 19 * ui_scale - 4 * ui_scale + draw_texture_2d(td.textures['active_dot'], (dx, dy), 8 * ui_scale, 8 * ui_scale) # Draw dot on active box if active_box is not None: box = active_box match box.index: case 0: - dx = box.x + box.w + 2 - dy = box.y - box.h + 14 + dx = box.x + box.w + 2 * ui_scale + dy = box.y - box.h + 14 * ui_scale case 1: - dx = box.x + box.w * 0.5 - 5 - dy = box.y - box.h - 12 + dx = box.x + box.w * 0.5 - 5 * ui_scale + dy = box.y - box.h - 12 * ui_scale case 2: - dx = box.x - 12 - dy = box.y - box.h + 14 + dx = box.x - 12 * ui_scale + dy = box.y - box.h + 14 * ui_scale case 3: - dx = box.x - 12 - dy = box.y - 24 + dx = box.x - 12 * ui_scale + dy = box.y - 24 * ui_scale case 4: - dx = box.x + box.w * 0.5 - 5 - dy = box.y + 2 + dx = box.x + box.w * 0.5 - 5 * ui_scale + dy = box.y + 2 * ui_scale case 5: - dx = box.x + box.w + 2 - dy = box.y - 24 + dx = box.x + box.w + 2 * ui_scale + dy = box.y - 24 * ui_scale - draw_texture_2d(td.textures['active_dot'], (dx, dy), 10, 10) + draw_texture_2d(td.textures['active_dot'], (dx, dy), 10 * ui_scale, 10 * ui_scale) # Draw active mode or tool name as hint # Note: this must be done last, because blf messes with the alpha state @@ -477,7 +491,11 @@ def draw(self, context): if self.active_tool == -1: hint = td.tools_per_mode[self.active_mode]['name'] else: - hint = td.tools_per_mode[self.active_mode]['tools'][self.active_tool]['name'] + tool = td.tools_per_mode[self.active_mode]['tools'][self.active_tool] + if use_brush_assets and 'as_asset' in tool and 'name' in tool['as_asset']: + hint = tool['as_asset']['name'] + else: + hint = tool['name'] tw, _ = blf.dimensions(0, hint) tx = self.center_x - tw * 0.5 blf.color(0, self.text_color[0], self.text_color[1], self.text_color[2], 0.8) diff --git a/tool_wheel_operator.py b/tool_wheel_operator.py index aeb5567..49d0eb9 100644 --- a/tool_wheel_operator.py +++ b/tool_wheel_operator.py @@ -13,7 +13,7 @@ class GPENCIL_OT_tool_wheel(Operator): _draw_handle = None _brush_sizes = [0, 0, 0, 0, 0] - _unprojected_radius = [0, 0, 0, 0, 0] + _unprojected_radius = [0.0, 0.0, 0.0, 0.0, 0.0] tool_wheel = tool_wheel_draw.ToolWheel() @classmethod @@ -34,10 +34,32 @@ def switch_mode_and_tool(self, context, new_mode, new_tool): # Get Grease Pencil version is_gp_legacy = context.object.type == 'GPENCIL' - # Get selected mode + # From 4.3 on, use brush assets + use_brush_assets = (bpy.app.version >= (4, 3, 0)) + brush_asset = None + + # Get selected mode. mode = td.tools_per_mode[new_mode] - # Switch to mode + # Remember last used draw brush + if use_brush_assets and context.mode == 'PAINT_GREASE_PENCIL': + brush_asset = context.tool_settings.gpencil_paint.brush_asset_reference + if brush_asset is not None: + # When the brush asset is a fill, tint or eraser, we don't store it. + # We only want to remember real draw brushes. + is_draw_brush = True + for non_draw_brush in td.non_draw_assets: + if brush_asset.relative_asset_identifier.find(non_draw_brush) != -1: + is_draw_brush = False + break + + if is_draw_brush: + # Store the draw brush asset + td.tools_per_mode['draw']['tools'][td.draw_tool_index]['as_asset']['asset_library_type'] = brush_asset.asset_library_type + td.tools_per_mode['draw']['tools'][td.draw_tool_index]['as_asset']['asset_library_identifier'] = brush_asset.asset_library_identifier + td.tools_per_mode['draw']['tools'][td.draw_tool_index]['as_asset']['relative_asset_identifier'] = brush_asset.relative_asset_identifier + + # Switch to mode. if is_gp_legacy and mode['mode'] != context.mode: match(new_mode): case 'object': @@ -59,39 +81,69 @@ def switch_mode_and_tool(self, context, new_mode, new_tool): case 'edit': bpy.ops.object.mode_set(mode='EDIT') case 'sculpt': - bpy.ops.object.mode_set(mode='SCULPT_GPENCIL') + bpy.ops.object.mode_set(mode='SCULPT_GREASE_PENCIL') case 'draw': - bpy.ops.object.mode_set(mode='PAINT_GPENCIL') + bpy.ops.object.mode_set(mode='PAINT_GREASE_PENCIL') case 'weight': - bpy.ops.object.mode_set(mode='WEIGHT_GPENCIL') + bpy.ops.object.mode_set(mode='WEIGHT_GREASE_PENCIL') case 'vertex': - bpy.ops.object.mode_set(mode='VERTEX_GPENCIL') + bpy.ops.object.mode_set(mode='VERTEX_GREASE_PENCIL') elif new_tool == -1: return {'CANCELLED'} - # Switch to tool - if new_tool != -1: - tool = td.tools_per_mode[new_mode]['tools'][new_tool]['tool'] - # Handle 'add' tools - if tool.startswith('add.'): - match tool: - case 'add.empty': - bpy.ops.object.empty_add(radius=0.1) - case 'add.bone': - bpy.ops.object.armature_add(radius=0.4) - case 'add.gp.stroke': - if is_gp_legacy: - bpy.ops.object.gpencil_add(type='STROKE') - else: - bpy.ops.object.grease_pencil_add(type='STROKE') - case 'add.gp.empty': - if is_gp_legacy: - bpy.ops.object.gpencil_add(type='EMPTY') - else: - bpy.ops.object.grease_pencil_add(type='EMPTY') - else: - # Switch to tool + # Get selected tool + if new_tool == -1: + return {'FINISHED'} + + tool = mode['tools'][new_tool]['tool'] + tool_as_asset = None + if use_brush_assets and 'as_asset' in mode['tools'][new_tool]: + tool_as_asset = mode['tools'][new_tool]['as_asset'] + + # Handle 'add' tools + if tool.startswith('add.'): + match tool: + case 'add.empty': + bpy.ops.object.empty_add(radius=0.1) + case 'add.bone': + bpy.ops.object.armature_add(radius=0.4) + case 'add.gp.stroke': + if is_gp_legacy: + bpy.ops.object.gpencil_add(type='STROKE') + else: + bpy.ops.object.grease_pencil_add(type='STROKE') + case 'add.gp.empty': + if is_gp_legacy: + bpy.ops.object.gpencil_add(type='EMPTY') + else: + bpy.ops.object.grease_pencil_add(type='EMPTY') + else: + # Switch to tool + if tool_as_asset is None: bpy.ops.wm.tool_set_by_id(name=tool) + else: + # From 4.3 on, use brush assets for drawing and sculpting and tools for all the others + use_asset = False if tool_as_asset['tool'] else True + + # Edge case: when switching from from a non-draw brush to the Draw tool, + # use the previously stored draw brush asset. + if new_mode == 'draw' and mode['tools'][new_tool]['name'] == 'Draw': + brush_asset = context.tool_settings.gpencil_paint.brush_asset_reference + if brush_asset is not None: + for non_draw_brush in td.non_draw_assets: + if brush_asset.relative_asset_identifier.find(non_draw_brush) != -1: + use_asset = True + break + + # Switch to the new tool or brush asset + if use_asset: + # Set brush asset + bpy.ops.brush.asset_activate(asset_library_type=tool_as_asset['asset_library_type'], + asset_library_identifier=tool_as_asset['asset_library_identifier'], + relative_asset_identifier=tool_as_asset['relative_asset_identifier']) + else: + # Set tool + bpy.ops.wm.tool_set_by_id(name=tool_as_asset['tool']) return {'FINISHED'}