[Bf-extensions-cvs] [2d63b659] master: Stored Views: Update add camera selector by fsiddi

meta-androcto noreply at git.blender.org
Tue Apr 11 02:49:51 CEST 2017


Commit: 2d63b659643ce03680fd31bdb849ce597786eff2
Author: meta-androcto
Date:   Tue Apr 11 10:49:32 2017 +1000
Branches: master
https://developer.blender.org/rBAC2d63b659643ce03680fd31bdb849ce597786eff2

Stored Views: Update add camera selector by fsiddi

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

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

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

diff --git a/stored_views/__init__.py b/stored_views/__init__.py
index 74aeb369..b4184e7b 100644
--- a/stored_views/__init__.py
+++ b/stored_views/__init__.py
@@ -19,8 +19,8 @@
 bl_info = {
     "name": "Stored Views",
     "description": "Save and restore User defined views, pov, layers and display configs.",
-    "author": "nfloyd",
-    "version": (0, 3, 3, 'beta'),
+    "author": "nfloyd, Francesco Siddi",
+    "version": (0, 3, 3,),
     "blender": (2, 71, 0),
     "location": "View3D > Properties > Stored Views",
     "warning": 'beta release, single view only',
diff --git a/stored_views/io.py b/stored_views/io.py
index 652947d1..862b2f92 100644
--- a/stored_views/io.py
+++ b/stored_views/io.py
@@ -60,7 +60,7 @@ class IO_Utils():
         dump["info"]["script"] = bl_info['name']
         dump["info"]["script_version"] = bl_info['version']
         dump["info"]["version"] = bpy.app.version
-        dump["info"]["build_revision"] = bpy.app.build_revision
+#        dump["info"]["build_revision"] = bpy.app.build_revision
         dump["info"]["preset_name"] = name
 
         # get current stored views settings
@@ -121,13 +121,13 @@ class IO_Utils():
         # save to file
         filepath = filepath
         filepath = bpy.path.ensure_ext(filepath, '.blsv')
-        file = gzip.open(filepath, mode='w')
-        pickle.dump(dump, file)
+        file = gzip.open(filepath, mode='wb')
+        pickle.dump(dump, file, protocol=pickle.HIGHEST_PROTOCOL)
         file.close()
 
     @staticmethod
     def stored_views_apply_preset(filepath, replace=True):
-        file = gzip.open(filepath, mode='r')
+        file = gzip.open(filepath, mode='rb')
         dump = pickle.load(file)
         file.close()
 
diff --git a/stored_views/operators.py b/stored_views/operators.py
index 153d049f..ee254942 100644
--- a/stored_views/operators.py
+++ b/stored_views/operators.py
@@ -1,6 +1,7 @@
 import bpy
-from bpy.props import IntProperty
 
+from bpy.props import (FloatProperty, BoolProperty, IntProperty,
+                       FloatVectorProperty, StringProperty, EnumProperty)
 from . core import stored_view_factory, DataStore
 from . ui import init_draw
 
@@ -51,3 +52,106 @@ class VIEW3D_stored_views_delete(bpy.types.Operator):
         data.delete(self.index)
 
         return {'FINISHED'}
+
+class VIEW3D_New_Camera_to_View(bpy.types.Operator):
+    bl_idname = "stored_views.newcamera"
+    bl_label = "New Camera To View"
+    bl_description = "Add a new Casmera Active & Aligned to this view"
+
+    def execute(self, context):
+        bpy.ops.object.mode_set(mode='OBJECT')
+
+        bpy.ops.object.camera_add(
+            view_align=True)
+        cam = bpy.context.active_object
+        bpy.ops.view3d.object_as_camera()
+        bpy.ops.view3d.camera_to_view()
+
+
+        # this will name the Camera Object
+        if 'View_Camera' not in context.scene.objects:
+            cam.name = "View_Camera"
+        else:
+            cam.name = "View_Camera.000"
+
+        return {'FINISHED'}
+
+### Camera marker & switcher by Fsiddi        
+class SetSceneCamera(bpy.types.Operator):
+    bl_idname = "cameraselector.set_scene_camera"
+    bl_label = "Set Scene Camera"
+    bl_description = "Set chosen camera as the scene's active camera."
+
+    chosen_camera = bpy.props.StringProperty()
+    select_chosen = False
+
+    def execute(self, context):
+        chosen_camera = bpy.data.objects.get(self.chosen_camera, None)
+        scene = context.scene
+        if not chosen_camera:
+            self.report({'ERROR'}, "Camera %s not found.")
+            return {'CANCELLED'}
+
+        if self.select_chosen:
+            if context.mode == 'OBJECT':
+                for o in context.selected_objects:
+                    o.select = False
+                chosen_camera.select = True
+                scene.objects.active = chosen_camera
+            for c in [o for o in scene.objects if o.type == 'CAMERA']:
+                c.hide = (c != chosen_camera)
+        scene.camera = chosen_camera
+        bpy.context.scene.objects.active = chosen_camera
+        bpy.ops.object.select_all(action='TOGGLE')
+        chosen_camera.select = True 
+        return {'FINISHED'}
+
+    def invoke(self, context, event):
+        if event.ctrl:
+            self.select_chosen = True
+
+        return self.execute(context)
+
+
+class AddCameraMarker(bpy.types.Operator):
+    bl_idname = "cameraselector.add_camera_marker"
+    bl_label = "Add Camera Marker"
+    bl_description = "Add a timeline marker bound to chosen camera."
+
+    chosen_camera = bpy.props.StringProperty()
+
+    def execute(self, context):
+        chosen_camera = bpy.data.objects.get(self.chosen_camera, None)
+        scene = context.scene
+        if not chosen_camera:
+            self.report({'ERROR'}, "Camera %s not found.")
+            return {'CANCELLED'}
+
+        current_frame = scene.frame_current
+        marker = None
+        for m in reversed(sorted(filter(lambda m: m.frame <= current_frame,
+                                        scene.timeline_markers),
+                                 key=lambda m: m.frame)):
+            marker = m
+            break
+        if marker and (marker.camera == chosen_camera):
+            # Cancel if the last marker at or immediately before
+            # current frame is already bound to the camera.
+            return {'CANCELLED'}
+
+        marker_name = "F_%02d_%s" % (current_frame, self.chosen_camera)
+        if marker and (marker.frame == current_frame):
+            # Reuse existing marker at current frame to avoid
+            # overlapping bound markers.
+            marker.name = marker_name
+        else:
+            marker = scene.timeline_markers.new(marker_name)
+        marker.frame = scene.frame_current
+        marker.camera = chosen_camera
+        marker.select = True
+
+        for other_marker in [m for m in scene.timeline_markers if m != marker]:
+            other_marker.select = False
+
+        return {'FINISHED'}
+        
\ No newline at end of file
diff --git a/stored_views/ui.py b/stored_views/ui.py
index 06250d03..d31e34cf 100644
--- a/stored_views/ui.py
+++ b/stored_views/ui.py
@@ -147,6 +147,8 @@ class VIEW3D_PT_properties_stored_views(bpy.types.Panel):
         col.prop_enum(stored_views, "mode", 'VIEW')
         row = layout.row()
         row.operator("view3d.camera_to_view", text="Camera To view")
+        row.operator("stored_views.newcamera", text="New Camera To view")
+        
         row = col.row(align=True)
         row.prop_enum(stored_views, "mode", 'POV')
         row.prop_enum(stored_views, "mode", 'LAYERS')
@@ -208,3 +210,22 @@ class VIEW3D_PT_properties_stored_views(bpy.types.Panel):
                                 text="", icon="REC").index = i
                 subrow.operator("stored_views.delete",
                                 text="", icon="PANEL_CLOSE").index = i
+
+        layout = self.layout
+        scene = context.scene
+        layout.label("Camera Selector")
+        cameras = sorted([o for o in scene.objects if o.type == 'CAMERA'],
+                         key=lambda o: o.name)
+
+        if len(cameras) > 0:
+            for camera in cameras:
+                row = layout.row(align=True)
+                btn = row.operator("cameraselector.set_scene_camera",
+                                   text=camera.name, icon='OUTLINER_DATA_CAMERA')
+                btn.chosen_camera = camera.name
+
+                btn = row.operator("cameraselector.add_camera_marker",
+                                   text='', icon='MARKER')
+                btn.chosen_camera = camera.name
+        else:
+            layout.label("No cameras in this scene")



More information about the Bf-extensions-cvs mailing list