# ##### 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 ##### # bl_info = { "name": "Pie Menus Official", "author": "Antony Riakiotakis", "version": (1, 0, 1), "blender": (2, 71, 4), "description": "Enable official pie Menus in blender", "category": "User Interface", } import bpy from bpy.types import Menu, Operator from bpy.props import EnumProperty class VIEW3D_PIE_object_mode(Menu): bl_label = "Mode" def draw(self, context): layout = self.layout pie = layout.menu_pie() pie.operator_enum("OBJECT_OT_mode_set", "mode") class VIEW3D_PIE_view_more(Menu): bl_label = "More" def draw(self, context): layout = self.layout pie = layout.menu_pie() pie.operator("VIEW3D_OT_view_persportho", text="Persp/Ortho", icon='RESTRICT_VIEW_OFF') pie.operator("VIEW3D_OT_camera_to_view") pie.operator("VIEW3D_OT_view_selected") pie.operator("VIEW3D_OT_view_all") pie.operator("VIEW3D_OT_localview") pie.operator("SCREEN_OT_region_quadview") class VIEW3D_PIE_view(Menu): bl_label = "View" def draw(self, context): layout = self.layout pie = layout.menu_pie() pie.operator_enum("VIEW3D_OT_viewnumpad", "type") pie.operator("wm.call_menu_pie", text="More", icon='PLUS').name = "VIEW3D_PIE_view_more" class VIEW3D_PIE_shade(Menu): bl_label = "Shade" def draw(self, context): layout = self.layout pie = layout.menu_pie() pie.prop(context.space_data, "viewport_shade", expand=True) if context.active_object: if(context.mode == 'EDIT_MESH'): pie.operator("MESH_OT_faces_shade_smooth") pie.operator("MESH_OT_faces_shade_flat") else: pie.operator("OBJECT_OT_shade_smooth") pie.operator("OBJECT_OT_shade_flat") class VIEW3D_manipulator_set(Operator): bl_label = "Set Manipulator" bl_idname = "view3d.manipulator_set" type = EnumProperty( name="Type", items=(('TRANSLATE', "Translate", "Use the manipulator for movement transformations"), ('ROTATE', "Rotate", "Use the manipulator for rotation transformations"), ('SCALE', "Scale", "Use the manipulator for scale transformations"), ), ) def execute(self, context): # show manipulator if user selects an option context.space_data.show_manipulator = True context.space_data.transform_manipulators = {self.type} return {'FINISHED'} class VIEW3D_PIE_manipulator(Menu): bl_label = "Manipulator" def draw(self, context): layout = self.layout pie = layout.menu_pie() pie.operator("view3d.manipulator_set", icon='MAN_TRANS', text="Translate").type = 'TRANSLATE' pie.operator("view3d.manipulator_set", icon='MAN_ROT', text="Rotate").type = 'ROTATE' pie.operator("view3d.manipulator_set", icon='MAN_SCALE', text="Scale").type = 'SCALE' pie.prop(context.space_data, "show_manipulator") class VIEW3D_PIE_pivot(Menu): bl_label = "Pivot" def draw(self, context): layout = self.layout pie = layout.menu_pie() pie.prop(context.space_data, "pivot_point", expand=True) if context.active_object.mode == 'OBJECT': pie.prop(context.space_data, "use_pivot_point_align", text="Center Points") class VIEW3D_PIE_snap(Menu): bl_label = "Snapping" def draw(self, context): layout = self.layout toolsettings = context.tool_settings pie = layout.menu_pie() pie.prop(toolsettings, "snap_element", expand=True) pie.prop(toolsettings, "use_snap") addon_keymaps = [] classes = ( VIEW3D_manipulator_set, VIEW3D_PIE_object_mode, VIEW3D_PIE_view, VIEW3D_PIE_view_more, VIEW3D_PIE_shade, VIEW3D_PIE_manipulator, VIEW3D_PIE_pivot, VIEW3D_PIE_snap, ) def register(): for cls in classes: bpy.utils.register_class(cls) wm = bpy.context.window_manager if wm.keyconfigs.addon: km = wm.keyconfigs.addon.keymaps.new(name='Object Non-modal') kmi = km.keymap_items.new('wm.call_menu_pie', 'TAB', 'PRESS') kmi.properties.name = 'VIEW3D_PIE_object_mode' kmi = km.keymap_items.new('wm.call_menu_pie', 'Z', 'PRESS') kmi.properties.name = 'VIEW3D_PIE_shade' kmi = km.keymap_items.new('wm.call_menu_pie', 'Q', 'PRESS') kmi.properties.name = 'VIEW3D_PIE_view' kmi = km.keymap_items.new('wm.call_menu_pie', 'SPACE', 'PRESS', ctrl=True) kmi.properties.name = 'VIEW3D_PIE_manipulator' kmi = km.keymap_items.new('wm.call_menu_pie', 'PERIOD', 'PRESS') kmi.properties.name = 'VIEW3D_PIE_pivot' kmi = km.keymap_items.new('wm.call_menu_pie', 'TAB', 'PRESS', ctrl=True, shift=True) kmi.properties.name = 'VIEW3D_PIE_snap' addon_keymaps.append(km) def unregister(): for cls in classes: bpy.utils.unregister_class(cls) wm = bpy.context.window_manager if wm.keyconfigs.addon: for km in addon_keymaps: for kmi in km.keymap_items: km.keymap_items.remove(kmi) wm.keyconfigs.addon.keymaps.remove(km) addon_keymaps.clear()