Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlijenstina <lijenstina@gmail.com>2017-07-05 02:22:14 +0300
committerlijenstina <lijenstina@gmail.com>2017-07-05 02:22:14 +0300
commit99ed610784b804c175d9e189d9a1b3036973ed61 (patch)
tree9865ee8d7e95d9747a349409139e0849db6d1d60 /space_view3d_pie_menus
parent759595b17b3a4b04f800d2c12e2af80aa63e4c29 (diff)
3D Viewport Pie Menus: Cleanup, refactor, fix key register
Bumped version to 1.1.5 Pep8 cleanup Remove the pie_origin_cursor.py since it is not needed anymore Part of the T51547: refactor the key unregister code so it matches the official pies Note: using this code was crashing blender because of Bool Tool key registration that left out some lingering keys on unregister reload Also there were some wrong calls with the unregister within the pies themselves Merge some operators where possible (around 7 less in total) and use passing arguments instead Add Enable All / Disable all buttons in the preferences Comment out the code for authors in the init instead of in individual scripts Remove unused imports and cameratoto scene prop Add an icon at end of registrations line Fix several crashes with operators being called out of context
Diffstat (limited to 'space_view3d_pie_menus')
-rw-r--r--space_view3d_pie_menus/__init__.py96
-rw-r--r--space_view3d_pie_menus/pie_align_menu.py368
-rw-r--r--space_view3d_pie_menus/pie_animation_menu.py18
-rw-r--r--space_view3d_pie_menus/pie_apply_transform_menu.py87
-rw-r--r--space_view3d_pie_menus/pie_cursor.py31
-rw-r--r--space_view3d_pie_menus/pie_delete_menu.py30
-rw-r--r--space_view3d_pie_menus/pie_editor_switch_menu.py59
-rw-r--r--space_view3d_pie_menus/pie_manipulator_menu.py40
-rw-r--r--space_view3d_pie_menus/pie_modes_menu.py26
-rw-r--r--space_view3d_pie_menus/pie_orientation_menu.py17
-rw-r--r--space_view3d_pie_menus/pie_origin.py67
-rw-r--r--space_view3d_pie_menus/pie_origin_cursor.py225
-rw-r--r--space_view3d_pie_menus/pie_pivot_point_menu.py18
-rw-r--r--space_view3d_pie_menus/pie_proportional_menu.py64
-rw-r--r--space_view3d_pie_menus/pie_save_open_menu.py22
-rw-r--r--space_view3d_pie_menus/pie_sculpt_menu.py102
-rw-r--r--space_view3d_pie_menus/pie_select_menu.py69
-rw-r--r--space_view3d_pie_menus/pie_shading_menu.py22
-rw-r--r--space_view3d_pie_menus/pie_snap_menu.py41
-rw-r--r--space_view3d_pie_menus/pie_views_numpad_menu.py69
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()