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:
authormeta-androcto <meta.androcto1@gmail.com>2019-12-11 10:46:08 +0300
committermeta-androcto <meta.androcto1@gmail.com>2019-12-11 10:46:08 +0300
commitbd0718063f6ab86296d715135ee7cff3f66ecdb8 (patch)
tree044307730b1bfa729516aa5a3fd566bff35db1e7 /space_view3d_pie_menus
parent7347930a0fa14e752929e28c9b48adf74597b018 (diff)
viewport pies: proportional edit and save defaults pies
Diffstat (limited to 'space_view3d_pie_menus')
-rw-r--r--space_view3d_pie_menus/__init__.py2
-rw-r--r--space_view3d_pie_menus/pie_defaults_menu.py100
-rw-r--r--space_view3d_pie_menus/pie_proportional_menu.py457
3 files changed, 559 insertions, 0 deletions
diff --git a/space_view3d_pie_menus/__init__.py b/space_view3d_pie_menus/__init__.py
index e211e1fa..92e7e74e 100644
--- a/space_view3d_pie_menus/__init__.py
+++ b/space_view3d_pie_menus/__init__.py
@@ -58,6 +58,8 @@ sub_modules_names = (
"pie_animation_menu",
"pie_save_open_menu",
"pie_editor_switch_menu",
+ "pie_defaults_menu",
+ "pie_proportional_menu",
)
diff --git a/space_view3d_pie_menus/pie_defaults_menu.py b/space_view3d_pie_menus/pie_defaults_menu.py
new file mode 100644
index 00000000..cda67e7c
--- /dev/null
+++ b/space_view3d_pie_menus/pie_defaults_menu.py
@@ -0,0 +1,100 @@
+# ##### 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: 'Ctrl U'",
+ "description": "Save/Open & File Menus",
+ "blender": (2, 80, 0),
+ "location": "All Editors",
+ "warning": "",
+ "wiki_url": "",
+ "category": "Interface"
+ }
+
+import bpy
+from bpy.types import (
+ Menu,
+ Operator,
+ )
+import os
+
+
+# Pie Save/Open
+class PIE_MT_Load_Defaults(Menu):
+ bl_idname = "PIE_MT_loaddefaults"
+ bl_label = "Save Defaults"
+
+ def draw(self, context):
+ layout = self.layout
+ prefs = context.preferences
+ pie = layout.menu_pie()
+ # 4 - LEFT
+ pie.operator("wm.read_factory_settings", text="Load Factory Settings", icon='IMPORT')
+ # 6 - RIGHT
+ pie.operator("wm.read_factory_userpref", text="Load Factory Preferences", icon='RECOVER_LAST')
+ # 2 - BOTTOM
+ pie.operator("wm.read_userpref", text="Revert to Saved Prefs", icon='NONE')
+ # 8 - TOP
+ pie.operator("wm.save_homefile", text="Save StartUp File", icon='FILE_NEW')
+ # 7 - TOP - LEFT
+ pie.prop(prefs, "use_preferences_save", text="Auto-Save Preferences", icon='LINK_BLEND')
+ # 9 - TOP - RIGHT
+ pie.operator("wm.save_userpref", text="Save User Preferences", icon='NONE')
+ # 1 - BOTTOM - LEFT
+ pie.separator()
+ # 3 - BOTTOM - RIGHT
+ pie.separator()
+
+
+
+classes = (
+ PIE_MT_Load_Defaults,
+ )
+
+addon_keymaps = []
+
+
+def register():
+ for cls in classes:
+ bpy.utils.register_class(cls)
+
+ 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', 'U', 'PRESS', ctrl=True)
+ kmi.properties.name = "PIE_MT_loaddefaults"
+ addon_keymaps.append((km, kmi))
+
+
+def unregister():
+ for cls in classes:
+ bpy.utils.unregister_class(cls)
+
+ wm = bpy.context.window_manager
+ kc = wm.keyconfigs.addon
+ if kc:
+ for km, kmi in addon_keymaps:
+ km.keymap_items.remove(kmi)
+ addon_keymaps.clear()
+
+
+if __name__ == "__main__":
+ register()
diff --git a/space_view3d_pie_menus/pie_proportional_menu.py b/space_view3d_pie_menus/pie_proportional_menu.py
new file mode 100644
index 00000000..55d91763
--- /dev/null
+++ b/space_view3d_pie_menus/pie_proportional_menu.py
@@ -0,0 +1,457 @@
+# ##### 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: 'O'",
+ "description": "Proportional Object/Edit Tools",
+ "author": "pitiwazou, meta-androcto",
+ "version": (0, 1, 1),
+ "blender": (2, 80, 0),
+ "location": "3D View Object & Edit modes",
+ "warning": "",
+ "wiki_url": "",
+ "category": "Proportional Edit Pie"
+ }
+
+import bpy
+from bpy.types import (
+ Menu,
+ Operator,
+ )
+
+
+# Proportional Edit Object
+class PIE_OT_ProportionalEditObj(Operator):
+ bl_idname = "proportional_obj.active"
+ bl_label = "Proportional Edit Object"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+
+ if ts.use_proportional_edit_objects is True:
+ ts.use_proportional_edit_objects = False
+
+ elif ts.use_proportional_edit_objects is False:
+ ts.use_proportional_edit_objects = True
+
+ return {'FINISHED'}
+
+
+class PIE_OT_ProportionalSmoothObj(Operator):
+ bl_idname = "proportional_obj.smooth"
+ bl_label = "Proportional Smooth Object"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+ if ts.use_proportional_edit_objects is False:
+ ts.use_proportional_edit_objects = True
+ ts.proportional_edit_falloff = 'SMOOTH'
+
+ if ts.proportional_edit_falloff != 'SMOOTH':
+ ts.proportional_edit_falloff = 'SMOOTH'
+ return {'FINISHED'}
+
+
+class PIE_OT_ProportionalSphereObj(Operator):
+ bl_idname = "proportional_obj.sphere"
+ bl_label = "Proportional Sphere Object"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+ if ts.use_proportional_edit_objects is False:
+ ts.use_proportional_edit_objects = True
+ ts.proportional_edit_falloff = 'SPHERE'
+
+ if ts.proportional_edit_falloff != 'SPHERE':
+ ts.proportional_edit_falloff = 'SPHERE'
+ return {'FINISHED'}
+
+
+class PIE_OT_ProportionalRootObj(Operator):
+ bl_idname = "proportional_obj.root"
+ bl_label = "Proportional Root Object"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+ if ts.use_proportional_edit_objects is False:
+ ts.use_proportional_edit_objects = True
+ ts.proportional_edit_falloff = 'ROOT'
+
+ if ts.proportional_edit_falloff != 'ROOT':
+ ts.proportional_edit_falloff = 'ROOT'
+ return {'FINISHED'}
+
+
+class PIE_OT_ProportionalSharpObj(Operator):
+ bl_idname = "proportional_obj.sharp"
+ bl_label = "Proportional Sharp Object"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+ if ts.use_proportional_edit_objects is False:
+ ts.use_proportional_edit_objects = True
+ ts.proportional_edit_falloff = 'SHARP'
+
+ if ts.proportional_edit_falloff != 'SHARP':
+ ts.proportional_edit_falloff = 'SHARP'
+ return {'FINISHED'}
+
+
+class PIE_OT_ProportionalLinearObj(Operator):
+ bl_idname = "proportional_obj.linear"
+ bl_label = "Proportional Linear Object"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+ if ts.use_proportional_edit_objects is False:
+ ts.use_proportional_edit_objects = True
+ ts.proportional_edit_falloff = 'LINEAR'
+
+ if ts.proportional_edit_falloff != 'LINEAR':
+ ts.proportional_edit_falloff = 'LINEAR'
+ return {'FINISHED'}
+
+
+class PIE_OT_ProportionalConstantObj(Operator):
+ bl_idname = "proportional_obj.constant"
+ bl_label = "Proportional Constant Object"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+ if ts.use_proportional_edit_objects is False:
+ ts.use_proportional_edit_objects = True
+ ts.proportional_edit_falloff = 'CONSTANT'
+
+ if ts.proportional_edit_falloff != 'CONSTANT':
+ ts.proportional_edit_falloff = 'CONSTANT'
+ return {'FINISHED'}
+
+
+class PIE_OT_ProportionalRandomObj(Operator):
+ bl_idname = "proportional_obj.random"
+ bl_label = "Proportional Random Object"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+ if ts.use_proportional_edit_objects is False:
+ ts.use_proportional_edit_objects = True
+ ts.proportional_edit_falloff = 'RANDOM'
+
+ if ts.proportional_edit_falloff != 'RANDOM':
+ ts.proportional_edit_falloff = 'RANDOM'
+ return {'FINISHED'}
+
+class PIE_OT_ProportionalInverseSquareObj(Operator):
+ bl_idname = "proportional_obj.inversesquare"
+ bl_label = "Proportional Random Object"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+ if ts.use_proportional_edit_objects is False:
+ ts.use_proportional_edit_objects = True
+ ts.proportional_edit_falloff = 'INVERSE_SQUARE'
+
+ if ts.proportional_edit_falloff != 'INVERSE_SQUARE':
+ ts.proportional_edit_falloff = 'INVERSE_SQUARE'
+ return {'FINISHED'}
+
+
+# Proportional Edit Edit Mode
+class PIE_OT_ProportionalEditEdt(Operator):
+ bl_idname = "proportional_edt.active"
+ bl_label = "Proportional Edit EditMode"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+ ts.use_proportional_edit ^= 1
+ return {'FINISHED'}
+
+
+class PIE_OT_ProportionalConnectedEdt(Operator):
+ bl_idname = "proportional_edt.connected"
+ bl_label = "Proportional Connected EditMode"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+ ts.use_proportional_connected ^= 1
+ return {'FINISHED'}
+
+
+class PIE_OT_ProportionalProjectedEdt(Operator):
+ bl_idname = "proportional_edt.projected"
+ bl_label = "Proportional projected EditMode"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+ ts.use_proportional_projected ^= 1
+ return {'FINISHED'}
+
+
+class PIE_OT_ProportionalSmoothEdt(Operator):
+ bl_idname = "proportional_edt.smooth"
+ bl_label = "Proportional Smooth EditMode"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+ ts.use_proportional_edit = True
+ ts.proportional_edit_falloff = 'SMOOTH'
+ return {'FINISHED'}
+
+
+class PIE_OT_ProportionalSphereEdt(Operator):
+ bl_idname = "proportional_edt.sphere"
+ bl_label = "Proportional Sphere EditMode"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+ ts.use_proportional_edit = True
+ ts.proportional_edit_falloff = 'SPHERE'
+ return {'FINISHED'}
+
+
+class PIE_OT_ProportionalRootEdt(Operator):
+ bl_idname = "proportional_edt.root"
+ bl_label = "Proportional Root EditMode"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+ ts.use_proportional_edit = True
+ ts.proportional_edit_falloff = 'ROOT'
+ return {'FINISHED'}
+
+
+class PIE_OT_ProportionalSharpEdt(Operator):
+ bl_idname = "proportional_edt.sharp"
+ bl_label = "Proportional Sharp EditMode"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+ ts.use_proportional_edit = True
+ ts.proportional_edit_falloff = 'SHARP'
+ return {'FINISHED'}
+
+
+class PIE_OT_ProportionalLinearEdt(Operator):
+ bl_idname = "proportional_edt.linear"
+ bl_label = "Proportional Linear EditMode"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+ ts.use_proportional_edit = True
+ ts.proportional_edit_falloff = 'LINEAR'
+ return {'FINISHED'}
+
+
+class PIE_OT_ProportionalConstantEdt(Operator):
+ bl_idname = "proportional_edt.constant"
+ bl_label = "Proportional Constant EditMode"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+ ts.use_proportional_edit = True
+ ts.proportional_edit_falloff = 'CONSTANT'
+ return {'FINISHED'}
+
+
+class PIE_OT_ProportionalRandomEdt(Operator):
+ bl_idname = "proportional_edt.random"
+ bl_label = "Proportional Random EditMode"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+ ts.use_proportional_edit = True
+ ts.proportional_edit_falloff = 'RANDOM'
+ return {'FINISHED'}
+
+class PIE_OT_ProportionalInverseSquareEdt(Operator):
+ bl_idname = "proportional_edt.inversesquare"
+ bl_label = "Proportional Inverese Square EditMode"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def execute(self, context):
+ ts = context.tool_settings
+ ts.use_proportional_edit = True
+ ts.proportional_edit_falloff = 'INVERSE_SQUARE'
+ return {'FINISHED'}
+
+
+# Pie ProportionalEditObj - O
+class PIE_MT_ProportionalObj(Menu):
+ bl_idname = "PIE_MT_proportional_obj"
+ bl_label = "Pie Proportional Obj"
+
+ def draw(self, context):
+ layout = self.layout
+ pie = layout.menu_pie()
+ # 4 - LEFT
+ pie.operator("proportional_obj.smooth", text="Smooth", icon='SMOOTHCURVE')
+ # 6 - RIGHT
+ pie.operator("proportional_obj.sphere", text="Sphere", icon='SPHERECURVE')
+ # 2 - BOTTOM
+ pie.operator("proportional_obj.linear", text="Linear", icon='LINCURVE')
+ # 8 - TOP
+ pie.prop(context.tool_settings, "use_proportional_edit_objects", text="Proportional On/Off")
+ # 7 - TOP - LEFT
+ pie.operator("proportional_obj.root", text="Root", icon='ROOTCURVE')
+ # 9 - TOP - RIGHT
+ pie.operator("proportional_obj.inversesquare", text="Inverse Square", icon='INVERSESQUARECURVE')
+ # 1 - BOTTOM - LEFT
+ pie.operator("proportional_obj.sharp", text="Sharp", icon='SHARPCURVE')
+ # 3 - BOTTOM - RIGHT
+ pie.menu("PIE_MT_proportional_moreob", text="More", icon='LINCURVE')
+
+
+# Pie ProportionalEditEdt - O
+class PIE_MT_ProportionalEdt(Menu):
+ bl_idname = "PIE_MT_proportional_edt"
+ bl_label = "Pie Proportional Edit"
+
+ def draw(self, context):
+ layout = self.layout
+ pie = layout.menu_pie()
+ # 4 - LEFT
+ pie.operator("proportional_edt.smooth", text="Smooth", icon='SMOOTHCURVE')
+ # 6 - RIGHT
+ pie.operator("proportional_edt.sphere", text="Sphere", icon='SPHERECURVE')
+ # 2 - BOTTOM
+ pie.operator("proportional_edt.inversesquare", text="Inverse Square", icon='INVERSESQUARECURVE')
+ # 8 - TOP
+ pie.operator("proportional_edt.active", text="Proportional On/Off", icon='PROP_ON')
+ # 7 - TOP - LEFT
+ pie.operator("proportional_edt.connected", text="Connected", icon='PROP_CON')
+ # 9 - TOP - RIGHT
+ pie.operator("proportional_edt.projected", text="Projected", icon='PROP_ON')
+ # 1 - BOTTOM - LEFT
+ pie.operator("proportional_edt.root", text="Root", icon='ROOTCURVE')
+ # 3 - BOTTOM - RIGHT
+ pie.menu("PIE_MT_proportional_more", text="More", icon='LINCURVE')
+
+
+# Pie ProportionalEditEdt - O
+class PIE_MT_ProportionalMore(Menu):
+ bl_idname = "PIE_MT_proportional_more"
+ bl_label = "Pie Proportional More"
+
+ def draw(self, context):
+ layout = self.layout
+ pie = layout.menu_pie()
+ box = pie.split().column()
+ box.operator("proportional_edt.sharp", text="Sharp", icon='SHARPCURVE')
+ box.operator("proportional_edt.linear", text="Linear", icon='LINCURVE')
+ box.operator("proportional_edt.constant", text="Constant", icon='NOCURVE')
+ box.operator("proportional_edt.random", text="Random", icon='RNDCURVE')
+
+
+# Pie ProportionalEditEdt2
+class PIE_MT_proportionalmoreob(Menu):
+ bl_idname = "PIE_MT_proportional_moreob"
+ bl_label = "Pie Proportional More"
+
+ def draw(self, context):
+ layout = self.layout
+ pie = layout.menu_pie()
+ box = pie.split().column()
+ box.operator("proportional_obj.constant", text="Constant", icon='NOCURVE')
+ box.operator("proportional_obj.random", text="Random", icon='RNDCURVE')
+
+
+
+classes = (
+ PIE_OT_ProportionalEditObj,
+ PIE_OT_ProportionalSmoothObj,
+ PIE_OT_ProportionalSphereObj,
+ PIE_OT_ProportionalRootObj,
+ PIE_OT_ProportionalSharpObj,
+ PIE_OT_ProportionalLinearObj,
+ PIE_OT_ProportionalConstantObj,
+ PIE_OT_ProportionalRandomObj,
+ PIE_OT_ProportionalInverseSquareObj,
+ PIE_OT_ProportionalEditEdt,
+ PIE_OT_ProportionalConnectedEdt,
+ PIE_OT_ProportionalProjectedEdt,
+ PIE_OT_ProportionalSmoothEdt,
+ PIE_OT_ProportionalSphereEdt,
+ PIE_OT_ProportionalRootEdt,
+ PIE_OT_ProportionalSharpEdt,
+ PIE_OT_ProportionalLinearEdt,
+ PIE_OT_ProportionalConstantEdt,
+ PIE_OT_ProportionalRandomEdt,
+ PIE_OT_ProportionalInverseSquareEdt,
+ PIE_MT_ProportionalObj,
+ PIE_MT_ProportionalEdt,
+ PIE_MT_ProportionalMore,
+ PIE_MT_proportionalmoreob
+ )
+
+addon_keymaps = []
+
+
+def register():
+ for cls in classes:
+ bpy.utils.register_class(cls)
+
+ wm = bpy.context.window_manager
+ if wm.keyconfigs.addon:
+ # ProportionalEditObj
+ km = wm.keyconfigs.addon.keymaps.new(name='Object Mode')
+ kmi = km.keymap_items.new('wm.call_menu_pie', 'O', 'PRESS', shift=True)
+ kmi.properties.name = "PIE_MT_proportional_obj"
+ addon_keymaps.append((km, kmi))
+
+ # ProportionalEditEdt
+ km = wm.keyconfigs.addon.keymaps.new(name='Mesh')
+ kmi = km.keymap_items.new('wm.call_menu_pie', 'O', 'PRESS', shift=True)
+ kmi.properties.name = "PIE_MT_proportional_edt"
+ addon_keymaps.append((km, kmi))
+
+
+def unregister():
+ for cls in classes:
+ bpy.utils.unregister_class(cls)
+
+ wm = bpy.context.window_manager
+ kc = wm.keyconfigs.addon
+ if kc:
+ for km, kmi in addon_keymaps:
+ km.keymap_items.remove(kmi)
+ addon_keymaps.clear()
+
+
+if __name__ == "__main__":
+ register()