mirror of
https://github.com/blender/blender-addons.git
synced 2025-08-20 13:22:58 +00:00

Fixed box deform operator following "context.temp_override" API changes in Blender 4.0 Changed: - If box deform operator is launched through customized shortcut, same shortcut will be used to cancel (Previously cancel was hardcoded to `Ctrl + T`) - Some operators idname were adjusted to expose "Assign Shortcut" from UI context menu
82 lines
3.4 KiB
Python
82 lines
3.4 KiB
Python
# SPDX-FileCopyrightText: 2020-2023 Blender Foundation
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
import bpy
|
|
|
|
class GP_PT_sidebarPanel(bpy.types.Panel):
|
|
bl_label = "Grease Pencil Tools"
|
|
bl_space_type = "VIEW_3D"
|
|
bl_region_type = "UI"
|
|
bl_category = "Grease Pencil"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
layout.use_property_split = True
|
|
|
|
# Box deform ops
|
|
self.layout.operator_context = 'INVOKE_DEFAULT'
|
|
layout.operator('view3d.gp_box_deform', icon ="MOD_MESHDEFORM")
|
|
|
|
# Straight line ops
|
|
layout.operator('gpencil.straight_stroke', icon ="CURVE_PATH")
|
|
|
|
|
|
# Expose native view operators
|
|
row = layout.row(align=True)
|
|
row.operator('view3d.zoom_camera_1_to_1', text = 'Zoom 1:1', icon = 'ZOOM_PREVIOUS')
|
|
row.operator('view3d.view_center_camera', text = 'Zoom Fit', icon = 'FULLSCREEN_ENTER')
|
|
|
|
# Rotation save/load
|
|
row = layout.row(align=True)
|
|
row.operator('view3d.rotate_canvas_reset', text = 'Reset Rotation', icon = 'FILE_REFRESH')
|
|
row.operator('view3d.rotate_canvas_set', text = 'Save Rotation', icon = 'DRIVER_ROTATIONAL_DIFFERENCE')
|
|
|
|
# View flip
|
|
if context.scene.camera and context.scene.camera.scale.x < 0:
|
|
row = layout.row(align=True)
|
|
row.operator('view3d.camera_flip_x', text = 'Camera Mirror Flip', icon = 'MOD_MIRROR')
|
|
row.label(text='', icon='LOOP_BACK')
|
|
else:
|
|
layout.operator('view3d.camera_flip_x', text = 'Camera Mirror Flip', icon = 'MOD_MIRROR')
|
|
|
|
|
|
def menu_boxdeform_entry(self, context):
|
|
"""Transform shortcut to append in existing menu"""
|
|
layout = self.layout
|
|
obj = bpy.context.object
|
|
# {'EDIT_GPENCIL', 'PAINT_GPENCIL','SCULPT_GPENCIL','WEIGHT_GPENCIL', 'VERTEX_GPENCIL'}
|
|
if obj and obj.type == 'GPENCIL' and context.mode in {'OBJECT', 'EDIT_GPENCIL', 'PAINT_GPENCIL'}:
|
|
self.layout.operator_context = 'INVOKE_DEFAULT'
|
|
layout.operator('view3d.gp_box_deform', text='Box Deform')
|
|
|
|
def menu_stroke_entry(self, context):
|
|
layout = self.layout
|
|
# Gpencil modes : {'EDIT_GPENCIL', 'PAINT_GPENCIL','SCULPT_GPENCIL','WEIGHT_GPENCIL', 'VERTEX_GPENCIL'}
|
|
if context.mode in {'EDIT_GPENCIL', 'PAINT_GPENCIL'}:
|
|
self.layout.operator_context = 'INVOKE_DEFAULT'
|
|
layout.operator('gpencil.straight_stroke', text='Straight Stroke')
|
|
|
|
def menu_brush_pack(self, context):
|
|
layout = self.layout
|
|
# if context.mode in {'EDIT_GPENCIL', 'PAINT_GPENCIL'}:
|
|
self.layout.operator_context = 'INVOKE_DEFAULT'
|
|
layout.operator('gp.import_brush_pack')#, text='Import brush pack'
|
|
|
|
|
|
def register():
|
|
bpy.utils.register_class(GP_PT_sidebarPanel)
|
|
## VIEW3D_MT_edit_gpencil.append# Grease pencil menu
|
|
bpy.types.VIEW3D_MT_transform_object.append(menu_boxdeform_entry)
|
|
bpy.types.VIEW3D_MT_edit_gpencil_transform.append(menu_boxdeform_entry)
|
|
bpy.types.VIEW3D_MT_edit_gpencil_stroke.append(menu_stroke_entry)
|
|
bpy.types.VIEW3D_MT_brush_gpencil_context_menu.append(menu_brush_pack)
|
|
|
|
|
|
def unregister():
|
|
bpy.types.VIEW3D_MT_brush_gpencil_context_menu.remove(menu_brush_pack)
|
|
bpy.types.VIEW3D_MT_transform_object.remove(menu_boxdeform_entry)
|
|
bpy.types.VIEW3D_MT_edit_gpencil_transform.remove(menu_boxdeform_entry)
|
|
bpy.types.VIEW3D_MT_edit_gpencil_stroke.remove(menu_stroke_entry)
|
|
bpy.utils.unregister_class(GP_PT_sidebarPanel)
|