diff options
20 files changed, 548 insertions, 923 deletions
diff --git a/space_view3d_pie_menus/__init__.py b/space_view3d_pie_menus/__init__.py index 5a08426f..01afb97b 100644 --- a/space_view3d_pie_menus/__init__.py +++ b/space_view3d_pie_menus/__init__.py @@ -18,19 +18,6 @@ # <pep8 compliant> -bl_info = { - "name": "3D Viewport Pie Menus", - "author": "meta-androcto, pitiwazou, chromoly, italic", - "version": (1, 1, 4), - "blender": (2, 7, 7), - "description": "Individual Pie Menu Activation List", - "location": "Addons Preferences", - "warning": "", - "wiki_url": "https://wiki.blender.org/index.php/Extensions:2.6/Py/" - "Scripts/3D_interaction/viewport_pies", - "category": "Pie Menu" - } - import bpy from bpy.props import ( @@ -42,6 +29,20 @@ from bpy.types import ( AddonPreferences, ) + +bl_info = { + "name": "3D Viewport Pie Menus", + "author": "meta-androcto, pitiwazou, chromoly, italic", + "version": (1, 1, 5), + "blender": (2, 7, 7), + "description": "Individual Pie Menu Activation List", + "location": "Addons Preferences", + "warning": "", + "wiki_url": "https://wiki.blender.org/index.php/Extensions:2.6/Py/" + "Scripts/3D_interaction/viewport_pies", + "category": "Pie Menu" + } + sub_modules_names = ( "pie_modes_menu", "pie_views_numpad_menu", @@ -64,7 +65,8 @@ sub_modules_names = ( ) -sub_modules = [__import__(__package__ + "." + submod, {}, {}, submod) for submod in sub_modules_names] +sub_modules = [__import__(__package__ + "." + submod, {}, {}, submod) for + submod in sub_modules_names] sub_modules.sort(key=lambda mod: (mod.bl_info['category'], mod.bl_info['name'])) @@ -122,11 +124,60 @@ def unregister_submodule(mod): del prefs[name] +def enable_all_modules(self, context): + for mod in sub_modules: + mod_name = mod.__name__.split('.')[-1] + setattr(self, 'use_' + mod_name, False) + if not mod.__addon_enabled__: + setattr(self, 'use_' + mod_name, True) + mod.__addon_enabled__ = True + + return None + + +def disable_all_modules(self, context): + for mod in sub_modules: + mod_name = mod.__name__.split('.')[-1] + + if mod.__addon_enabled__: + setattr(self, 'use_' + mod_name, False) + mod.__addon_enabled__ = False + + return None + + class PieToolsPreferences(AddonPreferences): bl_idname = __name__ + enable_all = BoolProperty( + name="Enable all", + description="Enable all Pie Modules", + default=False, + update=enable_all_modules + ) + disable_all = BoolProperty( + name="Disable all", + description="Disable all Pie Modules", + default=False, + update=disable_all_modules + ) + def draw(self, context): layout = self.layout + split = layout.split(percentage=0.5, align=True) + row = split.row() + row.alignment = "LEFT" + sub_box = row.box() + sub_box.prop(self, "enable_all", emboss=False, + icon="VISIBLE_IPO_ON", icon_only=True) + row.label("Enable All") + + row = split.row() + row.alignment = "RIGHT" + row.label("Disable All") + sub_box = row.box() + sub_box.prop(self, "disable_all", emboss=False, + icon="VISIBLE_IPO_OFF", icon_only=True) for mod in sub_modules: mod_name = mod.__name__.split('.')[-1] @@ -161,10 +212,12 @@ class PieToolsPreferences(AddonPreferences): split = col.row().split(percentage=0.15) split.label('Location:') split.label(info['location']) - if info.get('author') and info.get('author') != 'chromoly': + """ + if info.get('author'): split = col.row().split(percentage=0.15) split.label('Author:') split.label(info['author']) + """ if info.get('version'): split = col.row().split(percentage=0.15) split.label('Version:') @@ -196,12 +249,14 @@ class PieToolsPreferences(AddonPreferences): try: prefs.draw(context) except: + import traceback traceback.print_exc() box.label(text='Error (see console)', icon='ERROR') del prefs.layout row = layout.row() - row.label("End of Pie Menu Activations") + row.label(text="End of Advanced Object Panels Activations", + icon="FILE_PARENT") for mod in sub_modules: @@ -219,10 +274,10 @@ for mod in sub_modules: return update prop = BoolProperty( - name=info['name'], - description=info.get('description', ''), - update=gen_update(mod), - ) + name=info['name'], + description=info.get('description', ''), + update=gen_update(mod), + ) setattr(PieToolsPreferences, 'use_' + mod_name, prop) prop = BoolProperty() setattr(PieToolsPreferences, 'show_expanded_' + mod_name, prop) @@ -253,5 +308,6 @@ def unregister(): for cls in reversed(classes): bpy.utils.unregister_class(cls) + if __name__ == "__main__": register() diff --git a/space_view3d_pie_menus/pie_align_menu.py b/space_view3d_pie_menus/pie_align_menu.py index 94b0e1cf..c77b9253 100644 --- a/space_view3d_pie_menus/pie_align_menu.py +++ b/space_view3d_pie_menus/pie_align_menu.py @@ -21,8 +21,8 @@ bl_info = { "name": "Hotkey: 'Alt X'", "description": "V/E/F Align tools", - # "author": "pitiwazou, meta-androcto", - # "version": (0, 1, 0), + "author": "pitiwazou, meta-androcto", + "version": (0, 1, 1), "blender": (2, 77, 0), "location": "Mesh Edit Mode", "warning": "", @@ -35,11 +35,10 @@ from bpy.types import ( Menu, Operator, ) +from bpy.props import EnumProperty # Pie Align - Alt + X - - class PieAlign(Menu): bl_idname = "pie.align" bl_label = "Pie Align" @@ -54,32 +53,46 @@ class PieAlign(Menu): # 2 - BOTTOM pie.operator("align.y", text="Align Y", icon='PLUS') # 8 - TOP - pie.operator("align.2y0", text="Align To Y-0") + pie.operator("align.2xyz", text="Align To Y-0").axis = '1' # 7 - TOP - LEFT - pie.operator("align.2x0", text="Align To X-0") + pie.operator("align.2xyz", text="Align To X-0").axis = '0' # 9 - TOP - RIGHT - pie.operator("align.2z0", text="Align To Z-0") + pie.operator("align.2xyz", text="Align To Z-0").axis = '2' # 1 - BOTTOM - LEFT pie.separator() # 3 - BOTTOM - RIGHT # pie.menu("align.xyz") box = pie.split().box().column() + row = box.row(align=True) row.label("X") - row.operator("alignx.left", text="Neg") - row.operator("alignx.right", text="Pos") + align_1 = row.operator("alignxyz.all", text="Neg") + align_1.axis = '0' + align_1.side = 'NEGATIVE' + align_2 = row.operator("alignxyz.all", text="Pos") + align_2.axis = '0' + align_2.side = 'POSITIVE' + row = box.row(align=True) row.label("Y") - row.operator("aligny.front", text="Neg") - row.operator("aligny.back", text="Pos") + align_3 = row.operator("alignxyz.all", text="Neg") + align_3.axis = '1' + align_3.side = 'NEGATIVE' + align_4 = row.operator("alignxyz.all", text="Pos") + align_4.axis = '1' + align_4.side = 'POSITIVE' + row = box.row(align=True) row.label("Z") - row.operator("alignz.bottom", text="Neg") - row.operator("alignz.top", text="Pos") - -# Align X + align_5 = row.operator("alignxyz.all", text="Neg") + align_5.axis = '2' + align_5.side = 'NEGATIVE' + align_6 = row.operator("alignxyz.all", text="Pos") + align_6.axis = '2' + align_6.side = 'POSITIVE' +# Align X class AlignX(Operator): bl_idname = "align.x" bl_label = "Align X" @@ -89,13 +102,17 @@ class AlignX(Operator): def execute(self, context): for vert in bpy.context.object.data.vertices: - bpy.ops.transform.resize(value=(0, 1, 1), constraint_axis=(True, False, False), constraint_orientation='GLOBAL', - mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1) + bpy.ops.transform.resize( + value=(0, 1, 1), constraint_axis=(True, False, False), + constraint_orientation='GLOBAL', + mirror=False, proportional='DISABLED', + proportional_edit_falloff='SMOOTH', + proportional_size=1 + ) return {'FINISHED'} -# Align Y - +# Align Y class AlignY(Operator): bl_idname = "align.y" bl_label = "Align Y" @@ -105,13 +122,17 @@ class AlignY(Operator): def execute(self, context): for vert in bpy.context.object.data.vertices: - bpy.ops.transform.resize(value=(1, 0, 1), constraint_axis=(False, True, False), constraint_orientation='GLOBAL', - mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1) + bpy.ops.transform.resize( + value=(1, 0, 1), constraint_axis=(False, True, False), + constraint_orientation='GLOBAL', + mirror=False, proportional='DISABLED', + proportional_edit_falloff='SMOOTH', + proportional_size=1 + ) return {'FINISHED'} -# Align Z - +# Align Z class AlignZ(Operator): bl_idname = "align.z" bl_label = "Align Z" @@ -121,267 +142,122 @@ class AlignZ(Operator): def execute(self, context): for vert in bpy.context.object.data.vertices: - bpy.ops.transform.resize(value=(1, 1, 0), constraint_axis=(False, False, True), constraint_orientation='GLOBAL', - mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1) - return {'FINISHED'} + bpy.ops.transform.resize( + value=(1, 1, 0), constraint_axis=(False, False, True), + constraint_orientation='GLOBAL', + mirror=False, proportional='DISABLED', + proportional_edit_falloff='SMOOTH', + proportional_size=1 + ) -##################### -# Align To 0 # -##################### - -# Align to X - 0 - - -class AlignToX0(Operator): - bl_idname = "align.2x0" - bl_label = "Align To X = 0" - bl_description = "Align Selected To Location X = 0" - bl_options = {'REGISTER', 'UNDO'} - - def execute(self, context): - bpy.ops.object.mode_set(mode='OBJECT') - - for vert in bpy.context.object.data.vertices: - if vert.select: - vert.co[0] = 0 - bpy.ops.object.editmode_toggle() return {'FINISHED'} -# Align to Z - 0 +# ################# # +# Align To 0 # +# ################# # -class AlignToY0(Operator): - bl_idname = "align.2y0" - bl_label = "Align To Y = 0" - bl_description = "Align Selected To Location Y = 0" +class AlignToXYZ0(Operator): + bl_idname = "align.2xyz" + bl_label = "Align To X, Y or Z = 0" + bl_description = "Align Active Object To a chosen X, Y or Z equals 0 Location" bl_options = {'REGISTER', 'UNDO'} - def execute(self, context): - bpy.ops.object.mode_set(mode='OBJECT') - - for vert in bpy.context.object.data.vertices: - if vert.select: - vert.co[1] = 0 - bpy.ops.object.editmode_toggle() - return {'FINISHED'} - -# Align to Z - 0 - - -class AlignToZ0(Operator): - bl_idname = "align.2z0" - bl_label = "Align To Z = 0" - bl_description = "Align Selected To Location Z = 0" - bl_options = {'REGISTER', 'UNDO'} + axis = EnumProperty( + name="Axis", + items=[ + ('0', "X", "X Axis"), + ('1', "Y", "Y Axis"), + ('2', "Z", "Z Axis") + ], + description="Choose an axis for alignment", + default='0' + ) + + @classmethod + def poll(cls, context): + obj = context.active_object + return obj and obj.type == "MESH" def execute(self, context): bpy.ops.object.mode_set(mode='OBJECT') - + align = int(self.axis) for vert in bpy.context.object.data.vertices: if vert.select: - vert.co[2] = 0 + vert.co[align] = 0 bpy.ops.object.editmode_toggle() - return {'FINISHED'} - -# Align X Left - - -class AlignXLeft(Operator): - bl_idname = "alignx.left" - bl_label = "Align X Left" - bl_options = {'REGISTER', 'UNDO'} - - def execute(self, context): - - bpy.ops.object.mode_set(mode='OBJECT') - count = 0 - axe = 0 - for vert in bpy.context.object.data.vertices: - if vert.select: - if count == 0: - max = vert.co[axe] - count += 1 - continue - count += 1 - if vert.co[axe] < max: - max = vert.co[axe] - - bpy.ops.object.mode_set(mode='OBJECT') - for vert in bpy.context.object.data.vertices: - if vert.select: - vert.co[axe] = max - bpy.ops.object.mode_set(mode='EDIT') return {'FINISHED'} -# Align X Right - - -class AlignXRight(Operator): - bl_idname = "alignx.right" - bl_label = "Align X Right" - - def execute(self, context): - - bpy.ops.object.mode_set(mode='OBJECT') - count = 0 - axe = 0 - for vert in bpy.context.object.data.vertices: - if vert.select: - if count == 0: - max = vert.co[axe] - count += 1 - continue - count += 1 - if vert.co[axe] > max: - max = vert.co[axe] - - bpy.ops.object.mode_set(mode='OBJECT') - for vert in bpy.context.object.data.vertices: - if vert.select: - vert.co[axe] = max - bpy.ops.object.mode_set(mode='EDIT') - return {'FINISHED'} - -# Align Y Back - - -class AlignYBack(Operator): - bl_idname = "aligny.back" - bl_label = "Align Y back" +# Align X Left +class AlignXYZAll(Operator): + bl_idname = "alignxyz.all" + bl_label = "Align to Front/Back Axis" + bl_description = "Align to a Front or Back along the chosen Axis" bl_options = {'REGISTER', 'UNDO'} - def execute(self, context): - - bpy.ops.object.mode_set(mode='OBJECT') - count = 0 - axe = 1 - for vert in bpy.context.object.data.vertices: - if vert.select: - if count == 0: - max = vert.co[axe] - count += 1 - continue - count += 1 - if vert.co[axe] > max: - max = vert.co[axe] - - bpy.ops.object.mode_set(mode='OBJECT') - - for vert in bpy.context.object.data.vertices: - if vert.select: - vert.co[axe] = max - bpy.ops.object.mode_set(mode='EDIT') - return {'FINISHED'} - -# Align Y Front - - -class AlignYFront(Operator): - bl_idname = "aligny.front" - bl_label = "Align Y Front" - bl_options = {'REGISTER', 'UNDO'} + axis = EnumProperty( + name="Axis", + items=[ + ('0', "X", "X Axis"), + ('1', "Y", "Y Axis"), + ('2', "Z", "Z Axis") + ], + description="Choose an axis for alignment", + default='0' + ) + side = EnumProperty( + name="Side", + items=[ + ('POSITIVE', "Front", "Align on the positive chosen axis"), + ('NEGATIVE', "Back", "Align acriss the negative chosen axis"), + ], + description="Choose a side for alignment", + default='POSITIVE' + ) + + @classmethod + def poll(cls, context): + obj = context.active_object + return obj and obj.type == "MESH" def execute(self, context): bpy.ops.object.mode_set(mode='OBJECT') count = 0 - axe = 1 + axe = int(self.axis) for vert in bpy.context.object.data.vertices: if vert.select: if count == 0: - max = vert.co[axe] + maxv = vert.co[axe] count += 1 continue count += 1 - if vert.co[axe] < max: - max = vert.co[axe] + if self.side == 'POSITIVE': + if vert.co[axe] > maxv: + maxv = vert.co[axe] + else: + if vert.co[axe] < maxv: + maxv = vert.co[axe] bpy.ops.object.mode_set(mode='OBJECT') for vert in bpy.context.object.data.vertices: if vert.select: - vert.co[axe] = max + vert.co[axe] = maxv bpy.ops.object.mode_set(mode='EDIT') - return {'FINISHED'} - -# Align Z Top - - -class AlignZTop(Operator): - bl_idname = "alignz.top" - bl_label = "Align Z Top" - bl_options = {'REGISTER', 'UNDO'} - - def execute(self, context): - - bpy.ops.object.mode_set(mode='OBJECT') - count = 0 - axe = 2 - for vert in bpy.context.object.data.vertices: - if vert.select: - if count == 0: - max = vert.co[axe] - count += 1 - continue - count += 1 - if vert.co[axe] > max: - max = vert.co[axe] - bpy.ops.object.mode_set(mode='OBJECT') - - for vert in bpy.context.object.data.vertices: - if vert.select: - vert.co[axe] = max - bpy.ops.object.mode_set(mode='EDIT') return {'FINISHED'} -# Align Z Bottom - - -class AlignZBottom(Operator): - bl_idname = "alignz.bottom" - bl_label = "Align Z Bottom" - bl_options = {'REGISTER', 'UNDO'} - - def execute(self, context): - - bpy.ops.object.mode_set(mode='OBJECT') - count = 0 - axe = 2 - for vert in bpy.context.object.data.vertices: - if vert.select: - if count == 0: - max = vert.co[axe] - count += 1 - continue - count += 1 - if vert.co[axe] < max: - max = vert.co[axe] - - bpy.ops.object.mode_set(mode='OBJECT') - - for vert in bpy.context.object.data.vertices: - if vert.select: - vert.co[axe] = max - bpy.ops.object.mode_set(mode='EDIT') - return {'FINISHED'} classes = ( PieAlign, AlignX, AlignY, AlignZ, - AlignToX0, - AlignToY0, - AlignToZ0, - AlignXLeft, - AlignXRight, - AlignYBack, - AlignYFront, - AlignZTop, - AlignZBottom, + AlignToXYZ0, + AlignXYZAll, ) addon_keymaps = [] @@ -390,29 +266,27 @@ addon_keymaps = [] def register(): for cls in classes: bpy.utils.register_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager if wm.keyconfigs.addon: # Align km = wm.keyconfigs.addon.keymaps.new(name='Mesh') kmi = km.keymap_items.new('wm.call_menu_pie', 'X', 'PRESS', alt=True) kmi.properties.name = "pie.align" -# kmi.active = True addon_keymaps.append((km, kmi)) def unregister(): for cls in classes: bpy.utils.unregister_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager kc = wm.keyconfigs.addon if kc: - km = kc.keymaps['Mesh'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "pie.align": - km.keymap_items.remove(kmi) + for km, kmi in addon_keymaps: + km.keymap_items.remove(kmi) + addon_keymaps.clear() + if __name__ == "__main__": register() diff --git a/space_view3d_pie_menus/pie_animation_menu.py b/space_view3d_pie_menus/pie_animation_menu.py index 7f7a3684..d65891f9 100644 --- a/space_view3d_pie_menus/pie_animation_menu.py +++ b/space_view3d_pie_menus/pie_animation_menu.py @@ -21,8 +21,8 @@ bl_info = { "name": "Hotkey: 'Alt A'", "description": "Pie menu for Timeline controls", - # "author": "pitiwazou, meta-androcto", - # "version": (0, 1, 0), + "author": "pitiwazou, meta-androcto", + "version": (0, 1, 1), "blender": (2, 77, 0), "location": "3D View", "warning": "", @@ -85,6 +85,7 @@ class InsertAutoKeyframe(Operator): return {'FINISHED'} + classes = ( PieAnimation, InsertAutoKeyframe @@ -96,29 +97,26 @@ addon_keymaps = [] def register(): for cls in classes: bpy.utils.register_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager if wm.keyconfigs.addon: # Animation km = wm.keyconfigs.addon.keymaps.new(name='Object Non-modal') kmi = km.keymap_items.new('wm.call_menu_pie', 'A', 'PRESS', alt=True) kmi.properties.name = "pie.animation" - # kmi.active = True addon_keymaps.append((km, kmi)) def unregister(): for cls in classes: bpy.utils.unregister_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager kc = wm.keyconfigs.addon if kc: - km = kc.keymaps['Object Non-modal'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "pie.animation": - km.keymap_items.remove(kmi) + for km, kmi in addon_keymaps: + km.keymap_items.remove(kmi) + addon_keymaps.clear() if __name__ == "__main__": diff --git a/space_view3d_pie_menus/pie_apply_transform_menu.py b/space_view3d_pie_menus/pie_apply_transform_menu.py index 802de3d6..7eb0a3a9 100644 --- a/space_view3d_pie_menus/pie_apply_transform_menu.py +++ b/space_view3d_pie_menus/pie_apply_transform_menu.py @@ -21,8 +21,8 @@ bl_info = { "name": "Hotkey: 'Ctrl A'", "description": "Apply Transform Menu", - # "author": "pitiwazou, meta-androcto", - # "version": (0, 1, 0), + "author": "pitiwazou, meta-androcto", + "version": (0, 1, 1), "blender": (2, 77, 0), "location": "3D View", "warning": "", @@ -35,10 +35,10 @@ from bpy.types import ( Menu, Operator, ) - -# Pie Apply Transforms - Ctrl + A +from bpy.props import EnumProperty +# Pie Apply Transforms - Ctrl + A class PieApplyTransforms(Menu): bl_idname = "pie.applytranforms" bl_label = "Pie Apply Transforms" @@ -53,58 +53,44 @@ class PieApplyTransforms(Menu): # 2 - BOTTOM pie.operator("object.duplicates_make_real", text="Make Duplicates Real") # 8 - TOP - pie.operator("apply.transformrotation", text="Rotation", icon='MAN_ROT') + pie.operator("apply.transformlocrotscale", text="Rotation", icon='MAN_ROT').option = 'ROT' # 7 - TOP - LEFT - pie.operator("apply.transformlocation", text="Location", icon='MAN_TRANS') + pie.operator("apply.transformlocrotscale", text="Location", icon='MAN_ROT').option = 'LOC' # 9 - TOP - RIGHT - pie.operator("apply.transformscale", text="Scale", icon='MAN_SCALE') + pie.operator("apply.transformlocrotscale", text="Scale", icon='MAN_ROT').option = 'SCALE' # 1 - BOTTOM - LEFT pie.operator("object.visual_transform_apply", text="Visual Transforms") # 3 - BOTTOM - RIGHT pie.menu("clear.menu", text="Clear Transform Menu") -# Apply Transforms - - -class ApplyTransformLocation(Operator): - bl_idname = "apply.transformlocation" - bl_label = "Apply Transform Location" - bl_description = "Apply Transform Location" - bl_options = {'REGISTER', 'UNDO'} - - def execute(self, context): - bpy.ops.object.transform_apply(location=True, rotation=False, scale=False) - return {'FINISHED'} # Apply Transforms - - -class ApplyTransformRotation(Operator): - bl_idname = "apply.transformrotation" - bl_label = "Apply Transform Rotation" - bl_description = "Apply Transform Rotation" +class ApplyTransLocRotPie(Operator): + bl_idname = "apply.transformlocrotscale" + bl_label = "Apply Transforms" + bl_description = "Apply Transform: Location, Rotation or Scale" bl_options = {'REGISTER', 'UNDO'} - def execute(self, context): - bpy.ops.object.transform_apply(location=False, rotation=True, scale=False) - return {'FINISHED'} - -# Apply Transforms - - -class ApplyTransformScale(Operator): - bl_idname = "apply.transformscale" - bl_label = "Apply Transform Scale" - bl_description = "Apply Transform Scale" - bl_options = {'REGISTER', 'UNDO'} + option = EnumProperty( + name="Type", + items=[ + ("LOC", "Location", "Apply Location"), + ("ROT", "Rotation", "Apply Rotation"), + ("SCALE", "Scale", "Apply Scale") + ], + default="LOC", + ) def execute(self, context): - bpy.ops.object.transform_apply(location=False, rotation=False, scale=True) + loc = True if self.option == "LOC" else False + rot = True if self.option == "ROT" else False + sca = True if self.option == "SCALE" else False + bpy.ops.object.transform_apply(location=loc, rotation=rot, scale=sca) + return {'FINISHED'} # Apply Transforms - class ApplyTransformAll(Operator): bl_idname = "apply.transformall" bl_label = "Apply All Transforms" @@ -115,9 +101,8 @@ class ApplyTransformAll(Operator): bpy.ops.object.transform_apply(location=True, rotation=True, scale=True) return {'FINISHED'} -# Clear Menu - +# Clear Menu class ClearMenu(Menu): bl_idname = "clear.menu" bl_label = "Clear Menu" @@ -129,9 +114,8 @@ class ClearMenu(Menu): layout.operator("object.scale_clear", text="Clear Scale", icon='MAN_SCALE') layout.operator("object.origin_clear", text="Clear Origin", icon='MANIPUL') -# Clear all - +# Clear all class ClearAll(Operator): bl_idname = "clear.all" bl_label = "Clear All" @@ -144,11 +128,10 @@ class ClearAll(Operator): bpy.ops.object.scale_clear() return {'FINISHED'} + classes = ( PieApplyTransforms, - ApplyTransformLocation, - ApplyTransformRotation, - ApplyTransformScale, + ApplyTransLocRotPie, ApplyTransformAll, ClearMenu, ClearAll, @@ -167,22 +150,20 @@ def register(): km = wm.keyconfigs.addon.keymaps.new(name='Object Mode') kmi = km.keymap_items.new('wm.call_menu_pie', 'A', 'PRESS', ctrl=True) kmi.properties.name = "pie.applytranforms" -# kmi.active = True addon_keymaps.append((km, kmi)) def unregister(): for cls in classes: bpy.utils.unregister_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager kc = wm.keyconfigs.addon if kc: - km = kc.keymaps['Object Mode'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "pie.applytranforms": - km.keymap_items.remove(kmi) + for km, kmi in addon_keymaps: + km.keymap_items.remove(kmi) + addon_keymaps.clear() + if __name__ == "__main__": register() diff --git a/space_view3d_pie_menus/pie_cursor.py b/space_view3d_pie_menus/pie_cursor.py index 195a07bf..568cdd6d 100644 --- a/space_view3d_pie_menus/pie_cursor.py +++ b/space_view3d_pie_menus/pie_cursor.py @@ -21,8 +21,8 @@ bl_info = { "name": "Hotkey: 'Shift S'", "description": "Cursor Menu", - # "author": "pitiwazou, meta-androcto", - # "version": (0, 1, 0), + "author": "pitiwazou, meta-androcto", + "version": (0, 1, 0), "blender": (2, 77, 0), "location": "3D View", "warning": "", @@ -36,23 +36,23 @@ from bpy.types import ( Operator, ) -# SnapCursSelToCenter1 thanks to Isaac Weaver (wisaac) D1963 - +# SnapCursSelToCenter1 thanks to Isaac Weaver (wisaac) D1963 class Snap_CursSelToCenter1(Operator): - """Snap 3D cursor and selected objects to the center \n"""\ - """Works only in Object Mode""" 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.mode == "OBJECT") + return (context.area.type == "VIEW_3D" and context.mode == "OBJECT") def execute(self, context): context.space_data.cursor_location = (0, 0, 0) for obj in context.selected_objects: obj.location = (0, 0, 0) + return {'FINISHED'} @@ -69,9 +69,10 @@ class Snap_CursorMenu(Menu): icon='CLIPUV_HLT').use_offset = False # 6 - RIGHT pie.operator("view3d.snap_selected_to_cursor", - text="Selection to Cursor (Offset)", icon='CURSOR').use_offset = True + text="Selection to Cursor (Offset)", icon='CURSOR').use_offset = True # 2 - BOTTOM - pie.operator("view3d.snap_cursor_selected_to_center1", text="Selected & Cursor to Center", icon='ALIGN') + pie.operator("view3d.snap_cursor_selected_to_center1", + text="Selected & Cursor to Center", icon='ALIGN') # 8 - TOP pie.operator("view3d.snap_cursor_to_center", text="Cursor to Center", icon='CLIPUV_DEHLT') # 7 - TOP - LEFT @@ -95,8 +96,8 @@ addon_keymaps = [] def register(): for cls in classes: bpy.utils.register_class(cls) - wm = bpy.context.window_manager + 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') @@ -108,15 +109,13 @@ def register(): def unregister(): for cls in classes: bpy.utils.unregister_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager kc = wm.keyconfigs.addon if kc: - km = kc.keymaps['3D View Generic'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "snap.cursormenu": - km.keymap_items.remove(kmi) + for km, kmi in addon_keymaps: + km.keymap_items.remove(kmi) + addon_keymaps.clear() if __name__ == "__main__": diff --git a/space_view3d_pie_menus/pie_delete_menu.py b/space_view3d_pie_menus/pie_delete_menu.py index f804c877..4a8e002c 100644 --- a/space_view3d_pie_menus/pie_delete_menu.py +++ b/space_view3d_pie_menus/pie_delete_menu.py @@ -21,8 +21,8 @@ bl_info = { "name": "Hotkey: 'X'", "description": "Edit mode V/E/F Delete Modes", - # "author": "pitiwazou, meta-androcto", - # "version": (0, 1, 0), + "author": "pitiwazou, meta-androcto", + "version": (0, 1, 0), "blender": (2, 77, 0), "location": "Mesh Edit Mode", "warning": "", @@ -31,14 +31,10 @@ bl_info = { } import bpy -from bpy.types import ( - Menu, - Operator, - ) - -# Pie Delete - X +from bpy.types import Menu +# Pie Delete - X class PieDelete(Menu): bl_idname = "pie.delete" bl_label = "Pie Delete" @@ -60,50 +56,48 @@ class PieDelete(Menu): pie.operator("mesh.dissolve_faces", text="Dissolve Faces", icon='SNAP_FACE') # 1 - BOTTOM - LEFT box = pie.split().column() - row = box.row(align=True) box.operator("mesh.dissolve_limited", text="Limited Dissolve", icon='STICKY_UVS_LOC') box.operator("mesh.delete_edgeloop", text="Delete Edge Loops", icon='BORDER_LASSO') box.operator("mesh.edge_collapse", text="Edge Collapse", icon='UV_EDGESEL') # 3 - BOTTOM - RIGHT box = pie.split().column() - row = box.row(align=True) box.operator("mesh.delete", text="Only Edge & Faces", icon='SPACE2').type = 'EDGE_FACE' box.operator("mesh.delete", text="Only Faces", icon='UV_FACESEL').type = 'ONLY_FACE' box.operator("mesh.remove_doubles", text="Remove Doubles", icon='ORTHO') + classes = ( PieDelete, ) + addon_keymaps = [] def register(): for cls in classes: bpy.utils.register_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager if wm.keyconfigs.addon: # Delete km = wm.keyconfigs.addon.keymaps.new(name='Mesh') kmi = km.keymap_items.new('wm.call_menu_pie', 'X', 'PRESS') kmi.properties.name = "pie.delete" -# kmi.active = True addon_keymaps.append((km, kmi)) def unregister(): for cls in classes: bpy.utils.unregister_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager kc = wm.keyconfigs.addon if kc: - km = kc.keymaps['Mesh'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "pie.delete": - km.keymap_items.remove(kmi) + for km, kmi in addon_keymaps: + km.keymap_items.remove(kmi) + addon_keymaps.clear() + if __name__ == "__main__": register() diff --git a/space_view3d_pie_menus/pie_editor_switch_menu.py b/space_view3d_pie_menus/pie_editor_switch_menu.py index 788b053d..67f40ff8 100644 --- a/space_view3d_pie_menus/pie_editor_switch_menu.py +++ b/space_view3d_pie_menus/pie_editor_switch_menu.py @@ -21,8 +21,8 @@ bl_info = { "name": "Hotkey: 'Ctrl Alt S ", "description": "Switch Editor Type Menu", - # "author": "saidenka", - # "version": (0, 1, 0), + "author": "saidenka", + "version": (0, 1, 0), "blender": (2, 77, 0), "location": "All Editors", "warning": "", @@ -69,19 +69,19 @@ class AreaPieEditor(Menu): layout = self.layout pie = layout.menu_pie() # 4 - LEFT - pie.operator(SetAreaType.bl_idname, text="Text Editor", icon="TEXT").type = "TEXT_EDITOR" + pie.operator(SetAreaType.bl_idname, text="Text Editor", icon="TEXT").types = "TEXT_EDITOR" # 6 - RIGHT pie.menu(AreaTypePieAnim.bl_idname, text="Animation Editors", icon="ACTION") # 2 - BOTTOM - pie.operator(SetAreaType.bl_idname, text="Property", icon="BUTS").type = "PROPERTIES" + pie.operator(SetAreaType.bl_idname, text="Property", icon="BUTS").types = "PROPERTIES" # 8 - TOP - pie.operator(SetAreaType.bl_idname, text="3D View", icon="MESH_CUBE").type = "VIEW_3D" + pie.operator(SetAreaType.bl_idname, text="3D View", icon="MESH_CUBE").types = "VIEW_3D" # 7 - TOP - LEFT - pie.operator(SetAreaType.bl_idname, text="UV/Image Editor", icon="IMAGE_COL").type = "IMAGE_EDITOR" + pie.operator(SetAreaType.bl_idname, text="UV/Image Editor", icon="IMAGE_COL").types = "IMAGE_EDITOR" # 9 - TOP - RIGHT - pie.operator(SetAreaType.bl_idname, text="Node Editor", icon="NODETREE").type = "NODE_EDITOR" + pie.operator(SetAreaType.bl_idname, text="Node Editor", icon="NODETREE").types = "NODE_EDITOR" # 1 - BOTTOM - LEFT - pie.operator(SetAreaType.bl_idname, text="Outliner", icon="OOPS").type = "OUTLINER" + pie.operator(SetAreaType.bl_idname, text="Outliner", icon="OOPS").types = "OUTLINER" # 3 - BOTTOM - RIGHT pie.menu(AreaTypePieOther.bl_idname, text="More Editors", icon="QUESTION") @@ -93,17 +93,17 @@ class AreaTypePieOther(Menu): def draw(self, context): # 4 - LEFT - self.layout.operator(SetAreaType.bl_idname, text="Logic Editor", icon="LOGIC").type = "LOGIC_EDITOR" + self.layout.operator(SetAreaType.bl_idname, text="Logic Editor", icon="LOGIC").types = "LOGIC_EDITOR" # 6 - RIGHT - self.layout.operator(SetAreaType.bl_idname, text="File Browser", icon="FILESEL").type = "FILE_BROWSER" + self.layout.operator(SetAreaType.bl_idname, text="File Browser", icon="FILESEL").types = "FILE_BROWSER" # 2 - BOTTOM - self.layout.operator(SetAreaType.bl_idname, text="Python Console", icon="CONSOLE").type = "CONSOLE" + self.layout.operator(SetAreaType.bl_idname, text="Python Console", icon="CONSOLE").types = "CONSOLE" # 8 - TOP # 7 - TOP - LEFT - self.layout.operator(SetAreaType.bl_idname, text="User Setting", - icon="PREFERENCES").type = "USER_PREFERENCES" + self.layout.operator(SetAreaType.bl_idname, text="User Preferences", + icon="PREFERENCES").types = "USER_PREFERENCES" # 9 - TOP - RIGHT - self.layout.operator(SetAreaType.bl_idname, text="Info", icon="INFO").type = "INFO" + self.layout.operator(SetAreaType.bl_idname, text="Info", icon="INFO").types = "INFO" # 1 - BOTTOM - LEFT # 3 - BOTTOM - RIGHT @@ -114,33 +114,33 @@ class SetAreaType(Operator): bl_description = "Change Editor Type" bl_options = {'REGISTER'} - type = StringProperty(name="Area Type") + types = StringProperty(name="Area Type") def execute(self, context): - context.area.type = self.type + context.area.type = self.types return {'FINISHED'} class AreaTypePieAnim(Menu): bl_idname = "INFO_MT_window_pie_area_type_anim" bl_label = "Editor Type (Animation)" - bl_description = "Is pie menu change editor type (animation related)" + bl_description = "Menu for changing editor type (animation related)" def draw(self, context): # 4 - LEFT - self.layout.operator(SetAreaType.bl_idname, text="NLA Editor", icon="NLA").type = "NLA_EDITOR" + self.layout.operator(SetAreaType.bl_idname, text="NLA Editor", icon="NLA").types = "NLA_EDITOR" # 6 - RIGHT - self.layout.operator(SetAreaType.bl_idname, text="DopeSheet", icon="ACTION").type = "DOPESHEET_EDITOR" + self.layout.operator(SetAreaType.bl_idname, text="DopeSheet", icon="ACTION").types = "DOPESHEET_EDITOR" # 2 - BOTTOM - self.layout.operator(SetAreaType.bl_idname, text="Graph Editor", icon="IPO").type = "GRAPH_EDITOR" + self.layout.operator(SetAreaType.bl_idname, text="Graph Editor", icon="IPO").types = "GRAPH_EDITOR" # 8 - TOP - self.layout.operator(SetAreaType.bl_idname, text="Timeline", icon="TIME").type = "TIMELINE" + self.layout.operator(SetAreaType.bl_idname, text="Timeline", icon="TIME").types = "TIMELINE" # 7 - TOP - LEFT self.layout.operator(SetAreaType.bl_idname, - text="Video Sequence Editor", icon="SEQUENCE").type = "SEQUENCE_EDITOR" + text="Video Sequence Editor", icon="SEQUENCE").types = "SEQUENCE_EDITOR" # 9 - TOP - RIGHT self.layout.operator(SetAreaType.bl_idname, - text="Video Clip Editor", icon="RENDER_ANIMATION").type = "CLIP_EDITOR" + text="Video Clip Editor", icon="RENDER_ANIMATION").types = "CLIP_EDITOR" # 1 - BOTTOM - LEFT self.layout.operator("wm.call_menu_pie", text="Back", icon="BACK").name = AreaPieEditor.bl_idname # 3 - BOTTOM - RIGHT @@ -161,29 +161,26 @@ addon_keymaps = [] def register(): for cls in classes: bpy.utils.register_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager if wm.keyconfigs.addon: # Snapping km = wm.keyconfigs.addon.keymaps.new(name='Window') kmi = km.keymap_items.new('wm.call_menu_pie', 'S', 'PRESS', ctrl=True, alt=True) kmi.properties.name = "pie.editor" -# kmi.active = True addon_keymaps.append((km, kmi)) def unregister(): for cls in classes: bpy.utils.unregister_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager kc = wm.keyconfigs.addon if kc: - km = kc.keymaps['Window'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "wm.area_type_pie_operator": - km.keymap_items.remove(kmi) + for km, kmi in addon_keymaps: + km.keymap_items.remove(kmi) + addon_keymaps.clear() if __name__ == "__main__": diff --git a/space_view3d_pie_menus/pie_manipulator_menu.py b/space_view3d_pie_menus/pie_manipulator_menu.py index 2e3de4cf..2690c094 100644 --- a/space_view3d_pie_menus/pie_manipulator_menu.py +++ b/space_view3d_pie_menus/pie_manipulator_menu.py @@ -21,8 +21,8 @@ bl_info = { "name": "Hotkey: 'Ctrl Space'", "description": "Extended Manipulator Menu", - # "author": "pitiwazou, meta-androcto", - # "version": (0, 1, 0), + "author": "pitiwazou, meta-androcto", + "version": (0, 1, 1), "blender": (2, 77, 0), "location": "3D View", "warning": "", @@ -44,7 +44,7 @@ class ManipTranslate(Operator): bl_description = " Show Translate" def execute(self, context): - if context.space_data.show_manipulator == False: + if context.space_data.show_manipulator is False: context.space_data.show_manipulator = True context.space_data.transform_manipulators = {'TRANSLATE'} if context.space_data.transform_manipulators != {'TRANSLATE'}: @@ -59,7 +59,7 @@ class ManipRotate(Operator): bl_description = " Show Rotate" def execute(self, context): - if context.space_data.show_manipulator == False: + if context.space_data.show_manipulator is False: context.space_data.show_manipulator = True context.space_data.transform_manipulators = {'ROTATE'} if context.space_data.transform_manipulators != {'ROTATE'}: @@ -74,7 +74,7 @@ class ManipScale(Operator): bl_description = " Show Scale" def execute(self, context): - if context.space_data.show_manipulator == False: + if context.space_data.show_manipulator is False: context.space_data.show_manipulator = True context.space_data.transform_manipulators = {'SCALE'} if context.space_data.transform_manipulators != {'SCALE'}: @@ -89,7 +89,7 @@ class TranslateRotate(Operator): bl_description = " Show Translate/Rotate" def execute(self, context): - if context.space_data.show_manipulator == False: + if context.space_data.show_manipulator is False: context.space_data.show_manipulator = True context.space_data.transform_manipulators = {'TRANSLATE', 'ROTATE'} if context.space_data.transform_manipulators != {'TRANSLATE', 'ROTATE'}: @@ -104,7 +104,7 @@ class TranslateScale(Operator): bl_description = " Show Translate/Scale" def execute(self, context): - if context.space_data.show_manipulator == False: + if context.space_data.show_manipulator is False: context.space_data.show_manipulator = True context.space_data.transform_manipulators = {'TRANSLATE', 'SCALE'} if context.space_data.transform_manipulators != {'TRANSLATE', 'SCALE'}: @@ -119,7 +119,7 @@ class RotateScale(Operator): bl_description = " Show Rotate/Scale" def execute(self, context): - if context.space_data.show_manipulator == False: + if context.space_data.show_manipulator is False: context.space_data.show_manipulator = True context.space_data.transform_manipulators = {'ROTATE', 'SCALE'} if context.space_data.transform_manipulators != {'ROTATE', 'SCALE'}: @@ -134,7 +134,7 @@ class TranslateRotateScale(Operator): bl_description = "Show All" def execute(self, context): - if context.space_data.show_manipulator == False: + if context.space_data.show_manipulator is False: context.space_data.show_manipulator = True context.space_data.transform_manipulators = {'TRANSLATE', 'ROTATE', 'SCALE'} if context.space_data.transform_manipulators != {'TRANSLATE', 'ROTATE', 'SCALE'}: @@ -150,17 +150,16 @@ class WManupulators(Operator): def execute(self, context): - if context.space_data.show_manipulator == True: + if context.space_data.show_manipulator is True: context.space_data.show_manipulator = False - elif context.space_data.show_manipulator == False: + elif context.space_data.show_manipulator is False: context.space_data.show_manipulator = True return {'FINISHED'} -# Pie Manipulators - Ctrl + Space - +# Pie Manipulators - Ctrl + Space class PieManipulator(Menu): bl_idname = "pie.manipulator" bl_label = "Pie Manipulator" @@ -185,7 +184,6 @@ class PieManipulator(Menu): # 3 - BOTTOM - RIGHT pie.operator("manip.scale", text="Scale", icon='MAN_SCALE') -# Pie Snapping - Shift + Tab classes = ( PieManipulator, @@ -205,29 +203,27 @@ addon_keymaps = [] def register(): for cls in classes: bpy.utils.register_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager if wm.keyconfigs.addon: # Manipulators km = wm.keyconfigs.addon.keymaps.new(name='3D View Generic', space_type='VIEW_3D') kmi = km.keymap_items.new('wm.call_menu_pie', 'SPACE', 'PRESS', ctrl=True) kmi.properties.name = "pie.manipulator" -# kmi.active = True addon_keymaps.append((km, kmi)) def unregister(): for cls in classes: bpy.utils.unregister_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager kc = wm.keyconfigs.addon if kc: - km = kc.keymaps['3D View Generic'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "pie.manipulator": - km.keymap_items.remove(kmi) + for km, kmi in addon_keymaps: + km.keymap_items.remove(kmi) + addon_keymaps.clear() + if __name__ == "__main__": register() diff --git a/space_view3d_pie_menus/pie_modes_menu.py b/space_view3d_pie_menus/pie_modes_menu.py index 347c61d9..356d6e18 100644 --- a/space_view3d_pie_menus/pie_modes_menu.py +++ b/space_view3d_pie_menus/pie_modes_menu.py @@ -21,8 +21,8 @@ bl_info = { "name": "Hotkey: 'Tab'", "description": "Switch between 3d view object/edit modes", - # "author": "pitiwazou, meta-androcto, italic", - # "version": (0, 1, 0), + "author": "pitiwazou, meta-androcto, italic", + "version": (0, 1, 1), "blender": (2, 77, 0), "location": "3D View", "warning": "", @@ -252,7 +252,8 @@ class PieInteractiveModeGreasePencil(Operator): try: bpy.ops.gpencil.editmode_toggle() except: - self.report({'WARNING'}, "It is not possible to enter into the interactive mode") + self.report({'WARNING'}, + "It is not possible to enter into the interactive mode") return {'FINISHED'} @@ -453,14 +454,13 @@ addon_keymaps = [] def register(): for cls in classes: bpy.utils.register_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager if wm.keyconfigs.addon: # Select Mode km = wm.keyconfigs.addon.keymaps.new(name='Object Non-modal') kmi = km.keymap_items.new('wm.call_menu_pie', 'TAB', 'PRESS') kmi.properties.name = "pie.objecteditmode" - # kmi.active = True addon_keymaps.append((km, kmi)) km = wm.keyconfigs.addon.keymaps.new(name='Grease Pencil Stroke Edit Mode') @@ -472,21 +472,13 @@ def register(): def unregister(): for cls in classes: bpy.utils.unregister_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager kc = wm.keyconfigs.addon if kc: - km = kc.keymaps['Object Non-modal'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "pie.objecteditmode": - km.keymap_items.remove(kmi) - - km = kc.keymaps['Grease Pencil Stroke Edit Mode'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "pie.objecteditmode": - km.keymap_items.remove(kmi) + for km, kmi in addon_keymaps: + km.keymap_items.remove(kmi) + addon_keymaps.clear() if __name__ == "__main__": diff --git a/space_view3d_pie_menus/pie_orientation_menu.py b/space_view3d_pie_menus/pie_orientation_menu.py index 17c13a5c..a9de9fa6 100644 --- a/space_view3d_pie_menus/pie_orientation_menu.py +++ b/space_view3d_pie_menus/pie_orientation_menu.py @@ -22,8 +22,8 @@ bl_info = { "name": "Hotkey: 'Alt + Spacebar'", - # "author": "Italic_", - # "version": (1, 1, 0), + "author": "Italic_", + "version": (1, 1, 0), "blender": (2, 77, 0), "description": "Set Transform Orientations", "location": "3D View", @@ -38,12 +38,13 @@ from bpy.props import ( StringProperty, ) + class OrientPoll(Operator): bl_idname = "pie.orientation" bl_label = "Orientation Poll" bl_options = {'INTERNAL'} - space = bpy.props.StringProperty() + space = StringProperty() @classmethod def poll(cls, context): @@ -89,13 +90,11 @@ def register(): bpy.utils.register_class(cls) wm = bpy.context.window_manager - if wm.keyconfigs.addon: # Manipulators km = wm.keyconfigs.addon.keymaps.new(name='3D View Generic', space_type='VIEW_3D') kmi = km.keymap_items.new('wm.call_menu_pie', 'SPACE', 'PRESS', alt=True) kmi.properties.name = "pie.orient" -# kmi.active = True addon_keymaps.append((km, kmi)) @@ -106,11 +105,9 @@ def unregister(): wm = bpy.context.window_manager kc = wm.keyconfigs.addon if kc: - km = kc.keymaps['3D View Generic'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "pie.orient": - km.keymap_items.remove(kmi) + for km, kmi in addon_keymaps: + km.keymap_items.remove(kmi) + addon_keymaps.clear() if __name__ == "__main__": diff --git a/space_view3d_pie_menus/pie_origin.py b/space_view3d_pie_menus/pie_origin.py index f30acf85..84344d7e 100644 --- a/space_view3d_pie_menus/pie_origin.py +++ b/space_view3d_pie_menus/pie_origin.py @@ -21,8 +21,8 @@ bl_info = { "name": "Hotkey: 'Alt Shift O'", "description": "Origin Snap/Place Menu", - # "author": "pitiwazou, meta-androcto", - # "version": (0, 1, 0), + "author": "pitiwazou, meta-androcto", + "version": (0, 1, 1), "blender": (2, 77, 0), "location": "3D View", "warning": "", @@ -38,33 +38,40 @@ from bpy.types import ( # Pivot to selection - - class PivotToSelection(Operator): bl_idname = "object.pivot2selection" bl_label = "Pivot To Selection" bl_description = "Pivot Point To Selection" bl_options = {'REGISTER', 'UNDO'} + @classmethod + def poll(cls, context): + return context.active_object is not None + def execute(self, context): saved_location = context.scene.cursor_location.copy() bpy.ops.view3d.snap_cursor_to_selected() bpy.ops.object.mode_set(mode='OBJECT') bpy.ops.object.origin_set(type='ORIGIN_CURSOR') context.scene.cursor_location = saved_location - return {'FINISHED'} -# Pivot to Bottom + return {'FINISHED'} +# Pivot to Bottom class PivotBottom(Operator): bl_idname = "object.pivotobottom" bl_label = "Pivot To Bottom" - bl_description = "Set the Pivot Point To Lowest Point" + bl_description = ("Set the Pivot Point To Lowest Point\n" + "Needs an Active Object of the Mesh type") bl_options = {'REGISTER', 'UNDO'} - def execute(self, context): + @classmethod + def poll(cls, context): + obj = context.active_object + return obj is not None and obj.type == "MESH" + def execute(self, context): bpy.ops.object.mode_set(mode='OBJECT') bpy.ops.object.transform_apply(location=True, rotation=True, scale=True) bpy.ops.object.origin_set(type='ORIGIN_GEOMETRY') @@ -82,11 +89,11 @@ class PivotBottom(Operator): o.location.z += a bpy.ops.object.mode_set(mode='EDIT') - return {'FINISHED'} -# Pie Origin/Pivot - Shift + S + return {'FINISHED'} +# Pie Origin/Pivot - Shift + S class PieOriginPivot(Menu): bl_idname = "origin.pivotmenu" bl_label = "Origin Menu" @@ -100,28 +107,37 @@ class PieOriginPivot(Menu): pie.operator("object.origin_set", text="Origin to Center of Mass", icon='BBOX').type = 'ORIGIN_CENTER_OF_MASS' # 6 - RIGHT - pie.operator("object.origin_set", text="Origin To 3D Cursor", icon='CURSOR').type = 'ORIGIN_CURSOR' + pie.operator("object.origin_set", text="Origin To 3D Cursor", + icon='CURSOR').type = 'ORIGIN_CURSOR' # 2 - BOTTOM - pie.operator("object.pivotobottom", text="Origin to Bottom", icon='TRIA_DOWN') + pie.operator("object.pivotobottom", text="Origin to Bottom", + icon='TRIA_DOWN') # 8 - TOP - pie.operator("object.pivot2selection", text="Origin To Selection", icon='SNAP_INCREMENT') + pie.operator("object.pivot2selection", text="Origin To Selection", + icon='SNAP_INCREMENT') # 7 - TOP - LEFT - pie.operator("object.origin_set", text="Geometry To Origin", icon='BBOX').type = 'GEOMETRY_ORIGIN' + pie.operator("object.origin_set", text="Geometry To Origin", + icon='BBOX').type = 'GEOMETRY_ORIGIN' # 9 - TOP - RIGHT - pie.operator("object.origin_set", text="Origin To Geometry", icon='ROTATE').type = 'ORIGIN_GEOMETRY' + pie.operator("object.origin_set", text="Origin To Geometry", + icon='ROTATE').type = 'ORIGIN_GEOMETRY' else: # 4 - LEFT pie.operator("object.origin_set", text="Origin to Center of Mass", icon='BBOX').type = 'ORIGIN_CENTER_OF_MASS' # 6 - RIGHT - pie.operator("object.origin_set", text="Origin To 3D Cursor", icon='CURSOR').type = 'ORIGIN_CURSOR' + pie.operator("object.origin_set", text="Origin To 3D Cursor", + icon='CURSOR').type = 'ORIGIN_CURSOR' # 2 - BOTTOM - pie.operator("object.pivot2selection", text="Origin To Selection", icon='SNAP_INCREMENT') + pie.operator("object.pivot2selection", text="Origin To Selection", + icon='SNAP_INCREMENT') # 8 - TOP - pie.operator("object.origin_set", text="Origin To Geometry", icon='ROTATE').type = 'ORIGIN_GEOMETRY' + pie.operator("object.origin_set", text="Origin To Geometry", + icon='ROTATE').type = 'ORIGIN_GEOMETRY' # 7 - TOP - LEFT - pie.operator("object.origin_set", text="Geometry To Origin", icon='BBOX').type = 'GEOMETRY_ORIGIN' + pie.operator("object.origin_set", text="Geometry To Origin", + icon='BBOX').type = 'GEOMETRY_ORIGIN' classes = ( @@ -136,29 +152,26 @@ addon_keymaps = [] def register(): for cls in classes: bpy.utils.register_class(cls) - wm = bpy.context.window_manager + 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', 'O', 'PRESS', shift=True, alt=True) kmi.properties.name = "origin.pivotmenu" -# kmi.active = True addon_keymaps.append((km, kmi)) def unregister(): for cls in classes: bpy.utils.unregister_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager kc = wm.keyconfigs.addon if kc: - km = kc.keymaps['3D View Generic'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "origin.pivotmenu": - km.keymap_items.remove(kmi) + for km, kmi in addon_keymaps: + km.keymap_items.remove(kmi) + addon_keymaps.clear() if __name__ == "__main__": diff --git a/space_view3d_pie_menus/pie_origin_cursor.py b/space_view3d_pie_menus/pie_origin_cursor.py deleted file mode 100644 index 553c8a9b..00000000 --- a/space_view3d_pie_menus/pie_origin_cursor.py +++ /dev/null @@ -1,225 +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 & Origin Snap/Place Menu", - # "author": "pitiwazou, meta-androcto", - # "version": (0, 1, 0), - "blender": (2, 77, 0), - "location": "3D View", - "warning": "", - "wiki_url": "", - "category": "Cursor/Origin Pie" - } - -import bpy -from bpy.types import ( - Menu, - Operator, - ) - -# SnapCursSelToCenter1 thanks to Isaac Weaver (wisaac) D1963 - - -class SnapCursSelToCenter1(Operator): - """Snap 3D cursor and selected objects to the center \n"""\ - """Works only in Object Mode""" - bl_idname = "view3d.snap_cursor_selected_to_center1" - bl_label = "Snap Cursor & Selection to Center" - - @classmethod - def poll(cls, context): - return (context.mode == "OBJECT") - - def execute(self, context): - context.space_data.cursor_location = (0, 0, 0) - for obj in context.selected_objects: - obj.location = (0, 0, 0) - return {'FINISHED'} - -# Pivot to selection - - -class PivotToSelection(Operator): - bl_idname = "object.pivot2selection" - bl_label = "Pivot To Selection" - bl_description = "Pivot Point To Selection" - bl_options = {'REGISTER', 'UNDO'} - - def execute(self, context): - saved_location = context.scene.cursor_location.copy() - bpy.ops.view3d.snap_cursor_to_selected() - bpy.ops.object.mode_set(mode='OBJECT') - bpy.ops.object.origin_set(type='ORIGIN_CURSOR') - context.scene.cursor_location = saved_location - return {'FINISHED'} - -# Pivot to Bottom - - -class PivotBottom(Operator): - bl_idname = "object.pivotobottom" - bl_label = "Pivot To Bottom" - bl_description = "Set the Pivot Point To Lowest Point" - bl_options = {'REGISTER', 'UNDO'} - - def execute(self, context): - - bpy.ops.object.mode_set(mode='OBJECT') - bpy.ops.object.transform_apply(location=True, rotation=True, scale=True) - bpy.ops.object.origin_set(type='ORIGIN_GEOMETRY') - o = context.active_object - init = 0 - for x in o.data.vertices: - if init == 0: - a = x.co.z - init = 1 - elif x.co.z < a: - a = x.co.z - - for x in o.data.vertices: - x.co.z -= a - - o.location.z += a - bpy.ops.object.mode_set(mode='EDIT') - return {'FINISHED'} - -# Pie Origin/Pivot - Shift + S - - -class PieOriginPivot(Menu): - bl_idname = "pie.originpivot" - bl_label = "Origin Menu" - - def draw(self, context): - layout = self.layout - obj = context.object - pie = layout.menu_pie() - if obj and obj.type == 'MESH': - # 4 - LEFT - pie.operator("object.origin_set", text="Origin to Center of Mass", - icon='BBOX').type = 'ORIGIN_CENTER_OF_MASS' - # 6 - RIGHT - pie.operator("object.origin_set", text="Origin To 3D Cursor", icon='CURSOR').type = 'ORIGIN_CURSOR' - # 2 - BOTTOM - pie.operator("object.pivotobottom", text="Origin to Bottom", icon='TRIA_DOWN') - # 8 - TOP - pie.operator("object.pivot2selection", text="Origin To Selection", icon='SNAP_INCREMENT') - # 7 - TOP - LEFT - pie.operator("object.origin_set", text="Geometry To Origin", icon='BBOX').type = 'GEOMETRY_ORIGIN' - # 9 - TOP - RIGHT - pie.operator("object.origin_set", text="Origin To Geometry", icon='ROTATE').type = 'ORIGIN_GEOMETRY' - - else: - # 4 - LEFT - pie.operator("object.origin_set", text="Origin to Center of Mass", - icon='BBOX').type = 'ORIGIN_CENTER_OF_MASS' - # 6 - RIGHT - pie.operator("object.origin_set", text="Origin To 3D Cursor", icon='CURSOR').type = 'ORIGIN_CURSOR' - # 2 - BOTTOM - pie.operator("object.pivot2selection", text="Origin To Selection", icon='SNAP_INCREMENT') - # 8 - TOP - pie.operator("object.origin_set", text="Origin To Geometry", icon='ROTATE').type = 'ORIGIN_GEOMETRY' - # 7 - TOP - LEFT - pie.operator("object.origin_set", text="Geometry To Origin", icon='BBOX').type = 'GEOMETRY_ORIGIN' - - -# Origin/Pivot menu1 - Shift + S -class OriginPivotMenu(Menu): - bl_idname = "origin.pivotmenu" - 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 (Offset)", icon='CURSOR').use_offset = True - # 2 - BOTTOM - pie.operator("wm.call_menu_pie", text="Origin Pie", icon='ROTATECOLLECTION').name = "pie.originpivot" - # 8 - TOP - pie.operator("view3d.snap_cursor_to_center", text="Cursor to Center", icon='CLIPUV_DEHLT') - # 7 - TOP - LEFT - pie.operator("view3d.snap_cursor_to_selected", text="Cursor to Selected", icon='ROTACTIVE') - # 9 - TOP - RIGHT - pie.operator("view3d.snap_cursor_to_active", text="Cursor to Active", icon='BBOX') - # 1 - BOTTOM - LEFT - pie.operator("view3d.snap_cursor_selected_to_center1", text="Selected & Cursor to Center", icon='ALIGN') - # 3 - BOTTOM - RIGHT - pie.menu("snapgrid.menu", text="Snap Grid", icon='GRID') - -# More Menu - - -class Snap_CursorGrid(Menu): - bl_idname = "snapgrid.menu" - bl_label = "More Menu" - - def draw(self, context): - layout = self.layout - layout.operator("view3d.snap_selected_to_grid", text="Selection to Grid", icon='GRID') - layout.operator("view3d.snap_cursor_to_grid", text="Cursor to Grid", icon='GRID') - -classes = ( - OriginPivotMenu, - PieOriginPivot, - PivotToSelection, - PivotBottom, - SnapCursSelToCenter1, - Snap_CursorGrid, - ) - -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 = "origin.pivotmenu" -# kmi.active = True - 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: - km = kc.keymaps['3D View Generic'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "origin.pivotmenu": - km.keymap_items.remove(kmi) - - -if __name__ == "__main__": - register() diff --git a/space_view3d_pie_menus/pie_pivot_point_menu.py b/space_view3d_pie_menus/pie_pivot_point_menu.py index b58d33f8..df6600a3 100644 --- a/space_view3d_pie_menus/pie_pivot_point_menu.py +++ b/space_view3d_pie_menus/pie_pivot_point_menu.py @@ -21,8 +21,8 @@ bl_info = { "name": "Hotkey: ' . key' ", "description": "Set Pivot Point Menu", - # "author": "seb_k, meta-androcto", - # "version": (0, 1, 0), + "author": "seb_k, meta-androcto", + "version": (0, 1, 1), "blender": (2, 77, 0), "location": "3D View", "warning": "", @@ -57,29 +57,27 @@ addon_keymaps = [] def register(): for cls in classes: bpy.utils.register_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager if wm.keyconfigs.addon: # Pivot Point km = wm.keyconfigs.addon.keymaps.new(name='3D View Generic', space_type='VIEW_3D') kmi = km.keymap_items.new('wm.call_menu_pie', 'PERIOD', 'PRESS') kmi.properties.name = "pie.pivot" -# kmi.active = True addon_keymaps.append((km, kmi)) def unregister(): for cls in classes: bpy.utils.unregister_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager kc = wm.keyconfigs.addon if kc: - km = kc.keymaps['3D View Generic'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "pie.pivot": - km.keymap_items.remove(kmi) + for km, kmi in addon_keymaps: + km.keymap_items.remove(kmi) + addon_keymaps.clear() + if __name__ == "__main__": register() diff --git a/space_view3d_pie_menus/pie_proportional_menu.py b/space_view3d_pie_menus/pie_proportional_menu.py index ea5ddeed..479b57d4 100644 --- a/space_view3d_pie_menus/pie_proportional_menu.py +++ b/space_view3d_pie_menus/pie_proportional_menu.py @@ -21,8 +21,8 @@ bl_info = { "name": "Hotkey: 'O'", "description": "Proportional Object/Edit Tools", - # "author": "pitiwazou, meta-androcto", - # "version": (0, 1, 0), + "author": "pitiwazou, meta-androcto", + "version": (0, 1, 1), "blender": (2, 77, 0), "location": "3D View Object & Edit modes", "warning": "", @@ -36,11 +36,8 @@ from bpy.types import ( Operator, ) -##################################### -# Proportional Edit Object # -##################################### - +# Proportional Edit Object class ProportionalEditObj(Operator): bl_idname = "proportional_obj.active" bl_label = "Proportional Edit Object" @@ -49,10 +46,10 @@ class ProportionalEditObj(Operator): def execute(self, context): ts = context.tool_settings - if ts.use_proportional_edit_objects == True: + if ts.use_proportional_edit_objects is True: ts.use_proportional_edit_objects = False - elif ts.use_proportional_edit_objects == False: + elif ts.use_proportional_edit_objects is False: ts.use_proportional_edit_objects = True return {'FINISHED'} @@ -65,7 +62,7 @@ class ProportionalSmoothObj(Operator): def execute(self, context): ts = context.tool_settings - if ts.use_proportional_edit_objects == False: + if ts.use_proportional_edit_objects is False: ts.use_proportional_edit_objects = True ts.proportional_edit_falloff = 'SMOOTH' @@ -81,7 +78,7 @@ class ProportionalSphereObj(Operator): def execute(self, context): ts = context.tool_settings - if ts.use_proportional_edit_objects == False: + if ts.use_proportional_edit_objects is False: ts.use_proportional_edit_objects = True ts.proportional_edit_falloff = 'SPHERE' @@ -97,7 +94,7 @@ class ProportionalRootObj(Operator): def execute(self, context): ts = context.tool_settings - if ts.use_proportional_edit_objects == False: + if ts.use_proportional_edit_objects is False: ts.use_proportional_edit_objects = True ts.proportional_edit_falloff = 'ROOT' @@ -113,7 +110,7 @@ class ProportionalSharpObj(Operator): def execute(self, context): ts = context.tool_settings - if ts.use_proportional_edit_objects == False: + if ts.use_proportional_edit_objects is False: ts.use_proportional_edit_objects = True ts.proportional_edit_falloff = 'SHARP' @@ -129,7 +126,7 @@ class ProportionalLinearObj(Operator): def execute(self, context): ts = context.tool_settings - if ts.use_proportional_edit_objects == False: + if ts.use_proportional_edit_objects is False: ts.use_proportional_edit_objects = True ts.proportional_edit_falloff = 'LINEAR' @@ -145,7 +142,7 @@ class ProportionalConstantObj(Operator): def execute(self, context): ts = context.tool_settings - if ts.use_proportional_edit_objects == False: + if ts.use_proportional_edit_objects is False: ts.use_proportional_edit_objects = True ts.proportional_edit_falloff = 'CONSTANT' @@ -161,7 +158,7 @@ class ProportionalRandomObj(Operator): def execute(self, context): ts = context.tool_settings - if ts.use_proportional_edit_objects == False: + if ts.use_proportional_edit_objects is False: ts.use_proportional_edit_objects = True ts.proportional_edit_falloff = 'RANDOM' @@ -169,11 +166,8 @@ class ProportionalRandomObj(Operator): ts.proportional_edit_falloff = 'RANDOM' return {'FINISHED'} -####################################### -# Proportional Edit Edit Mode # -####################################### - +# Proportional Edit Edit Mode class ProportionalEditEdt(Operator): bl_idname = "proportional_edt.active" bl_label = "Proportional Edit EditMode" @@ -325,9 +319,8 @@ class ProportionalRandomEdt(Operator): ts.proportional_edit_falloff = 'RANDOM' return {'FINISHED'} -# Pie ProportionalEditObj - O - +# Pie ProportionalEditObj - O class PieProportionalObj(Menu): bl_idname = "pie.proportional_obj" bl_label = "Pie Proportional Obj" @@ -352,9 +345,8 @@ class PieProportionalObj(Menu): # 3 - BOTTOM - RIGHT pie.operator("proportional_obj.random", text="Random", icon='RNDCURVE') -# Pie ProportionalEditEdt - O - +# Pie ProportionalEditEdt - O class PieProportionalEdt(Menu): bl_idname = "pie.proportional_edt" bl_label = "Pie Proportional Edit" @@ -379,9 +371,8 @@ class PieProportionalEdt(Menu): # 3 - BOTTOM - RIGHT pie.menu("pie.proportional_more", text="More", icon='LINCURVE') -# Pie ProportionalEditEdt - O - +# Pie ProportionalEditEdt - O class PieProportionalMore(Menu): bl_idname = "pie.proportional_more" bl_label = "Pie Proportional More" @@ -390,11 +381,11 @@ class PieProportionalMore(Menu): layout = self.layout pie = layout.menu_pie() box = pie.split().column() - row = box.row(align=True) 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') + classes = ( ProportionalEditObj, ProportionalSmoothObj, @@ -425,44 +416,33 @@ addon_keymaps = [] def register(): for cls in classes: bpy.utils.register_class(cls) - wm = bpy.context.window_manager + 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') kmi.properties.name = "pie.proportional_obj" -# kmi.active = True 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') kmi.properties.name = "pie.proportional_edt" -# kmi.active = True addon_keymaps.append((km, kmi)) def unregister(): for cls in classes: bpy.utils.unregister_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager kc = wm.keyconfigs.addon if kc: - km = kc.keymaps['Object Mode'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "pie.proportional_obj": - km.keymap_items.remove(kmi) + for km, kmi in addon_keymaps: + km.keymap_items.remove(kmi) + addon_keymaps.clear() - kc = wm.keyconfigs.addon - if kc: - km = kc.keymaps['Mesh'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "pie.proportional_edt": - km.keymap_items.remove(kmi) if __name__ == "__main__": register() diff --git a/space_view3d_pie_menus/pie_save_open_menu.py b/space_view3d_pie_menus/pie_save_open_menu.py index 0a43eb2b..bdd9b63c 100644 --- a/space_view3d_pie_menus/pie_save_open_menu.py +++ b/space_view3d_pie_menus/pie_save_open_menu.py @@ -71,7 +71,6 @@ class pie_link(Menu): layout = self.layout pie = layout.menu_pie() box = pie.split().column() - row = box.row(align=True) box.operator("wm.link", text="Link", icon='LINK_BLEND') box.operator("wm.append", text="Append", icon='APPEND_BLEND') box.menu("external.data", text="External Data", icon='EXTERNAL_DATA') @@ -85,7 +84,6 @@ class pie_recover(Menu): layout = self.layout pie = layout.menu_pie() box = pie.split().column() - row = box.row(align=True) box.operator("wm.recover_auto_save", text="Recover Auto Save...", icon='RECOVER_AUTO') box.operator("wm.recover_last_session", text="Recover Last Session", icon='RECOVER_LAST') box.operator("wm.revert_mainfile", text="Revert", icon='FILE_REFRESH') @@ -99,7 +97,6 @@ class pie_fileio(Menu): layout = self.layout pie = layout.menu_pie() box = pie.split().column() - row = box.row(align=True) box.menu("INFO_MT_file_import", icon='IMPORT') box.separator() box.menu("INFO_MT_file_export", icon='EXPORT') @@ -128,7 +125,7 @@ class ExternalData(Menu): class FileIncrementalSave(Operator): bl_idname = "file.save_incremental" bl_label = "Save Incremental" - bl_description = "Save First!then Incremental, .blend will get _001 extension" + bl_description = "Save First! then Incremental, .blend will get _001 extension" bl_options = {"REGISTER"} @classmethod @@ -163,7 +160,8 @@ class FileIncrementalSave(Operator): try: bpy.ops.wm.save_as_mainfile(filepath=output) except: - self.report({'WARNING'}, "File could not be saved. Check the System Console for errors") + self.report({'WARNING'}, + "File could not be saved. Check the System Console for errors") return {'CANCELLED'} self.report( @@ -189,29 +187,27 @@ addon_keymaps = [] def register(): for cls in classes: bpy.utils.register_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager if wm.keyconfigs.addon: # Save/Open/... km = wm.keyconfigs.addon.keymaps.new(name='Window') kmi = km.keymap_items.new('wm.call_menu_pie', 'S', 'PRESS', ctrl=True) kmi.properties.name = "pie.saveopen" -# kmi.active = True addon_keymaps.append((km, kmi)) def unregister(): for cls in classes: bpy.utils.unregister_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager kc = wm.keyconfigs.addon if kc: - km = kc.keymaps['Window'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "pie.saveopen": - km.keymap_items.remove(kmi) + for km, kmi in addon_keymaps: + km.keymap_items.remove(kmi) + addon_keymaps.clear() + if __name__ == "__main__": register() diff --git a/space_view3d_pie_menus/pie_sculpt_menu.py b/space_view3d_pie_menus/pie_sculpt_menu.py index bebbc71e..edeffac3 100644 --- a/space_view3d_pie_menus/pie_sculpt_menu.py +++ b/space_view3d_pie_menus/pie_sculpt_menu.py @@ -21,8 +21,8 @@ bl_info = { "name": "Hotkey: 'W'", "description": "Sculpt Brush Menu", - # "author": "pitiwazou, meta-androcto", - # "version": (0, 1, 0), + "author": "pitiwazou, meta-androcto", + "version": (0, 1, 0), "blender": (2, 77, 0), "location": "W key", "warning": "", @@ -38,8 +38,6 @@ from bpy.types import ( # Sculpt Draw - - class SculptSculptDraw(Operator): bl_idname = "sculpt.sculptraw" bl_label = "Sculpt SculptDraw" @@ -49,9 +47,8 @@ class SculptSculptDraw(Operator): context.tool_settings.sculpt.brush = bpy.data.brushes['SculptDraw'] return {'FINISHED'} -# Pie Sculp Pie Menus - W - +# Pie Sculp Pie Menus - W class PieSculptPie(Menu): bl_idname = "pie.sculpt" bl_label = "Pie Sculpt" @@ -60,57 +57,75 @@ class PieSculptPie(Menu): layout = self.layout pie = layout.menu_pie() # 4 - LEFT - pie.operator("paint.brush_select", text="Crease", icon='BRUSH_CREASE').sculpt_tool = 'CREASE' + pie.operator("paint.brush_select", + text="Crease", icon='BRUSH_CREASE').sculpt_tool = 'CREASE' # 6 - RIGHT - pie.operator("paint.brush_select", text='Blob', icon='BRUSH_BLOB').sculpt_tool = 'BLOB' + pie.operator("paint.brush_select", + text='Blob', icon='BRUSH_BLOB').sculpt_tool = 'BLOB' # 2 - BOTTOM - pie.menu(PieSculpttwo.bl_idname, text="More Brushes", icon='BRUSH_SMOOTH') + pie.menu(PieSculpttwo.bl_idname, + text="More Brushes", icon='BRUSH_SMOOTH') # 8 - TOP - pie.operator("sculpt.sculptraw", text='SculptDraw', icon='BRUSH_SCULPT_DRAW') + pie.operator("sculpt.sculptraw", + text='SculptDraw', icon='BRUSH_SCULPT_DRAW') # 7 - TOP - LEFT - pie.operator("paint.brush_select", text="Clay", icon='BRUSH_CLAY').sculpt_tool = 'CLAY' + pie.operator("paint.brush_select", + text="Clay", icon='BRUSH_CLAY').sculpt_tool = 'CLAY' # 9 - TOP - RIGHT - pie.operator("paint.brush_select", text='Claystrips', icon='BRUSH_CLAY_STRIPS').sculpt_tool = 'CLAY_STRIPS' + pie.operator("paint.brush_select", + text='Claystrips', icon='BRUSH_CLAY_STRIPS').sculpt_tool = 'CLAY_STRIPS' # 1 - BOTTOM - LEFT - pie.operator("paint.brush_select", text='Inflate/Deflate', icon='BRUSH_INFLATE').sculpt_tool = 'INFLATE' + pie.operator("paint.brush_select", + text='Inflate/Deflate', icon='BRUSH_INFLATE').sculpt_tool = 'INFLATE' # 3 - BOTTOM - RIGHT - pie.menu(PieSculptthree.bl_idname, text="Grab Brushes", icon='BRUSH_GRAB') - -# Pie Sculpt 2 + pie.menu(PieSculptthree.bl_idname, + text="Grab Brushes", icon='BRUSH_GRAB') +# Pie Sculpt 2 class PieSculpttwo(Menu): bl_idname = "pie.sculpttwo" bl_label = "Pie Sculpt 2" def draw(self, context): - layout = self.layout - layout.operator("paint.brush_select", text='Smooth', icon='BRUSH_SMOOTH').sculpt_tool = 'SMOOTH' - layout.operator("paint.brush_select", text='Flatten', icon='BRUSH_FLATTEN').sculpt_tool = 'FLATTEN' - layout.operator("paint.brush_select", text='Scrape/Peaks', icon='BRUSH_SCRAPE').sculpt_tool = 'SCRAPE' - layout.operator("paint.brush_select", text='Fill/Deepen', icon='BRUSH_FILL').sculpt_tool = 'FILL' - layout.operator("paint.brush_select", text='Pinch/Magnify', icon='BRUSH_PINCH').sculpt_tool = 'PINCH' - layout.operator("paint.brush_select", text='Layer', icon='BRUSH_LAYER').sculpt_tool = 'LAYER' - layout.operator("paint.brush_select", text='Mask', icon='BRUSH_MASK').sculpt_tool = 'MASK' - layout.operator("paint.brush_select", text='Simplify', icon='BRUSH_DATA').sculpt_tool = 'SIMPLIFY' - -# Pie Sculpt Three + layout.operator("paint.brush_select", text='Smooth', + icon='BRUSH_SMOOTH').sculpt_tool = 'SMOOTH' + layout.operator("paint.brush_select", text='Flatten', + icon='BRUSH_FLATTEN').sculpt_tool = 'FLATTEN' + layout.operator("paint.brush_select", text='Scrape/Peaks', + icon='BRUSH_SCRAPE').sculpt_tool = 'SCRAPE' + layout.operator("paint.brush_select", text='Fill/Deepen', + icon='BRUSH_FILL').sculpt_tool = 'FILL' + layout.operator("paint.brush_select", text='Pinch/Magnify', + icon='BRUSH_PINCH').sculpt_tool = 'PINCH' + layout.operator("paint.brush_select", text='Layer', + icon='BRUSH_LAYER').sculpt_tool = 'LAYER' + layout.operator("paint.brush_select", text='Mask', + icon='BRUSH_MASK').sculpt_tool = 'MASK' + layout.operator("paint.brush_select", text='Simplify', + icon='BRUSH_DATA').sculpt_tool = 'SIMPLIFY' +# Pie Sculpt Three class PieSculptthree(Menu): bl_idname = "pie.sculptthree" bl_label = "Pie Sculpt 3" def draw(self, context): - layout = self.layout - layout.operator("paint.brush_select", text='Grab', icon='BRUSH_GRAB').sculpt_tool = 'GRAB' - layout.operator("paint.brush_select", text='Nudge', icon='BRUSH_NUDGE').sculpt_tool = 'NUDGE' - layout.operator("paint.brush_select", text='Thumb', icon='BRUSH_THUMB').sculpt_tool = 'THUMB' - layout.operator("paint.brush_select", text='Snakehook', icon='BRUSH_SNAKE_HOOK').sculpt_tool = 'SNAKE_HOOK' - layout.operator("paint.brush_select", text='Twist', icon='BRUSH_ROTATE').sculpt_tool = 'ROTATE' + + layout.operator("paint.brush_select", + text='Grab', icon='BRUSH_GRAB').sculpt_tool = 'GRAB' + layout.operator("paint.brush_select", + text='Nudge', icon='BRUSH_NUDGE').sculpt_tool = 'NUDGE' + layout.operator("paint.brush_select", + text='Thumb', icon='BRUSH_THUMB').sculpt_tool = 'THUMB' + layout.operator("paint.brush_select", + text='Snakehook', icon='BRUSH_SNAKE_HOOK').sculpt_tool = 'SNAKE_HOOK' + layout.operator("paint.brush_select", + text='Twist', icon='BRUSH_ROTATE').sculpt_tool = 'ROTATE' classes = ( @@ -126,44 +141,33 @@ addon_keymaps = [] def register(): for cls in classes: bpy.utils.register_class(cls) - wm = bpy.context.window_manager + 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.sculpt" -# kmi.active = True addon_keymaps.append((km, kmi)) # Sculpt Pie Menu 2 km = wm.keyconfigs.addon.keymaps.new(name='Sculpt') kmi = km.keymap_items.new('wm.call_menu_pie', 'W', 'PRESS', alt=True) kmi.properties.name = "pie.sculpttwo" -# kmi.active = True addon_keymaps.append((km, kmi)) def unregister(): for cls in classes: bpy.utils.unregister_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager kc = wm.keyconfigs.addon if kc: - km = kc.keymaps['Sculpt'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "pie.sculpt": - km.keymap_items.remove(kmi) + for km, kmi in addon_keymaps: + km.keymap_items.remove(kmi) + addon_keymaps.clear() - kc = wm.keyconfigs.addon - if kc: - km = kc.keymaps['Sculpt'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "pie.sculpttwo": - km.keymap_items.remove(kmi) if __name__ == "__main__": register() diff --git a/space_view3d_pie_menus/pie_select_menu.py b/space_view3d_pie_menus/pie_select_menu.py index 585e28dc..091e18ed 100644 --- a/space_view3d_pie_menus/pie_select_menu.py +++ b/space_view3d_pie_menus/pie_select_menu.py @@ -21,8 +21,8 @@ bl_info = { "name": "Hotkey: 'A'", "description": "Object/Edit mode Selection Menu", - # "author": "pitiwazou, meta-androcto", - # "version": (0, 1, 0), + "author": "pitiwazou, meta-androcto", + "version": (0, 1, 1), "blender": (2, 77, 0), "location": "3D View", "warning": "", @@ -31,14 +31,10 @@ bl_info = { } import bpy -from bpy.types import ( - Menu, - Operator, - ) - -# Pie Selection Object Mode - A +from bpy.types import Menu +# Pie Selection Object Mode - A class PieSelectionsMore(Menu): bl_idname = "pie.selectionsmore" bl_label = "Pie Selections Object Mode" @@ -47,15 +43,13 @@ class PieSelectionsMore(Menu): layout = self.layout pie = layout.menu_pie() box = pie.split().column() - row = box.row(align=True) box.operator("object.select_by_type", text="Select By Type", icon='SNAP_VOLUME') box.operator("object.select_grouped", text="Select Grouped", icon='ROTATE') box.operator("object.select_linked", text="Select Linked", icon='CONSTRAINT_BONE') box.menu("VIEW3D_MT_select_object_more_less", text="More/Less") -# Pie Selection Object Mode - A - +# Pie Selection Object Mode - A class PieSelectionsOM(Menu): bl_idname = "pie.selectionsom" bl_label = "Pie Selections Object Mode" @@ -68,9 +62,11 @@ class PieSelectionsOM(Menu): # 6 - RIGHT pie.operator("object.select_random", text="Select Random", icon='GROUP_VERTEX') # 2 - BOTTOM - pie.operator("object.select_all", text="Invert Selection", icon='ZOOM_PREVIOUS').action = 'INVERT' + pie.operator("object.select_all", text="Invert Selection", + icon='ZOOM_PREVIOUS').action = 'INVERT' # 8 - TOP - pie.operator("object.select_all", text="Select All Toggle", icon='RENDER_REGION').action = 'TOGGLE' + pie.operator("object.select_all", text="Select All Toggle", + icon='RENDER_REGION').action = 'TOGGLE' # 7 - TOP - LEFT pie.operator("view3d.select_circle", text="Circle Select", icon='BORDER_LASSO') # 9 - TOP - RIGHT @@ -80,9 +76,8 @@ class PieSelectionsOM(Menu): # 3 - BOTTOM - RIGHT pie.menu("pie.selectionsmore", text="Select Menu", icon='RESTRICT_SELECT_OFF') -# Pie Selection Edit Mode - +# Pie Selection Edit Mode class PieSelectionsEM(Menu): bl_idname = "pie.selectionsem" bl_label = "Pie Selections Edit Mode" @@ -91,25 +86,30 @@ class PieSelectionsEM(Menu): layout = self.layout pie = layout.menu_pie() # 4 - LEFT - pie.operator("view3d.select_border", text="Border Select", icon='BORDER_RECT') + pie.operator("view3d.select_border", text="Border Select", + icon='BORDER_RECT') # 6 - RIGHT pie.menu("object.selectloopselection", text="Select Loop Menu", icon='LOOPSEL') # 2 - BOTTOM - pie.operator("mesh.select_all", text="Select None", icon='RESTRICT_SELECT_ON').action = 'DESELECT' + 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' + pie.operator("mesh.select_all", text="Select All", + icon='RESTRICT_SELECT_OFF').action = 'SELECT' # 7 - TOP - LEFT - pie.operator("mesh.select_all", text="Select All Toggle", icon='ARROW_LEFTRIGHT').action = 'TOGGLE' + pie.operator("mesh.select_all", text="Select All Toggle", + icon='ARROW_LEFTRIGHT').action = 'TOGGLE' # 9 - TOP - RIGHT - pie.operator("mesh.select_all", text="Invert Selection", icon='FULLSCREEN_EXIT').action = 'INVERT' + pie.operator("mesh.select_all", text="Invert Selection", + icon='FULLSCREEN_EXIT').action = 'INVERT' # 1 - BOTTOM - LEFT - pie.operator("view3d.select_circle", text="Circle Select", icon='BORDER_LASSO') + pie.operator("view3d.select_circle", text="Circle Select", + icon='BORDER_LASSO') # 3 - BOTTOM - RIGHT pie.menu("object.selectallbyselection", text="Multi Select Menu", icon='SNAP_EDGE') -# Select All By Selection - +# Select All By Selection class SelectAllBySelection(Menu): bl_idname = "object.selectallbyselection" bl_label = "Verts Edges Faces" @@ -140,6 +140,7 @@ class SelectAllBySelection(Menu): prop.value = "(True, True, True)" prop.data_path = "tool_settings.mesh_select_mode" + class SelectLoopSelection(Menu): bl_idname = "object.selectloopselection" bl_label = "Verts Edges Faces" @@ -153,12 +154,13 @@ class SelectLoopSelection(Menu): layout.operator("mesh.loop_multi_select", text="Select Ring", icon='EDGESEL').ring = True layout.operator("mesh.loop_to_region", text="Select Loop Inner Region", icon='FACESEL') + classes = ( PieSelectionsOM, PieSelectionsEM, SelectAllBySelection, PieSelectionsMore, - SelectLoopSelection + SelectLoopSelection, ) addon_keymaps = [] @@ -167,8 +169,8 @@ addon_keymaps = [] def register(): for cls in classes: bpy.utils.register_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager if wm.keyconfigs.addon: # Selection Object Mode km = wm.keyconfigs.addon.keymaps.new(name='Object Mode') @@ -186,23 +188,14 @@ def register(): def unregister(): for cls in classes: bpy.utils.unregister_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager kc = wm.keyconfigs.addon if kc: - km = kc.keymaps['Object Mode'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "pie.selectionsom": - km.keymap_items.remove(kmi) + for km, kmi in addon_keymaps: + km.keymap_items.remove(kmi) + addon_keymaps.clear() - kc = wm.keyconfigs.addon - if kc: - km = kc.keymaps['Mesh'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "pie.selectionsem": - km.keymap_items.remove(kmi) if __name__ == "__main__": register() diff --git a/space_view3d_pie_menus/pie_shading_menu.py b/space_view3d_pie_menus/pie_shading_menu.py index 8c9f1f50..e7eb03b9 100644 --- a/space_view3d_pie_menus/pie_shading_menu.py +++ b/space_view3d_pie_menus/pie_shading_menu.py @@ -21,8 +21,8 @@ bl_info = { "name": "Hotkey: 'Z'", "description": "Viewport Shading Menus", - # "author": "pitiwazou, meta-androcto", - # "version": (0, 1, 0), + "author": "pitiwazou, meta-androcto", + "version": (0, 1, 1), "blender": (2, 77, 0), "location": "3D View", "warning": "", @@ -33,9 +33,8 @@ bl_info = { import bpy from bpy.types import Menu -# Pie Shading - Z - +# Pie Shading - Z class PieShadingView(Menu): bl_idname = "pie.shadingview" bl_label = "Pie Shading" @@ -47,7 +46,7 @@ class PieShadingView(Menu): pie.prop(context.space_data, "viewport_shade", expand=True) if context.active_object: - if(context.mode == 'EDIT_MESH'): + if context.mode == 'EDIT_MESH': pie.operator("MESH_OT_faces_shade_smooth") pie.operator("MESH_OT_faces_shade_flat") else: @@ -65,29 +64,26 @@ addon_keymaps = [] def register(): for cls in classes: bpy.utils.register_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager if wm.keyconfigs.addon: # Shading km = wm.keyconfigs.addon.keymaps.new(name='3D View Generic', space_type='VIEW_3D') kmi = km.keymap_items.new('wm.call_menu_pie', 'Z', 'PRESS') kmi.properties.name = "pie.shadingview" -# kmi.active = True addon_keymaps.append((km, kmi)) def unregister(): for cls in classes: bpy.utils.unregister_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager kc = wm.keyconfigs.addon if kc: - km = kc.keymaps['3D View Generic'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "pie.shadingview": - km.keymap_items.remove(kmi) + for km, kmi in addon_keymaps: + km.keymap_items.remove(kmi) + addon_keymaps.clear() if __name__ == "__main__": diff --git a/space_view3d_pie_menus/pie_snap_menu.py b/space_view3d_pie_menus/pie_snap_menu.py index 9e58e608..b5ca502c 100644 --- a/space_view3d_pie_menus/pie_snap_menu.py +++ b/space_view3d_pie_menus/pie_snap_menu.py @@ -21,8 +21,8 @@ bl_info = { "name": "Hotkey: 'Ctrl Shift Tab'", "description": "Snap Element Menu", - # "author": "pitiwazou, meta-androcto", - # "version": (0, 1, 0), + "author": "pitiwazou, meta-androcto", + "version": (0, 1, 1), "blender": (2, 77, 0), "location": "3d View", "warning": "", @@ -36,9 +36,8 @@ from bpy.types import ( Operator, ) -# Pie Snap - Shift + Tab - +# Pie Snap - Shift + Tab class PieSnaping(Menu): bl_idname = "pie.snapping" bl_label = "Pie Snapping" @@ -72,10 +71,10 @@ class SnapActive(Operator): def execute(self, context): ts = context.tool_settings - if ts.use_snap == True: + if ts.use_snap is True: ts.use_snap = False - elif ts.use_snap == False: + elif ts.use_snap is False: ts.use_snap = True return {'FINISHED'} @@ -88,7 +87,7 @@ class SnapVolume(Operator): def execute(self, context): ts = context.tool_settings - if ts.use_snap == False: + if ts.use_snap is False: ts.use_snap = True ts.snap_element = 'VOLUME' @@ -105,7 +104,7 @@ class SnapFace(Operator): def execute(self, context): ts = context.tool_settings - if ts.use_snap == False: + if ts.use_snap is False: ts.use_snap = True ts.snap_element = 'FACE' @@ -122,7 +121,7 @@ class SnapEdge(Operator): def execute(self, context): ts = context.tool_settings - if ts.use_snap == False: + if ts.use_snap is False: ts.use_snap = True ts.snap_element = 'EDGE' @@ -139,7 +138,7 @@ class SnapVertex(Operator): def execute(self, context): ts = context.tool_settings - if ts.use_snap == False: + if ts.use_snap is False: ts.use_snap = True ts.snap_element = 'VERTEX' @@ -156,7 +155,7 @@ class SnapIncrement(Operator): def execute(self, context): ts = context.tool_settings - if ts.use_snap == False: + if ts.use_snap is False: ts.use_snap = True ts.snap_element = 'INCREMENT' @@ -173,10 +172,10 @@ class SnapAlignRotation(Operator): def execute(self, context): ts = context.tool_settings - if ts.use_snap_align_rotation == True: + if ts.use_snap_align_rotation is True: ts.use_snap_align_rotation = False - elif ts.use_snap_align_rotation == False: + elif ts.use_snap_align_rotation is False: ts.use_snap_align_rotation = True return {'FINISHED'} @@ -220,6 +219,8 @@ class SnapTargetMenu(Menu): # 9 - TOP - RIGHT # 1 - BOTTOM - LEFT # 3 - BOTTOM - RIGHT + + # Pie Snapping - Shift + Tab classes = ( @@ -241,29 +242,27 @@ addon_keymaps = [] def register(): for cls in classes: bpy.utils.register_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager if wm.keyconfigs.addon: # Snapping km = wm.keyconfigs.addon.keymaps.new(name='3D View Generic', space_type='VIEW_3D') kmi = km.keymap_items.new('wm.call_menu_pie', 'TAB', 'PRESS', ctrl=True, shift=True) kmi.properties.name = "pie.snapping" -# kmi.active = True addon_keymaps.append((km, kmi)) def unregister(): for cls in classes: bpy.utils.unregister_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager kc = wm.keyconfigs.addon if kc: - km = kc.keymaps['3D View Generic'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "pie.snapping": - km.keymap_items.remove(kmi) + for km, kmi in addon_keymaps: + km.keymap_items.remove(kmi) + addon_keymaps.clear() + if __name__ == "__main__": register() diff --git a/space_view3d_pie_menus/pie_views_numpad_menu.py b/space_view3d_pie_menus/pie_views_numpad_menu.py index a176258a..02cf5464 100644 --- a/space_view3d_pie_menus/pie_views_numpad_menu.py +++ b/space_view3d_pie_menus/pie_views_numpad_menu.py @@ -21,8 +21,8 @@ bl_info = { "name": "Hotkey: 'Q'", "description": "Viewport Numpad Menus", - # "author": "pitiwazou, meta-androcto", - # "version": (0, 1, 0), + "author": "pitiwazou, meta-androcto", + "version": (0, 1, 1), "blender": (2, 77, 0), "location": "Q key", "warning": "", @@ -35,47 +35,42 @@ from bpy.types import ( Menu, Operator, ) -from bpy.props import ( - StringProperty, - ) - -# Lock Camera Transforms +# Lock Camera Transforms class LockTransforms(Operator): bl_idname = "object.locktransforms" bl_label = "Lock Object Transforms" + bl_description = ("Enable or disable the editing of objects transforms in the 3D View\n" + "Needs an existing Active Object") bl_options = {'REGISTER', 'UNDO'} + @classmethod + def poll(cls, context): + return context.active_object is not None + def execute(self, context): - obj = context.object - if obj.lock_rotation[0] == False: + obj = context.active_object + if obj.lock_rotation[0] is False: obj.lock_rotation[0] = True obj.lock_rotation[1] = True obj.lock_rotation[2] = True - obj.lock_location[0] = True - obj.lock_location[1] = True - obj.lock_location[2] = True obj.lock_scale[0] = True obj.lock_scale[1] = True obj.lock_scale[2] = True - elif context.object.lock_rotation[0] == True: + elif context.object.lock_rotation[0] is True: obj.lock_rotation[0] = False obj.lock_rotation[1] = False obj.lock_rotation[2] = False - obj.lock_location[0] = False - obj.lock_location[1] = False - obj.lock_location[2] = False obj.lock_scale[0] = False obj.lock_scale[1] = False obj.lock_scale[2] = False + return {'FINISHED'} # Pie View All Sel Glob Etc - Q - - class PieViewallSelGlobEtc(Menu): bl_idname = "pie.vieallselglobetc" bl_label = "Pie View All Sel Glob..." @@ -99,16 +94,15 @@ class PieViewallSelGlobEtc(Menu): layout.operator("screen.screen_full_area", text="Full Screen", icon='FULLSCREEN_ENTER') # 3 - BOTTOM - RIGHT -# Pie views numpad - Q - +# Pie views numpad - Q class PieViewNumpad(Menu): bl_idname = "pie.viewnumpad" bl_label = "Pie Views Ortho" def draw(self, context): layout = self.layout - ob = context.object + ob = context.active_object pie = layout.menu_pie() scene = context.scene rd = scene.render @@ -128,10 +122,11 @@ class PieViewNumpad(Menu): # 1 - BOTTOM - LEFT box = pie.split().column() row = box.row(align=True) - if context.space_data.lock_camera == False: + + if context.space_data.lock_camera is False: row.operator("wm.context_toggle", text="Lock Cam to View", icon='UNLOCKED').data_path = "space_data.lock_camera" - elif context.space_data.lock_camera == True: + elif context.space_data.lock_camera is True: row.operator("wm.context_toggle", text="Lock Cam to View", icon='LOCKED').data_path = "space_data.lock_camera" @@ -139,18 +134,18 @@ class PieViewNumpad(Menu): row.operator("view3d.viewnumpad", text="View Cam", icon='VISIBLE_IPO_ON').type = 'CAMERA' row.operator("view3d.camera_to_view", text="Cam to view", icon='MAN_TRANS') - if ob.lock_rotation[0] == False: - row = box.row(align=True) - row.operator("object.locktransforms", text="Lock Transforms", icon='LOCKED') + icon_locked = 'LOCKED' if ob and ob.lock_rotation[0] is False else \ + 'UNLOCKED' if ob and ob.lock_rotation[0] is True else 'LOCKED' + + row = box.row(align=True) + row.operator("object.locktransforms", text="Lock Transforms", icon=icon_locked) - elif ob.lock_rotation[0] == True: - row = box.row(align=True) - row.operator("object.locktransforms", text="UnLock Transforms", icon='UNLOCKED') row = box.row(align=True) row.prop(rd, "use_border", text="Border") # 3 - BOTTOM - RIGHT pie.menu(PieViewallSelGlobEtc.bl_idname, text="View Menu", icon='BBOX') + classes = ( PieViewNumpad, LockTransforms, @@ -164,34 +159,26 @@ def register(): for cls in classes: bpy.utils.register_class(cls) -# Active Camera - bpy.types.Scene.cameratoto = bpy.props.StringProperty(default="") - wm = bpy.context.window_manager - if wm.keyconfigs.addon: # Views numpad km = wm.keyconfigs.addon.keymaps.new(name='3D View Generic', space_type='VIEW_3D') kmi = km.keymap_items.new('wm.call_menu_pie', 'Q', 'PRESS') kmi.properties.name = "pie.viewnumpad" -# kmi.active = True addon_keymaps.append((km, kmi)) def unregister(): for cls in classes: bpy.utils.unregister_class(cls) - wm = bpy.context.window_manager + wm = bpy.context.window_manager kc = wm.keyconfigs.addon if kc: - km = kc.keymaps['3D View Generic'] - for kmi in km.keymap_items: - if kmi.idname == 'wm.call_menu_pie': - if kmi.properties.name == "pie.viewnumpad": - km.keymap_items.remove(kmi) + for km, kmi in addon_keymaps: + km.keymap_items.remove(kmi) + addon_keymaps.clear() - del bpy.types.Scene.cameratoto if __name__ == "__main__": register() |