diff options
author | meta-androcto <meta.androcto1@gmail.com> | 2019-06-15 03:59:45 +0300 |
---|---|---|
committer | meta-androcto <meta.androcto1@gmail.com> | 2019-06-15 03:59:45 +0300 |
commit | 20a8e9d3f58540cc85da396ca98ee0831903dd23 (patch) | |
tree | ef44bd591e72cba01cce178bedab31e09b4e3345 /space_view3d_stored_views/operators.py | |
parent | 15b00e9396dfdf955fa1122d2464d5e96f2810b6 (diff) |
space_view3d_stored_views: Restore release status: T63750 d9ffde707fe5
Diffstat (limited to 'space_view3d_stored_views/operators.py')
-rw-r--r-- | space_view3d_stored_views/operators.py | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/space_view3d_stored_views/operators.py b/space_view3d_stored_views/operators.py new file mode 100644 index 00000000..4cf8a2cf --- /dev/null +++ b/space_view3d_stored_views/operators.py @@ -0,0 +1,182 @@ +# gpl authors: nfloyd, Francesco Siddi + +import bpy +from bpy.props import IntProperty +from bpy.types import Operator +from .core import ( + stored_view_factory, + DataStore, + ) +from .ui import init_draw + + +class VIEW3D_stored_views_save(Operator): + bl_idname = "stored_views.save" + bl_label = "Save Current" + bl_description = "Save the view 3d current state" + + index : IntProperty() + + def execute(self, context): + mode = context.scene.stored_views.mode + sv = stored_view_factory(mode, self.index) + sv.save() + context.scene.stored_views.view_modified = False + init_draw(context) + + return {'FINISHED'} + + +class VIEW3D_stored_views_set(Operator): + bl_idname = "stored_views.set" + bl_label = "Set" + bl_description = "Update the view 3D according to this view" + + index : IntProperty() + + def execute(self, context): + mode = context.scene.stored_views.mode + sv = stored_view_factory(mode, self.index) + sv.set() + context.scene.stored_views.view_modified = False + init_draw(context) + + return {'FINISHED'} + + +class VIEW3D_stored_views_delete(Operator): + bl_idname = "stored_views.delete" + bl_label = "Delete" + bl_description = "Delete this view" + + index : IntProperty() + + def execute(self, context): + data = DataStore() + data.delete(self.index) + + return {'FINISHED'} + + +class VIEW3D_New_Camera_to_View(Operator): + bl_idname = "stored_views.newcamera" + bl_label = "New Camera To View" + bl_description = "Add a new Active Camera and align it to this view" + + @classmethod + def poll(cls, context): + return ( + context.space_data is not None and + context.space_data.type == 'VIEW_3D' and + context.space_data.region_3d.view_perspective != 'CAMERA' + ) + + def execute(self, context): + + if bpy.ops.object.mode_set.poll(): + bpy.ops.object.mode_set(mode='OBJECT') + + bpy.ops.object.camera_add() + cam = context.active_object + cam.name = "View_Camera" + # make active camera by hand + context.scene.camera = cam + + bpy.ops.view3d.camera_to_view() + return {'FINISHED'} + + +# Camera marker & switcher by Fsiddi +class SetSceneCamera(Operator): + bl_idname = "cameraselector.set_scene_camera" + bl_label = "Set Scene Camera" + bl_description = "Set chosen camera as the scene's active camera" + + hide_others = False + + def execute(self, context): + chosen_camera = context.active_object + scene = context.scene + + if self.hide_others: + for c in [o for o in scene.objects if o.type == 'CAMERA']: + c.hide = (c != chosen_camera) + scene.camera = chosen_camera + bpy.ops.object.select_all(action ='DESELECT') + chosen_camera.select_set(True) + return {'FINISHED'} + + def invoke(self, context, event): + if event.ctrl: + self.hide_others = True + + return self.execute(context) + + +class PreviewSceneCamera(Operator): + bl_idname = "cameraselector.preview_scene_camera" + bl_label = "Preview Camera" + bl_description = "Preview chosen camera and make scene's active camera" + + def execute(self, context): + chosen_camera = context.active_object + bpy.ops.view3d.object_as_camera() + bpy.ops.object.select_all(action="DESELECT") + chosen_camera.select_set(True) + return {'FINISHED'} + + +class AddCameraMarker(Operator): + bl_idname = "cameraselector.add_camera_marker" + bl_label = "Add Camera Marker" + bl_description = "Add a timeline marker bound to chosen camera" + + def execute(self, context): + chosen_camera = context.active_object + scene = context.scene + + 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, chosen_camera.name) + 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 = True + + return {'FINISHED'} + +classes = ( + VIEW3D_stored_views_save, + VIEW3D_stored_views_set, + VIEW3D_stored_views_delete, + VIEW3D_New_Camera_to_View, + SetSceneCamera, + PreviewSceneCamera, + AddCameraMarker +) + +def register(): + for cls in classes: + bpy.utils.register_class(cls) + +def unregister(): + for cls in classes: + bpy.utils.unregister_class(cls)
\ No newline at end of file |