[Bf-extensions-cvs] [d69f8b1d] master: space_view3d_stored_views: test file for single file script

meta-androcto noreply at git.blender.org
Sat Jun 8 09:03:57 CEST 2019


Commit: d69f8b1dfbc8e91a7b322e0bb6f88e08d0d16fcc
Author: meta-androcto
Date:   Sat Jun 8 17:03:16 2019 +1000
Branches: master
https://developer.blender.org/rBACd69f8b1dfbc8e91a7b322e0bb6f88e08d0d16fcc

space_view3d_stored_views: test file for single file script

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

A	space_view3d_stored_views/stored_views_test.py

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

diff --git a/space_view3d_stored_views/stored_views_test.py b/space_view3d_stored_views/stored_views_test.py
new file mode 100644
index 00000000..fa4866f0
--- /dev/null
+++ b/space_view3d_stored_views/stored_views_test.py
@@ -0,0 +1,1371 @@
+# ##### 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 #####
+
+bl_info = {
+    "name": "Stored Views",
+    "description": "Save and restore User defined views, pov, layers and display configs",
+    "author": "nfloyd, Francesco Siddi",
+    "version": (0, 3, 7),
+    "blender": (2, 80, 0),
+    "location": "View3D > Properties > Stored Views",
+    "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
+
+TODO: quadview complete support : investigate. Where's the data?
+TODO: lock_camera_and_layers. investigate usage
+TODO: list reordering
+
+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
+"""
+
+
+import bpy
+from bpy.props import (
+    BoolProperty,
+    IntProperty,
+    PointerProperty,
+)
+from bpy.types import (
+    AddonPreferences,
+    Operator,
+    Panel
+)
+
+import logging
+module_logger = logging.getLogger(__name__)
+
+import gzip
+import os
+import pickle
+import shutil
+
+from bpy_extras.io_utils import (
+    ExportHelper,
+    ImportHelper,
+)
+
+import blf
+
+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.preferences.addons[__package__]
+    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.scene = bpy.context.scene
+        self.view3d = bpy.context.space_data
+        self.index = index
+        self.data_store = DataStore(mode=mode)
+
+    def save(self):
+        if self.index == -1:
+            stored_view, self.index = self.data_store.create()
+        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))
+
+    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))
+
+    def from_v3d(self, stored_view):
+        raise NotImplementedError("Subclass must implement abstract method")
+
+    def update_v3d(self, stored_view):
+        raise NotImplementedError("Subclass must implement abstract method")
+
+    @staticmethod
+    def is_modified(context, stored_view):
+        raise NotImplementedError("Subclass must implement abstract method")
+
+
+class POV(StoredView):
+    def __init__(self, index=None):
+        super().__init__(mode='POV', index=index)
+        self.logger = logging.getLogger('%s.POV' % __name__)
+
+    def from_v3d(self, stored_view):
+        view3d = self.view3d
+        region3d = view3d.region_3d
+
+        stored_view.distance = region3d.view_distance
+        stored_view.location = region3d.view_location
+        stored_view.rotation = region3d.view_rotation
+        stored_view.perspective_matrix_md5 = POV._get_perspective_matrix_md5(region3d)
+        stored_view.perspective = region3d.view_perspective
+        stored_view.lens = view3d.lens
+        stored_view.clip_start = view3d.clip_start
+        stored_view.clip_end = view3d.clip_end
+
+        if region3d.view_perspective == 'CAMERA':
+            stored_view.camera_type = view3d.camera.type  # type : 'CAMERA' or 'MESH'
+            stored_view.camera_name = view3d.camera.name  # store string instead of object
+        if view3d.lock_object is not None:
+            stored_view.lock_object_name = view3d.lock_object.name  # idem
+        else:
+            stored_view.lock_object_name = ""
+        stored_view.lock_cursor = view3d.lock_cursor
+        stored_view.cursor_location = view3d.cursor_location
+
+    def update_v3d(self, stored_view):
+        view3d = self.view3d
+        region3d = view3d.region_3d
+        region3d.view_distance = stored_view.distance
+        region3d.view_location = stored_view.location
+        region3d.view_rotation = stored_view.rotation
+        region3d.view_perspective = stored_view.perspective
+        view3d.lens = stored_view.lens
+        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 is True:
+            # update cursor only if view is locked to cursor
+            view3d.cursor_location = stored_view.cursor_location
+
+        if stored_view.perspective == "CAMERA":
+
+            lock_obj = self._get_object(stored_view.lock_object_name)
+            if lock_obj:
+                view3d.lock_object = lock_obj
+            else:
+                cam = self._get_object(stored_view.camera_name)
+                if cam:
+                    view3d.camera = cam
+
+    @staticmethod
+    def _get_object(name, pointer=None):
+        return bpy.data.objects.get(name)
+
+    @staticmethod
+    def is_modified(context, stored_view):
+        # 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:
+            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"):
+            POV.logger.debug('perspective_matrix')
+            return True
+
+        return False
+
+    @staticmethod
+    def _get_perspective_matrix_md5(region3d):
+        md5 = hashlib.md5(str(region3d.perspective_matrix).encode('utf-8')).hexdigest()
+        return md5
+
+
+class Layers(StoredView):
+    def __init__(self, index=None):
+        super().__init__(mode='LAYERS', index=index)
+        self.logger = logging.getLogger('%s.Layers' % __name__)
+
+    def from_v3d(self, stored_view):
+        view3d = self.view3d
+        stored_view.view_layers = view3d.layers
+        stored_view.scene_layers = self.scene.layers
+        stored_view.lock_camera_and_layers = view3d.lock_camera_and_layers
+
+    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 is True:
+            self.scene.layers = stored_view.scene_layers
+        else:
+            view3d.layers = stored_view.view_layers
+
+    @staticmethod
+    def is_modified(context, stored_view):
+        Layers.logger = logging.getLogger('%s.Layers' % __name__)
+        if stored_view.lock_camera_and_layers != context.space_data.lock_camera_and_layers:
+            Layers.logger.debug('lock_camera_and_layers')
+            return True
+        if stored_view.lock_camera_and_layers is True:
+            for i in range(20):
+                if stored_view.scene_layers[i] != context.scene.layers[i]:
+                    Layers.logger.debug('scene_layers[%s]' % (i, ))
+                    return True
+        else:
+            for i in range(20):
+                if stored_view.view_layers[i] != context.space_data.view3d.layers[i]:
+                    return True
+        return False
+
+
+class Display(StoredView):
+    def __init__(self, index=None):
+        super().__init__(mode='DISPLAY', index=index)
+        self.logger = logging.getLogger('%s.Display' % __name__)
+
+    def from_v3d(self, stored_view):
+        view3d = self.view3d
+        stored_view.viewport_shade = view3d.viewport_shade
+        stored_view.show_only_render = view3d.show_only_render
+        stored_view.show_outline_selected = view3d.show_outline_selected
+        stored_view.show_all_objects_origin = view3d.show_all_objects_origin
+        stored_view.show_relationship_lines = view3d.show_relationship_lines
+        stored_view.show_floor = view3d.show_floor
+        stored_view.show_axis_x = view3d.show_axis_x
+        stored_view.show_axis_y = view3d.show_axis_y
+        stored_view.show_axis_z = view3d.show_axis_z
+        stored_view.grid_lines = view3d.grid_lines
+        stored_view.grid_scale = view3d.grid_scale
+        stored_view.grid_subdivisions = view3d.gri

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list