[Bf-extensions-cvs] [32b977d] master: Stored Views: cleanup, refactor, various fixes

lijenstina noreply at git.blender.org
Fri May 12 02:00:08 CEST 2017


Commit: 32b977d1b2f4abb9f09308636ba10c224c6a76f6
Author: lijenstina
Date:   Fri May 12 01:59:08 2017 +0200
Branches: master
https://developer.blender.org/rBA32b977d1b2f4abb9f09308636ba10c224c6a76f6

Stored Views: cleanup, refactor, various fixes

Bumped version to 0.3.6
Pep 8 cleanup
Remove the logger setup, uncomment the log calls in the sripts
Replace deprecated imp call with importlib
Add AddonPreferences settings importers, draw update
Fix crash with New Camera To View
if there is no object present

Fix import, export BLSV crashes:
No file was selected during import
Pickle crashes during export with Vectors, Quaternions
Crash with import if the scene wasn't initialized

Finish the IO user interface switchable from the preferences
Finish Import from an another scene - scene selection
was missing making the feature not working

Replace type comparisons with isinstance
Fix the 3D view text alignment so it doesn't show bellow the
properties area
Fix the 3d view draw crash when opening the File Browser
Fix crash with Material enum missing in DisplayData

===================================================================

M	stored_views/__init__.py
M	stored_views/core.py
M	stored_views/io.py
M	stored_views/operators.py
M	stored_views/properties.py
M	stored_views/ui.py

===================================================================

diff --git a/stored_views/__init__.py b/stored_views/__init__.py
index cfc0beb..8deca8f 100644
--- a/stored_views/__init__.py
+++ b/stored_views/__init__.py
@@ -18,73 +18,113 @@
 
 bl_info = {
     "name": "Stored Views",
-    "description": "Save and restore User defined views, pov, layers and display configs.",
+    "description": "Save and restore User defined views, pov, layers and display configs",
     "author": "nfloyd, Francesco Siddi",
-    "version": (0, 3, 4,),
+    "version": (0, 3, 6),
     "blender": (2, 7, 8),
     "location": "View3D > Properties > Stored Views",
-    "warning": 'beta release, single view only',
-    "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.5/Py/Scripts/3D_interaction/stored_views",
-    "tracker_url": "https://developer.blender.org/maniphest/task/edit/form/2/",
+    "warning": "",
+    "wiki_url": "https://wiki.blender.org/index.php/Extensions:2.5/"
+                "Py/Scripts/3D_interaction/stored_views",
     "category": "3D View"}
 
-# ACKNOWLEDGMENT
-# ==============
-# import/export functionality is mostly based
-#   on Bart Crouch's Theme Manager Addon
+"""
+ACKNOWLEDGMENT
+==============
+import/export functionality is mostly based
+on Bart Crouch's Theme Manager Addon
 
-# TODO: check against 2.63
-# TODO: quadview complete support : investigate. Where's the data?
-# TODO: lock_camera_and_layers. investigate usage
-# TODO: list reordering
+TODO: quadview complete support : investigate. Where's the data?
+TODO: lock_camera_and_layers. investigate usage
+TODO: list reordering
 
-# logging setup
-'''
-import logging
-
-logger = logging.getLogger(__name__)
-logger.setLevel(logging.DEBUG)
-hdlr = logging.StreamHandler()
-fmtr = logging.Formatter('%(asctime)s %(levelname)s %(name)s : %(funcName)s - %(message)s')
-hdlr.setFormatter(fmtr)
-logger.addHandler(hdlr)
-'''
+NOTE: logging setup has to be provided by the user in a separate config file
+    as Blender will not try to configure logging by default in an add-on
+    The Config File should be in the Blender Config folder > /scripts/startup/config_logging.py
+    For setting up /location of the config folder see:
+    https://docs.blender.org/manual/en/dev/getting_started/
+    installing/configuration/directories.html
+    For configuring logging itself in the file, general Python documentation should work
+    As the logging calls are not configured, they can be kept in the other modules of this add-on
+    and will not have output until the logging configuration is set up
+"""
 
 if "bpy" in locals():
-    import imp
-    imp.reload(ui)
-    imp.reload(properties)
-    imp.reload(core)
-    imp.reload(operators)
-    imp.reload(io)
+    import importlib
+    importlib.reload(core)
+    importlib.reload(ui)
+    importlib.reload(properties)
+    importlib.reload(operators)
+    importlib.reload(io)
 else:
-    #from . import properties, core
-    from . import ui, properties, core, operators, io
+    from . import core
+    from . import ui
+    from . import properties
+    from . import operators
+    from . import io
 
 import bpy
-from bpy.props import PointerProperty
+from bpy.props import (
+        BoolProperty,
+        IntProperty,
+        PointerProperty,
+        )
+from bpy.types import (
+        AddonPreferences,
+        Operator,
+        )
 
 
-class VIEW3D_stored_views_initialize(bpy.types.Operator):
+class VIEW3D_stored_views_initialize(Operator):
     bl_idname = "view3d.stored_views_initialize"
-    bl_label = "Initilize"
+    bl_label = "Initialize"
 
     @classmethod
     def poll(cls, context):
         return not hasattr(bpy.types.Scene, 'stored_views')
 
     def execute(self, context):
-        bpy.types.Scene.stored_views = PointerProperty(type=properties.StoredViewsData)
+        bpy.types.Scene.stored_views = PointerProperty(
+                                            type=properties.StoredViewsData
+                                            )
         scenes = bpy.data.scenes
         for scene in scenes:
             core.DataStore.sanitize_data(scene)
         return {'FINISHED'}
 
 
+# Addon Preferences
+
+class VIEW3D_stored_views_preferences(AddonPreferences):
+    bl_idname = __name__
+
+    show_exporters = BoolProperty(
+            name="Enable I/O Operators",
+            default=False,
+            description="Enable Import/Export Operations in the UI:\n"
+                        "Import Stored Views preset,\n"
+                        "Export Stored Views preset and \n"
+                        "Import stored views from scene",
+            )
+    view_3d_update_rate = IntProperty(
+            name="3D view update",
+            description="Update rate of the 3D view redraw\n"
+                        "Increse the value if the UI feels sluggish",
+            min=1, max=10,
+            default=1
+            )
+
+    def draw(self, context):
+        layout = self.layout
+
+        row = layout.row(align=True)
+        row.prop(self, "view_3d_update_rate", toggle=True)
+        row.prop(self, "show_exporters", toggle=True)
+
+
 def register():
     bpy.utils.register_module(__name__)
-    # Context restricted, need to initialize different (button to be clicked by user)
-    #initialize()
+
 
 def unregister():
     ui.VIEW3D_stored_views_draw.handle_remove(bpy.context)
@@ -92,5 +132,6 @@ def unregister():
     if hasattr(bpy.types.Scene, "stored_views"):
         del bpy.types.Scene.stored_views
 
+
 if __name__ == "__main__":
     register()
diff --git a/stored_views/core.py b/stored_views/core.py
index 21e49b3..34f57df 100644
--- a/stored_views/core.py
+++ b/stored_views/core.py
@@ -1,15 +1,25 @@
-'''
+# gpl authors: nfloyd, Francesco Siddi
+
+
 import logging
 module_logger = logging.getLogger(__name__)
-'''
-import hashlib
 
+import hashlib
 import bpy
 
 
+# Utility function get preferences setting for exporters
+def get_preferences():
+    # replace the key if the add-on name changes
+    addon = bpy.context.user_preferences.addons["stored_views"]
+    show_warn = (addon.preferences.show_exporters if addon else False)
+
+    return show_warn
+
+
 class StoredView():
     def __init__(self, mode, index=None):
-#        self.logger = logging.getLogger('%s.StoredView' % __name__)
+        self.logger = logging.getLogger('%s.StoredView' % __name__)
         self.scene = bpy.context.scene
         self.view3d = bpy.context.space_data
         self.index = index
@@ -21,12 +31,12 @@ class StoredView():
         else:
             stored_view = self.data_store.get(self.index)
         self.from_v3d(stored_view)
-#        self.logger.debug('index: %s name: %s' % (self.data_store.current_index, stored_view.name))
+        self.logger.debug('index: %s name: %s' % (self.data_store.current_index, stored_view.name))
 
     def set(self):
         stored_view = self.data_store.get(self.index)
         self.update_v3d(stored_view)
-#        self.logger.debug('index: %s name: %s' % (self.data_store.current_index, stored_view.name))
+        self.logger.debug('index: %s name: %s' % (self.data_store.current_index, stored_view.name))
 
     def from_v3d(self, stored_view):
         raise NotImplementedError("Subclass must implement abstract method")
@@ -42,7 +52,7 @@ class StoredView():
 class POV(StoredView):
     def __init__(self, index=None):
         super().__init__(mode='POV', index=index)
-#        self.logger = logging.getLogger('%s.POV' % __name__)
+        self.logger = logging.getLogger('%s.POV' % __name__)
 
     def from_v3d(self, stored_view):
         view3d = self.view3d
@@ -61,7 +71,7 @@ class POV(StoredView):
             stored_view.camera_type = view3d.camera.type  # type : 'CAMERA' or 'MESH'
             stored_view.camera_name = view3d.camera.name  # store string instead of object
             stored_view.camera_pointer = view3d.camera.as_pointer()
-        if view3d.lock_object != None:
+        if view3d.lock_object is not None:
             stored_view.lock_object_name = view3d.lock_object.name  # idem
             stored_view.lock_object_pointer = view3d.lock_object.as_pointer()  # idem
 
@@ -79,7 +89,7 @@ class POV(StoredView):
         view3d.clip_start = stored_view.clip_start
         view3d.clip_end = stored_view.clip_end
         view3d.lock_cursor = stored_view.lock_cursor
-        if stored_view.lock_cursor == True:
+        if stored_view.lock_cursor is True:
             # update cursor only if view is locked to cursor
             view3d.cursor_location = stored_view.cursor_location
 
@@ -120,18 +130,19 @@ class POV(StoredView):
 
     @staticmethod
     def is_modified(context, stored_view):
-        # TODO: check for others param, currently only perspectiveand perspective_matrix are checked
-#        logger = logging.getLogger('%s.POV' % __name__)
+        # TODO: check for others param, currently only perspective
+        # and perspective_matrix are checked
+        POV.logger = logging.getLogger('%s.POV' % __name__)
         view3d = context.space_data
         region3d = view3d.region_3d
         if region3d.view_perspective != stored_view.perspective:
-#            logger.debug('view_perspective')
+            POV.logger.debug('view_perspective')
             return True
 
         md5 = POV._get_perspective_matrix_md5(region3d)
         if (md5 != stored_view.perspective_matrix_md5 and
-            region3d.view_perspective != "CAMERA"):
-#            logger.debug('perspective_matrix')
+          region3d.view_perspective != "CAMERA"):
+            POV.logger.debug('perspective_matrix')
             return True
 
         return False
@@ -145,7 +156,7 @@ class POV(StoredView):
 class Layers(StoredView):
     def __init__(self, index=None):
         super().__init__(mode='LAYERS', index=index)
-#        self.logger = logging.getLogger('%s.Layers' % __name__)
+        self.logger = logging.getLogger('%s.Layers' % __name__)
 
     def from_v3d(self, stored_view):
         view3d = self.view3d
@@ -156,26 +167,25 @@ class Layers(StoredView):
     def update_v3d(self, stored_view):
         view3d = self.view3d
         view3d.lock_camera_and_layers = stored_view.lock_camera_and_layers
-        if stored_view.lock_camera_and_layers == True:
+        if store

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list