[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