[Bf-extensions-cvs] [e3fa7430] master: space_view3d_stored_view: T52259 + fix wrong camera location on create

Stephen Leger noreply at git.blender.org
Fri Aug 4 07:41:06 CEST 2017


Commit: e3fa74306fc5dbe877d84e930bde2fa140c89899
Author: Stephen Leger
Date:   Thu Aug 3 15:59:40 2017 +0200
Branches: master
https://developer.blender.org/rBAe3fa74306fc5dbe877d84e930bde2fa140c89899

space_view3d_stored_view: T52259 + fix wrong camera location on create

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

M	space_view3d_stored_views/core.py
M	space_view3d_stored_views/operators.py
M	space_view3d_stored_views/properties.py
M	space_view3d_stored_views/ui.py

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

diff --git a/space_view3d_stored_views/core.py b/space_view3d_stored_views/core.py
index b3e7c6f4..c01838ee 100644
--- a/space_view3d_stored_views/core.py
+++ b/space_view3d_stored_views/core.py
@@ -70,11 +70,10 @@ class POV(StoredView):
         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
-            stored_view.camera_pointer = view3d.camera.as_pointer()
         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
-
+        else:
+            stored_view.lock_object_name = ""
         stored_view.lock_cursor = view3d.lock_cursor
         stored_view.cursor_location = view3d.cursor_location
 
@@ -94,39 +93,18 @@ class POV(StoredView):
             view3d.cursor_location = stored_view.cursor_location
 
         if stored_view.perspective == "CAMERA":
-            cam = self._get_object(stored_view.camera_name, stored_view.camera_pointer)
-            if cam:
-                # in case the camera is found by pointer, update name
-                stored_view.camera_name = cam.name
-                view3d.camera = cam
-            else:
-                # TODO: camera object not found
-                pass
 
-        if stored_view.lock_object_name != "":
-            lock_obj = self._get_object(stored_view.lock_object_name, stored_view.lock_object_pointer)
+            lock_obj = self._get_object(stored_view.lock_object_name)
             if lock_obj:
-                # in case the lock object is found by pointer, update name
-                stored_view.lock_object_name = lock_obj.name
                 view3d.lock_object = lock_obj
             else:
-                # TODO: handle lock object not found
-                pass
+                cam = self._get_object(stored_view.camera_name)
+                if cam:
+                    view3d.camera = cam
 
     @staticmethod
     def _get_object(name, pointer=None):
-        obj = None
-        try:
-            obj = bpy.data.objects[name]
-        except:
-            if pointer:
-                scene_objects = bpy.data.objects
-                for o in scene_objects:
-                    p = o.as_pointer()
-                    if p == pointer:
-                        obj = o
-                        break
-        return obj
+        return bpy.data.objects.get(name)
 
     @staticmethod
     def is_modified(context, stored_view):
@@ -350,29 +328,29 @@ class DataStore():
     def sanitize_data(scene):
 
         def check_objects_references(mode, list):
-            for key, item in list.items():
+            to_remove = []
+            for i, list_item in enumerate(list.items()):
+                key, item = list_item
                 if mode == 'POV' or mode == 'VIEWS':
                     if mode == 'VIEWS':
                         item = item.pov
 
                     if item.perspective == "CAMERA":
-                        try:
-                            camera = bpy.data.objects[item.camera_name]
-                            item.camera_pointer = camera.as_pointer()
-                        except:
+
+                        camera = bpy.data.objects.get(item.camera_name)
+                        if camera is None:
                             try:  # pick a default camera TODO: ask to pick?
                                 camera = bpy.data.cameras[0]
                                 item.camera_name = camera.name
-                                item.camera_pointer = camera.as_pointer()
                             except:  # couldn't find a camera in the scene
-                                list.remove(key)  # TODO: create one instead?
-
-                    if item.lock_object_name != "":
-                        try:  # get object from name string
-                            object = bpy.data.objects[item.lock_object_name]
-                            item.lock_object_pointer = object.as_pointer()
-                        except:
-                            item.lock_object_name = ""
+                                pass
+
+                        obj = bpy.data.objects.get(item.lock_object_name)
+                        if obj is None and camera is None:
+                            to_remove.append(i)
+
+            for i in reversed(to_remove):
+                list.remove(i)
 
         modes = ['POV', 'VIEW', 'DISPLAY', 'LAYERS']
         for mode in modes:
diff --git a/space_view3d_stored_views/operators.py b/space_view3d_stored_views/operators.py
index 1ec3026b..c0bf09ab 100644
--- a/space_view3d_stored_views/operators.py
+++ b/space_view3d_stored_views/operators.py
@@ -1,10 +1,7 @@
 # gpl authors: nfloyd, Francesco Siddi
 
 import bpy
-from bpy.props import (
-        IntProperty,
-        StringProperty,
-        )
+from bpy.props import IntProperty
 from bpy.types import Operator
 from .core import (
         stored_view_factory,
@@ -66,28 +63,27 @@ class VIEW3D_New_Camera_to_View(Operator):
     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):
-        try:
-            # check for operator's poll (there is no active object, for instance)
-            if bpy.ops.object.mode_set.poll():
-                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'}
-        except:
-            self.report({'WARNING'},
-                        "Operation Cancelled. New Camera to View failed to add a new camera")
-            return {'CANCELLED'}
+
+        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
@@ -96,50 +92,48 @@ class SetSceneCamera(Operator):
     bl_label = "Set Scene Camera"
     bl_description = "Set chosen camera as the scene's active camera"
 
-    chosen_camera = StringProperty()
-    select_chosen = False
+    hide_others = False
 
     def execute(self, context):
-        chosen_camera = bpy.data.objects.get(self.chosen_camera, None)
+        chosen_camera = context.active_object
         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
+        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.context.scene.objects.active = chosen_camera
-        bpy.ops.object.select_all(action='TOGGLE')
+        bpy.ops.object.select_all(action='DESELECT')
         chosen_camera.select = True
         return {'FINISHED'}
 
     def invoke(self, context, event):
         if event.ctrl:
-            self.select_chosen = True
+            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 = 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"
 
-    chosen_camera = StringProperty()
-
     def execute(self, context):
-        chosen_camera = bpy.data.objects.get(self.chosen_camera, None)
+        chosen_camera = context.active_object
         scene = context.scene
-        if not chosen_camera:
-            self.report({'WARNING'}, "Camera %s not found. Operation Cancelled")
-            return {'CANCELLED'}
 
         current_frame = scene.frame_current
         marker = None
@@ -153,7 +147,7 @@ class AddCameraMarker(Operator):
             # current frame is already bound to the camera.
             return {'CANCELLED'}
 
-        marker_name = "F_%02d_%s" % (current_frame, self.chosen_camera)
+        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.
diff --git a/space_view3d_stored_views/properties.py b/space_view3d_stored_views/properties.py
index 6dffc3d0..8fb280d4 100644
--- a/space_view3d_stored_views/properties.py
+++ b/space_view3d_stored_views/properties.py
@@ -38,9 +38,7 @@ class POVData(PropertyGroup):
     perspective_matrix_md5 = StringProperty()
     camera_name = StringProperty()
     camera_type = StringProperty()
-    camera_pointer = IntProperty()
     lock_object_name = StringP

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list