viewport pies: remove cursor, proportional: T67995

This commit is contained in:
Brendon Murphy 2019-08-24 10:09:20 +10:00
parent 4262eb5403
commit f4e1bf3eb7
4 changed files with 19 additions and 575 deletions

View File

@ -34,7 +34,7 @@ from bpy.types import (
bl_info = {
"name": "3D Viewport Pie Menus",
"author": "meta-androcto",
"version": (1, 2, 8),
"version": (1, 2, 9),
"blender": (2, 80, 0),
"description": "Pie Menu Activation",
"location": "Addons Preferences",
@ -49,11 +49,9 @@ sub_modules_names = (
"pie_views_numpad_menu",
"pie_sculpt_menu",
"pie_origin",
"pie_cursor",
"pie_manipulator_menu",
"pie_snap_menu",
"pie_shading_menu",
"pie_proportional_menu",
"pie_align_menu",
"pie_delete_menu",
"pie_apply_transform_menu",

View File

@ -1,122 +0,0 @@
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
# <pep8 compliant>
bl_info = {
"name": "Hotkey: 'Shift S'",
"description": "Cursor Menu",
"author": "pitiwazou, meta-androcto",
"version": (0, 1, 0),
"blender": (2, 80, 0),
"location": "3D View",
"warning": "",
"wiki_url": "",
"category": "Cursor Pie"
}
import bpy
from bpy.types import (
Menu,
Operator,
)
# SnapCursSelToCenter1 thanks to Isaac Weaver (wisaac) D1963
class PIE_OT_Snap_CursSelToCenter1(Operator):
bl_idname = "view3d.snap_cursor_selected_to_center1"
bl_label = "Snap Cursor & Selection to Center"
bl_description = ("Snap 3D cursor and selected objects to the center \n"
"Works only in Object Mode")
@classmethod
def poll(cls, context):
return (context.area.type == "VIEW_3D" and context.mode == "OBJECT")
def execute(self, context):
context.scene.cursor.location = (0, 0, 0)
for obj in context.selected_objects:
obj.location = (0, 0, 0)
return {'FINISHED'}
# Origin/Pivot menu1 - Shift + S
class PIE_MT_Snap_CursorMenu(Menu):
bl_idname = "SNAP_MT_cursormenu"
bl_label = "Cursor Menu"
def draw(self, context):
layout = self.layout
pie = layout.menu_pie()
# 4 - LEFT
pie.operator("view3d.snap_selected_to_cursor", text="Selection to Cursor",
icon='CLIPUV_HLT').use_offset = False
# 6 - RIGHT
pie.operator("view3d.snap_selected_to_cursor",
text="Selection to Cursor (Keep Offset)", icon='PIVOT_CURSOR').use_offset = True
# 2 - BOTTOM
pie.operator("view3d.snap_cursor_selected_to_center1",
text="Selected & Cursor to Center", icon='NONE')
# 8 - TOP
pie.operator("view3d.snap_cursor_to_center", text="Cursor to World Origin", icon='CLIPUV_DEHLT')
# 7 - TOP - LEFT
pie.operator("view3d.snap_cursor_to_selected", text="Cursor to Selected", icon='NONE')
# 9 - TOP - RIGHT
pie.operator("view3d.snap_cursor_to_active", text="Cursor to Active", icon='NONE')
# 1 - BOTTOM - LEFT
pie.operator("view3d.snap_selected_to_grid", text="Selection to Grid", icon='GRID')
# 3 - BOTTOM - RIGHT
pie.operator("view3d.snap_cursor_to_grid", text="Cursor to Grid", icon='GRID')
classes = (
PIE_MT_Snap_CursorMenu,
PIE_OT_Snap_CursSelToCenter1,
)
addon_keymaps = []
def register():
for cls in classes:
bpy.utils.register_class(cls)
wm = bpy.context.window_manager
if wm.keyconfigs.addon:
# Origin/Pivot
km = wm.keyconfigs.addon.keymaps.new(name='3D View Generic', space_type='VIEW_3D')
kmi = km.keymap_items.new('wm.call_menu_pie', 'S', 'PRESS', shift=True)
kmi.properties.name = "SNAP_MT_cursormenu"
addon_keymaps.append((km, kmi))
def unregister():
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()

View File

@ -1,427 +0,0 @@
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
# <pep8 compliant>
bl_info = {
"name": "Hotkey: 'Shift O'",
"description": "Proportional Object/Edit Tools",
"author": "pitiwazou, meta-androcto",
"version": (0, 1, 1),
"blender": (2, 80, 0),
"location": "3D View Object & Edit modes",
"warning": "",
"wiki_url": "",
"category": "Proportional Edit Pie"
}
import bpy
from bpy.types import (
Menu,
Operator,
)
# Proportional Edit Object
class PIE_OT_ProportionalEditObj(Operator):
bl_idname = "proportional_obj.active"
bl_label = "Proportional Edit Object"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
ts = context.tool_settings
if ts.use_proportional_edit_objects is True:
ts.use_proportional_edit_objects = False
elif ts.use_proportional_edit_objects is False:
ts.use_proportional_edit_objects = True
return {'FINISHED'}
class PIE_OT_ProportionalSmoothObj(Operator):
bl_idname = "proportional_obj.smooth"
bl_label = "Proportional Smooth Object"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
ts = context.tool_settings
if ts.use_proportional_edit_objects is False:
ts.use_proportional_edit_objects = True
ts.proportional_edit_falloff = 'SMOOTH'
if ts.proportional_edit_falloff != 'SMOOTH':
ts.proportional_edit_falloff = 'SMOOTH'
return {'FINISHED'}
class PIE_OT_ProportionalSphereObj(Operator):
bl_idname = "proportional_obj.sphere"
bl_label = "Proportional Sphere Object"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
ts = context.tool_settings
if ts.use_proportional_edit_objects is False:
ts.use_proportional_edit_objects = True
ts.proportional_edit_falloff = 'SPHERE'
if ts.proportional_edit_falloff != 'SPHERE':
ts.proportional_edit_falloff = 'SPHERE'
return {'FINISHED'}
class PIE_OT_ProportionalRootObj(Operator):
bl_idname = "proportional_obj.root"
bl_label = "Proportional Root Object"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
ts = context.tool_settings
if ts.use_proportional_edit_objects is False:
ts.use_proportional_edit_objects = True
ts.proportional_edit_falloff = 'ROOT'
if ts.proportional_edit_falloff != 'ROOT':
ts.proportional_edit_falloff = 'ROOT'
return {'FINISHED'}
class PIE_OT_ProportionalSharpObj(Operator):
bl_idname = "proportional_obj.sharp"
bl_label = "Proportional Sharp Object"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
ts = context.tool_settings
if ts.use_proportional_edit_objects is False:
ts.use_proportional_edit_objects = True
ts.proportional_edit_falloff = 'SHARP'
if ts.proportional_edit_falloff != 'SHARP':
ts.proportional_edit_falloff = 'SHARP'
return {'FINISHED'}
class PIE_OT_ProportionalLinearObj(Operator):
bl_idname = "proportional_obj.linear"
bl_label = "Proportional Linear Object"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
ts = context.tool_settings
if ts.use_proportional_edit_objects is False:
ts.use_proportional_edit_objects = True
ts.proportional_edit_falloff = 'LINEAR'
if ts.proportional_edit_falloff != 'LINEAR':
ts.proportional_edit_falloff = 'LINEAR'
return {'FINISHED'}
class PIE_OT_ProportionalConstantObj(Operator):
bl_idname = "proportional_obj.constant"
bl_label = "Proportional Constant Object"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
ts = context.tool_settings
if ts.use_proportional_edit_objects is False:
ts.use_proportional_edit_objects = True
ts.proportional_edit_falloff = 'CONSTANT'
if ts.proportional_edit_falloff != 'CONSTANT':
ts.proportional_edit_falloff = 'CONSTANT'
return {'FINISHED'}
class PIE_OT_ProportionalRandomObj(Operator):
bl_idname = "proportional_obj.random"
bl_label = "Proportional Random Object"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
ts = context.tool_settings
if ts.use_proportional_edit_objects is False:
ts.use_proportional_edit_objects = True
ts.proportional_edit_falloff = 'RANDOM'
if ts.proportional_edit_falloff != 'RANDOM':
ts.proportional_edit_falloff = 'RANDOM'
return {'FINISHED'}
# Proportional Edit Edit Mode
class PIE_OT_ProportionalEditEdt(Operator):
bl_idname = "proportional_edt.active"
bl_label = "Proportional Edit EditMode"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
ts = context.tool_settings
ts.use_proportional_edit ^= 1
return {'FINISHED'}
class PIE_OT_ProportionalConnectedEdt(Operator):
bl_idname = "proportional_edt.connected"
bl_label = "Proportional Connected EditMode"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
ts = context.tool_settings
ts.use_proportional_connected = True
return {'FINISHED'}
class PIE_OT_ProportionalProjectedEdt(Operator):
bl_idname = "proportional_edt.projected"
bl_label = "Proportional projected EditMode"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
ts = context.tool_settings
ts = context.tool_settings
ts.use_proportional_projected = True
return {'FINISHED'}
class PIE_OT_ProportionalSmoothEdt(Operator):
bl_idname = "proportional_edt.smooth"
bl_label = "Proportional Smooth EditMode"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
ts = context.tool_settings
ts.use_proportional_edit = True
ts.proportional_edit_falloff = 'SMOOTH'
return {'FINISHED'}
class PIE_OT_ProportionalSphereEdt(Operator):
bl_idname = "proportional_edt.sphere"
bl_label = "Proportional Sphere EditMode"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
ts = context.tool_settings
ts.use_proportional_edit = True
ts.proportional_edit_falloff = 'SPHERE'
return {'FINISHED'}
class PIE_OT_ProportionalRootEdt(Operator):
bl_idname = "proportional_edt.root"
bl_label = "Proportional Root EditMode"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
ts = context.tool_settings
ts.use_proportional_edit = True
ts.proportional_edit_falloff = 'ROOT'
return {'FINISHED'}
class PIE_OT_ProportionalSharpEdt(Operator):
bl_idname = "proportional_edt.sharp"
bl_label = "Proportional Sharp EditMode"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
ts = context.tool_settings
ts.use_proportional_edit = True
ts.proportional_edit_falloff = 'SHARP'
return {'FINISHED'}
class PIE_OT_ProportionalLinearEdt(Operator):
bl_idname = "proportional_edt.linear"
bl_label = "Proportional Linear EditMode"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
ts = context.tool_settings
ts.use_proportional_edit = True
ts.proportional_edit_falloff = 'LINEAR'
return {'FINISHED'}
class PIE_OT_ProportionalConstantEdt(Operator):
bl_idname = "proportional_edt.constant"
bl_label = "Proportional Constant EditMode"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
ts = context.tool_settings
ts.use_proportional_edit = True
ts.proportional_edit_falloff = 'CONSTANT'
return {'FINISHED'}
class PIE_OT_ProportionalRandomEdt(Operator):
bl_idname = "proportional_edt.random"
bl_label = "Proportional Random EditMode"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
ts = context.tool_settings
ts.use_proportional_edit = True
ts.proportional_edit_falloff = 'RANDOM'
return {'FINISHED'}
class PIE_OT_ProportionalInverseS(Operator):
bl_idname = "proportional_edt.inverse"
bl_label = "Proportional Inverse Square"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
ts = context.tool_settings
ts.use_proportional_edit = True
ts.proportional_edit_falloff = 'INVERSE_SQUARE'
return {'FINISHED'}
# Pie ProportionalEditObj - O
class PIE_MT_ProportionalObj(Menu):
bl_idname = "PIE_MT_proportional_obj"
bl_label = "Pie Proportional Obj"
def draw(self, context):
layout = self.layout
pie = layout.menu_pie()
# 4 - LEFT
pie.operator("proportional_obj.sphere", text="Sphere", icon='SPHERECURVE')
# 6 - RIGHT
pie.operator("proportional_obj.root", text="Root", icon='ROOTCURVE')
# 2 - BOTTOM
pie.operator("proportional_obj.smooth", text="Smooth", icon='SMOOTHCURVE')
# 8 - TOP
pie.prop(context.tool_settings, "use_proportional_edit_objects", text="Proportional On/Off")
# 7 - TOP - LEFT
pie.operator("proportional_obj.linear", text="Linear", icon='LINCURVE')
# 9 - TOP - RIGHT
pie.operator("proportional_obj.sharp", text="Sharp", icon='SHARPCURVE')
# 1 - BOTTOM - LEFT
pie.operator("proportional_obj.constant", text="Constant", icon='NOCURVE')
# 3 - BOTTOM - RIGHT
pie.operator("proportional_obj.random", text="Random", icon='RNDCURVE')
# Pie ProportionalEditEdt - O
class PIE_MT_ProportionalEdt(Menu):
bl_idname = "PIE_MT_proportional_edt"
bl_label = "Pie Proportional Edit"
def draw(self, context):
layout = self.layout
pie = layout.menu_pie()
# 4 - LEFT
pie.operator("proportional_edt.connected", text="Connected", icon='PROP_CON')
# 6 - RIGHT
pie.operator("proportional_edt.projected", text="Projected", icon='PROP_ON')
# 2 - BOTTOM
pie.operator("proportional_edt.root", text="Root", icon='ROOTCURVE')
# 8 - TOP
pie.operator("proportional_edt.active", text="Proportional On/Off", icon='PROP_ON')
# 7 - TOP - LEFT
pie.operator("proportional_edt.smooth", text="Smooth", icon='SMOOTHCURVE')
# 9 - TOP - RIGHT
pie.operator("proportional_edt.sphere", text="Sphere", icon='SPHERECURVE')
# 1 - BOTTOM - LEFT
pie.operator("proportional_edt.constant", text="Constant", icon='NOCURVE')
# 3 - BOTTOM - RIGHT
pie.menu("PIE_MT_proportional_more", text="More", icon='LINCURVE')
# Pie ProportionalEditEdt - O
class PIE_MT_ProportionalMore(Menu):
bl_idname = "PIE_MT_proportional_more"
bl_label = "Pie Proportional More"
def draw(self, context):
layout = self.layout
pie = layout.menu_pie()
box = pie.split().column()
box.operator("proportional_edt.linear", text="Linear", icon='LINCURVE')
box.operator("proportional_edt.sharp", text="Sharp", icon='SHARPCURVE')
box.operator("proportional_edt.random", text="Random", icon='RNDCURVE')
box.operator("proportional_edt.inverse", text="INVERSE", icon='INVERSESQUARECURVE')
classes = (
PIE_OT_ProportionalEditObj,
PIE_OT_ProportionalSmoothObj,
PIE_OT_ProportionalSphereObj,
PIE_OT_ProportionalRootObj,
PIE_OT_ProportionalSharpObj,
PIE_OT_ProportionalLinearObj,
PIE_OT_ProportionalConstantObj,
PIE_OT_ProportionalRandomObj,
PIE_OT_ProportionalEditEdt,
PIE_OT_ProportionalConnectedEdt,
PIE_OT_ProportionalProjectedEdt,
PIE_OT_ProportionalSmoothEdt,
PIE_OT_ProportionalSphereEdt,
PIE_OT_ProportionalRootEdt,
PIE_OT_ProportionalSharpEdt,
PIE_OT_ProportionalLinearEdt,
PIE_OT_ProportionalConstantEdt,
PIE_OT_ProportionalRandomEdt,
PIE_MT_ProportionalObj,
PIE_MT_ProportionalEdt,
PIE_MT_ProportionalMore,
PIE_OT_ProportionalInverseS,
)
addon_keymaps = []
def register():
for cls in classes:
bpy.utils.register_class(cls)
wm = bpy.context.window_manager
if wm.keyconfigs.addon:
# ProportionalEditObj
km = wm.keyconfigs.addon.keymaps.new(name='Object Mode')
kmi = km.keymap_items.new('wm.call_menu_pie', 'O', 'PRESS', shift=True)
kmi.properties.name = "PIE_MT_proportional_obj"
addon_keymaps.append((km, kmi))
# ProportionalEditEdt
km = wm.keyconfigs.addon.keymaps.new(name='Mesh')
kmi = km.keymap_items.new('wm.call_menu_pie', 'O', 'PRESS', shift=True)
kmi.properties.name = "PIE_MT_proportional_edt"
addon_keymaps.append((km, kmi))
def unregister():
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()

View File

@ -47,9 +47,8 @@ class PIE_MT_SelectionsMore(Menu):
layout = self.layout
pie = layout.menu_pie()
box = pie.split().column()
box.operator("object.select_by_type", text="Select By Type", icon='SNAP_VOLUME')
box.operator("object.select_grouped", text="Select Grouped", icon='NONE')
box.operator("object.select_linked", text="Select Linked", icon='CONSTRAINT_BONE')
box.operator("object.select_random", text="Select Random")
box.operator("object.select_linked", text="Select Linked")
box.menu("VIEW3D_MT_select_object_more_less", text="More/Less")
@ -62,9 +61,9 @@ class PIE_MT_SelectionsOM(Menu):
layout = self.layout
pie = layout.menu_pie()
# 4 - LEFT
pie.row().label(text="")
pie.operator("object.select_grouped", text="Select Grouped")
# 6 - RIGHT
pie.operator("object.select_random", text="Select Random", icon='GROUP_VERTEX')
pie.operator("object.select_by_type", text="Select By Type")
# 2 - BOTTOM
pie.operator("object.select_all", text="Invert Selection",
icon='ZOOM_PREVIOUS').action = 'INVERT'
@ -72,13 +71,13 @@ class PIE_MT_SelectionsOM(Menu):
pie.operator("object.select_all", text="Select All Toggle",
icon='NONE').action = 'TOGGLE'
# 7 - TOP - LEFT
pie.operator("view3d.select_circle", text="Circle Select", icon='NONE')
pie.operator("view3d.select_circle", text="Circle Select")
# 9 - TOP - RIGHT
pie.operator("view3d.select_box", text="Box Select", icon='NONE')
pie.operator("view3d.select_box", text="Box Select")
# 1 - BOTTOM - LEFT
pie.operator("object.select_camera", text="Select Camera", icon='CAMERA_DATA')
pie.operator("object.select_camera", text="Select Camera")
# 3 - BOTTOM - RIGHT
pie.menu("PIE_MT_selectionsmore", text="Select Menu", icon='RESTRICT_SELECT_OFF')
pie.menu("PIE_MT_selectionsmore", text="Select Menu")
# Pie Selection Edit Mode
@ -90,25 +89,21 @@ class PIE_MT_SelectionsEM(Menu):
layout = self.layout
pie = layout.menu_pie()
# 4 - LEFT
pie.operator("view3d.select_box", text="Box Select",
icon='NONE')
# 6 - RIGHT
pie.menu("OBJECT_MT_selectloopselection", text="Select Loop Menu", icon='NONE')
# 2 - BOTTOM
pie.operator("mesh.select_all", text="Select None",
icon='RESTRICT_SELECT_ON').action = 'DESELECT'
# 8 - TOP
pie.operator("mesh.select_all", text="Select All",
icon='RESTRICT_SELECT_OFF').action = 'SELECT'
# 6 - RIGHT
pie.menu("OBJECT_MT_selectloopselection", text="Select Loop Menu")
# 2 - BOTTOM
pie.operator("mesh.select_all", text="Invert Selection").action = 'INVERT'
# 8 - TOP
pie.operator("mesh.select_all", text="Select All Toggle").action = 'TOGGLE'
# 7 - TOP - LEFT
pie.operator("mesh.select_all", text="Select All Toggle",
icon='ARROW_LEFTRIGHT').action = 'TOGGLE'
pie.operator("view3d.select_circle", text="Circle Select")
# 9 - TOP - RIGHT
pie.operator("mesh.select_all", text="Invert Selection",
icon='FULLSCREEN_EXIT').action = 'INVERT'
pie.operator("view3d.select_box", text="Box Select")
# 1 - BOTTOM - LEFT
pie.operator("view3d.select_circle", text="Circle Select",
icon='NONE')
pie.operator("mesh.select_all", text="Select None",
icon='RESTRICT_SELECT_ON').action = 'DESELECT'
# 3 - BOTTOM - RIGHT
pie.menu("PIE_MT_selectallbyselection", text="Edit Modes", icon='VERTEXSEL')