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-05-31 07:26:08 +0300
committerlijenstina <lijenstina@gmail.com>2017-05-31 07:26:08 +0300
commit04a688cca54be0280491a81089310b88d11683ba (patch)
treef461d4d21c46d7e7a83b1d2b7337652392c5498d /space_view3d_3d_navigation.py
parent91083be457c2c76463db8e5a9f9f3bee677dacdc (diff)
3D Navigation: Update panel Rename, fix the view_pan context
Bumped version to 1.2.2 Pep8 cleanup As a part of the task T50726: Update the Panel rename code to more generic one Small cleanup merge the pan Operators into one fix the error with the invoke context of the view_pan needed INVOKE_REGION_WIN to be passed on
Diffstat (limited to 'space_view3d_3d_navigation.py')
-rw-r--r--space_view3d_3d_navigation.py310
1 files changed, 163 insertions, 147 deletions
diff --git a/space_view3d_3d_navigation.py b/space_view3d_3d_navigation.py
index 9218d5f5..a4c359cc 100644
--- a/space_view3d_3d_navigation.py
+++ b/space_view3d_3d_navigation.py
@@ -2,7 +2,7 @@
#
# THIS SCRIPT IS LICENSED UNDER GPL,
# please read the license block.
-#
+
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
@@ -25,203 +25,198 @@
bl_info = {
"name": "3D Navigation",
"author": "Demohero, uriel",
- "version": (1, 2, 1),
+ "version": (1, 2, 2),
"blender": (2, 77, 0),
"location": "View3D > Tool Shelf > Display Tab",
"description": "Navigate the Camera & 3D View from the Toolshelf",
"warning": "",
- "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/"
+ "wiki_url": "https://wiki.blender.org/index.php/Extensions:2.6/Py/"
"Scripts/3D_interaction/3D_Navigation",
"category": "3D View",
}
-# import the basic library
import bpy
+from bpy.types import (
+ AddonPreferences,
+ Operator,
+ Panel,
+ )
+from bpy.props import StringProperty
+
# main class of this toolbar
-## re-ordered (reversed) Orbit Operators
-class OrbitUpView1(bpy.types.Operator):
- bl_idname = 'opr.orbit_up_view1'
- bl_label = 'Orbit Up View'
- bl_description = 'Orbit the view towards you'
+# re-ordered (reversed) Orbit Operators
+class OrbitUpView1(Operator):
+ bl_idname = "opr.orbit_up_view1"
+ bl_label = "Orbit Up View"
+ bl_description = "Orbit the view towards you"
def execute(self, context):
bpy.ops.view3d.view_orbit(type='ORBITUP')
return {'FINISHED'}
-class OrbitLeftView1(bpy.types.Operator):
- bl_idname = 'opr.orbit_left_view1'
- bl_label = 'Orbit Left View'
- bl_description = 'Orbit the view around to your Right'
+class OrbitLeftView1(Operator):
+ bl_idname = "opr.orbit_left_view1"
+ bl_label = "Orbit Left View"
+ bl_description = "Orbit the view around to your Right"
def execute(self, context):
bpy.ops.view3d.view_orbit(type='ORBITLEFT')
return {'FINISHED'}
-class OrbitRightView1(bpy.types.Operator):
- bl_idname = 'opr.orbit_right_view1'
- bl_label = 'Orbit Right View'
- bl_description = 'Orbit the view around to your Left'
+class OrbitRightView1(Operator):
+ bl_idname = "opr.orbit_right_view1"
+ bl_label = "Orbit Right View"
+ bl_description = "Orbit the view around to your Left"
def execute(self, context):
bpy.ops.view3d.view_orbit(type='ORBITRIGHT')
return {'FINISHED'}
-class OrbitDownView1(bpy.types.Operator):
- bl_idname = 'opr.orbit_down_view1'
- bl_label = 'Orbit Down View'
- bl_description = 'Orbit the view away from you'
+class OrbitDownView1(Operator):
+ bl_idname = "opr.orbit_down_view1"
+ bl_label = "Orbit Down View"
+ bl_description = "Orbit the view away from you"
def execute(self, context):
bpy.ops.view3d.view_orbit(type='ORBITDOWN')
return {'FINISHED'}
-## re-ordered (reversed) Pan Operators
-class PanUpView1(bpy.types.Operator):
- bl_idname = 'opr.pan_up_view1'
- bl_label = 'Pan Up View'
- bl_description = 'Pan the view Down'
- def execute(self, context):
- bpy.ops.view3d.view_pan(type='PANUP')
- return {'FINISHED'}
+# re-ordered (reversed) Pan Operators
+# just pass the enum from the VIEW3D_PT_pan_navigation1 Panel
+class PanUpViewsAll(Operator):
+ bl_idname = "opr.pan_up_views_all"
+ bl_label = "Pan View"
+ bl_description = "Pan the 3D View"
-
-class PanLeftView1(bpy.types.Operator):
- bl_idname = 'opr.pan_left_view1'
- bl_label = 'Pan Right View'
- bl_description = 'Pan the view to your Right'
+ panning = StringProperty(
+ default="PANUP",
+ options={"HIDDEN"}
+ )
def execute(self, context):
- bpy.ops.view3d.view_pan(type='PANLEFT')
- return {'FINISHED'}
+ try:
+ bpy.ops.view3d.view_pan("INVOKE_REGION_WIN", type=self.panning)
+ except Exception as e:
+ self.report({"WARNING"},
+ "Pan Views could not be completed. Operation Cancelled")
+ print("\n[3D Navigation]\nOperator: opr.pan_up_views_all\n {}\n".format(e))
+ return {"CANCELLED"}
-class PanRightView1(bpy.types.Operator):
- bl_idname = 'opr.pan_right_view1'
- bl_label = 'Pan Left View'
- bl_description = 'Pan the view to your Left'
-
- def execute(self, context):
- bpy.ops.view3d.view_pan(type='PANRIGHT')
return {'FINISHED'}
-class PanDownView1(bpy.types.Operator):
- bl_idname = 'opr.pan_down_view1'
- bl_label = 'Pan Down View'
- bl_description = 'Pan the view Up'
-
- def execute(self, context):
- bpy.ops.view3d.view_pan(type='PANDOWN')
- return {'FINISHED'}
-
-## Zoom Operators
-class ZoomInView1(bpy.types.Operator):
- bl_idname = 'opr.zoom_in_view1'
- bl_label = 'Zoom In View'
- bl_description = 'Zoom In the View/Camera View'
+# Zoom Operators
+class ZoomInView1(Operator):
+ bl_idname = "opr.zoom_in_view1"
+ bl_label = "Zoom In View"
+ bl_description = "Zoom In the View/Camera View"
def execute(self, context):
bpy.ops.view3d.zoom(delta=1)
return {'FINISHED'}
-class ZoomOutView1(bpy.types.Operator):
- bl_idname = 'opr.zoom_out_view1'
- bl_label = 'Zoom Out View'
- bl_description = 'Zoom out In the View/Camera View'
+class ZoomOutView1(Operator):
+ bl_idname = "opr.zoom_out_view1"
+ bl_label = "Zoom Out View"
+ bl_description = "Zoom out In the View/Camera View"
def execute(self, context):
bpy.ops.view3d.zoom(delta=-1)
return {'FINISHED'}
-## Roll Operators
-class RollLeftView1(bpy.types.Operator):
- bl_idname = 'opr.roll_left_view1'
- bl_label = 'Roll Left View'
- bl_description = 'Roll the view Left'
+
+# Roll Operators
+class RollLeftView1(Operator):
+ bl_idname = "opr.roll_left_view1"
+ bl_label = "Roll Left View"
+ bl_description = "Roll the view Left"
def execute(self, context):
bpy.ops.view3d.view_roll(angle=-0.261799)
return {'FINISHED'}
-class RollRightView1(bpy.types.Operator):
- bl_idname = 'opr.roll_right_view1'
- bl_label = 'Roll Right View'
- bl_description = 'Roll the view Right'
+class RollRightView1(Operator):
+ bl_idname = "opr.roll_right_view1"
+ bl_label = "Roll Right View"
+ bl_description = "Roll the view Right"
def execute(self, context):
bpy.ops.view3d.view_roll(angle=0.261799)
return {'FINISHED'}
-## View Operators
-class LeftViewpoint1(bpy.types.Operator):
- bl_idname = 'opr.left_viewpoint1'
- bl_label = 'Left Viewpoint'
- bl_description = 'View from the Left'
+
+# View Operators
+class LeftViewpoint1(Operator):
+ bl_idname = "opr.left_viewpoint1"
+ bl_label = "Left Viewpoint"
+ bl_description = "View from the Left"
def execute(self, context):
bpy.ops.view3d.viewnumpad(type='LEFT')
return {'FINISHED'}
-class RightViewpoint1(bpy.types.Operator):
- bl_idname = 'opr.right_viewpoint1'
- bl_label = 'Right Viewpoint'
- bl_description = 'View from the Right'
+class RightViewpoint1(Operator):
+ bl_idname = "opr.right_viewpoint1"
+ bl_label = "Right Viewpoint"
+ bl_description = "View from the Right"
def execute(self, context):
bpy.ops.view3d.viewnumpad(type='RIGHT')
return {'FINISHED'}
-class FrontViewpoint1(bpy.types.Operator):
- bl_idname = 'opr.front_viewpoint1'
- bl_label = 'Front Viewpoint'
- bl_description = 'View from the Front'
+class FrontViewpoint1(Operator):
+ bl_idname = "opr.front_viewpoint1"
+ bl_label = "Front Viewpoint"
+ bl_description = "View from the Front"
def execute(self, context):
bpy.ops.view3d.viewnumpad(type='FRONT')
return {'FINISHED'}
-class BackViewpoint1(bpy.types.Operator):
- bl_idname = 'opr.back_viewpoint1'
- bl_label = 'Back Viewpoint'
- bl_description = 'View from the Back'
+class BackViewpoint1(Operator):
+ bl_idname = "opr.back_viewpoint1"
+ bl_label = "Back Viewpoint"
+ bl_description = "View from the Back"
def execute(self, context):
bpy.ops.view3d.viewnumpad(type='BACK')
return {'FINISHED'}
-class TopViewpoint1(bpy.types.Operator):
- bl_idname = 'opr.top_viewpoint1'
- bl_label = 'Top Viewpoint'
- bl_description = 'View from the Top'
+class TopViewpoint1(Operator):
+ bl_idname = "opr.top_viewpoint1"
+ bl_label = "Top Viewpoint"
+ bl_description = "View from the Top"
def execute(self, context):
bpy.ops.view3d.viewnumpad(type='TOP')
return {'FINISHED'}
-class BottomViewpoint1(bpy.types.Operator):
- bl_idname = 'opr.bottom_viewpoint1'
- bl_label = 'Bottom Viewpoint'
- bl_description = 'View from the Bottom'
+class BottomViewpoint1(Operator):
+ bl_idname = "opr.bottom_viewpoint1"
+ bl_label = "Bottom Viewpoint"
+ bl_description = "View from the Bottom"
def execute(self, context):
bpy.ops.view3d.viewnumpad(type='BOTTOM')
return {'FINISHED'}
+
# Panel class of this toolbar
-class VIEW3D_PT_3dnavigationPanel(bpy.types.Panel):
+class VIEW3D_PT_3dnavigationPanel(Panel):
bl_category = "Display"
bl_space_type = "VIEW_3D"
bl_region_type = "TOOLS"
@@ -231,15 +226,15 @@ class VIEW3D_PT_3dnavigationPanel(bpy.types.Panel):
layout = self.layout
view = context.space_data
-# Triple boutons
+ # Triple buttons
col = layout.column(align=True)
- col.operator("view3d.localview", text="View Global/Local")
- col.operator("view3d.view_persportho", text="View Persp/Ortho")
+ col.operator("view3d.localview", text="View Global / Local")
+ col.operator("view3d.view_persportho", text="View Persp / Ortho")
col.operator("view3d.viewnumpad", text="View Camera", icon='CAMERA_DATA').type = 'CAMERA'
-# group of 6 buttons
+ # group of 6 buttons
col = layout.column(align=True)
- col.label(text="Align view from:")
+ col.label(text="Align view from:", icon="VIEW3D")
row = col.row()
row.operator("view3d.viewnumpad", text="Front").type = 'FRONT'
row.operator("view3d.viewnumpad", text="Back").type = 'BACK'
@@ -250,106 +245,123 @@ class VIEW3D_PT_3dnavigationPanel(bpy.types.Panel):
row.operator("view3d.viewnumpad", text="Top").type = 'TOP'
row.operator("view3d.viewnumpad", text="Bottom").type = 'BOTTOM'
-# group of 2 buttons
+ # group of 2 buttons
col = layout.column(align=True)
- col.label(text="Lock View to Object:")
+ col.label(text="Lock View to Object:", icon="LOCKED")
col.prop(view, "lock_object", text="")
col.operator("view3d.view_selected", text="View to Selected")
col = layout.column(align=True)
- col.label(text="Cursor:")
- row = col.row()
+ col.label(text="Cursor:", icon="CURSOR")
+ row = col.row(align=True)
row.operator("view3d.snap_cursor_to_center", text="Center")
row.operator("view3d.view_center_cursor", text="View")
col.operator("view3d.snap_cursor_to_selected", text="Cursor to Selected")
-class VIEW3D_PT_pan_navigation1(bpy.types.Panel):
- bl_idname = 'pan.navigation1'
- bl_label = 'Pan Orbit Zoom Roll'
- bl_space_type = 'VIEW_3D'
- bl_region_type = 'TOOLS'
- bl_category = 'Display'
+class VIEW3D_PT_pan_navigation1(Panel):
+ bl_idname = "pan.navigation1"
+ bl_label = "Pan Orbit Zoom Roll"
+ bl_space_type = "VIEW_3D"
+ bl_region_type = "TOOLS"
+ bl_category = "Display"
bl_options = {'DEFAULT_CLOSED'}
def draw(self, context):
layout = self.layout
- layout.label(text='Screen View Perspective')
+ layout.label(text="Screen View Perspective")
row = layout.row()
- row.label(text='Pan:')
+ row.label(text="Pan:")
row = layout.row()
- row.operator('opr.pan_down_view1', text='Up', icon='TRIA_UP')
- row.operator('opr.pan_up_view1', text='Down', icon='TRIA_DOWN')
+
+ row.operator("opr.pan_up_views_all", text="Up",
+ icon="TRIA_UP").panning = "PANDOWN"
+ row.operator("opr.pan_up_views_all", text="Down",
+ icon="TRIA_DOWN").panning = "PANUP"
row = layout.row()
- row.operator('opr.pan_right_view1', text='Left', icon='BACK')
- row.operator('opr.pan_left_view1', text='Right', icon='FORWARD')
+ row.operator("opr.pan_up_views_all", text="Left",
+ icon="BACK").panning = "PANRIGHT"
+ row.operator("opr.pan_up_views_all", text="Right",
+ icon="FORWARD").panning = "PANLEFT"
row = layout.row()
- row.label(text='Orbit:')
+ row.label(text="Orbit:")
row = layout.row()
- row.operator('opr.orbit_down_view1', text='Up', icon='TRIA_UP')
- row.operator('opr.orbit_up_view1', text='Down', icon='TRIA_DOWN')
+ row.operator("opr.orbit_down_view1", text="Up", icon="TRIA_UP")
+ row.operator("opr.orbit_up_view1", text="Down", icon="TRIA_DOWN")
row = layout.row()
- row.operator('opr.orbit_right_view1', text='Left', icon='BACK')
- row.operator('opr.orbit_left_view1', text='Right', icon='FORWARD')
+ row.operator("opr.orbit_right_view1", text="Left", icon="BACK")
+ row.operator("opr.orbit_left_view1", text="Right", icon="FORWARD")
row = layout.row()
- row.label(text='Zoom:')
+ row.label(text="Zoom:")
row = layout.row()
- row.operator('opr.zoom_in_view1', text='In', icon='ZOOMIN')
- row.operator('opr.zoom_out_view1', text='Out', icon='ZOOMOUT')
+ row.operator("opr.zoom_in_view1", text="In", icon="ZOOMIN")
+ row.operator("opr.zoom_out_view1", text="Out", icon="ZOOMOUT")
row = layout.row()
- row.label(text='Roll:')
+ row.label(text="Roll:")
row = layout.row()
- row.operator('opr.roll_left_view1', text='Left', icon='LOOP_BACK')
- row.operator('opr.roll_right_view1', text='Right', icon='LOOP_FORWARDS')
+ row.operator("opr.roll_left_view1", text="Left", icon="LOOP_BACK")
+ row.operator("opr.roll_right_view1", text="Right", icon="LOOP_FORWARDS")
+
+
+# Add-ons Preferences Update Panel
+
+# Define Panel classes for updating
+panels = (
+ VIEW3D_PT_3dnavigationPanel,
+ VIEW3D_PT_pan_navigation1,
+ )
+
-## Addons Preferences Update Panel
def update_panel(self, context):
+ message = ": Updating Panel locations has failed"
try:
- bpy.utils.unregister_class(VIEW3D_PT_3dnavigationPanel)
- bpy.utils.unregister_class(VIEW3D_PT_pan_navigation1)
- except:
+ for panel in panels:
+ if "bl_rna" in panel.__dict__:
+ bpy.utils.unregister_class(panel)
+
+ for panel in panels:
+ panel.bl_category = context.user_preferences.addons[__name__].preferences.category
+ bpy.utils.register_class(panel)
+
+ except Exception as e:
+ print("\n[{}]\n{}\n\nError:\n{}".format(__name__, message, e))
pass
- VIEW3D_PT_3dnavigationPanel.bl_category = context.user_preferences.addons[__name__].preferences.category
- bpy.utils.register_class(VIEW3D_PT_3dnavigationPanel)
- VIEW3D_PT_pan_navigation1.bl_category = context.user_preferences.addons[__name__].preferences.category
- bpy.utils.register_class(VIEW3D_PT_pan_navigation1)
-class NavAddonPreferences(bpy.types.AddonPreferences):
+
+class NavAddonPreferences(AddonPreferences):
# this must match the addon name, use '__package__'
# when defining this in a submodule of a python package.
bl_idname = __name__
- category = bpy.props.StringProperty(
+ category = StringProperty(
name="Tab Category",
description="Choose a name for the category of the panel",
default="Display",
- update=update_panel)
+ update=update_panel
+ )
def draw(self, context):
-
layout = self.layout
+
row = layout.row()
col = row.column()
col.label(text="Tab Category:")
col.prop(self, "category", text="")
-classes = [
+
+classes = (
VIEW3D_PT_3dnavigationPanel,
VIEW3D_PT_pan_navigation1,
OrbitUpView1,
OrbitLeftView1,
OrbitRightView1,
OrbitDownView1,
- PanUpView1,
- PanLeftView1,
- PanRightView1,
- PanDownView1,
ZoomInView1,
ZoomOutView1,
RollLeftView1,
@@ -361,17 +373,21 @@ classes = [
TopViewpoint1,
BottomViewpoint1,
NavAddonPreferences,
-]
+ PanUpViewsAll,
+)
-# register the class
+# Register
def register():
for cls in classes:
bpy.utils.register_class(cls)
update_panel(None, bpy.context)
+
+
def unregister():
for cls in classes:
bpy.utils.unregister_class(cls)
+
if __name__ == "__main__":
register()