diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2013-10-17 18:10:03 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2013-10-17 18:10:03 +0400 |
commit | eb1b4c3b55e212dbcb7fb2390c90adf204f42959 (patch) | |
tree | 12a079dd5352ef86749c6119c0c3a68c16723a89 /source/blender/blenkernel/intern/scene.c | |
parent | abee8a871718a99708100c0ad591b76d8f5767da (diff) |
Fix #37097: Setting scene frame does not update active camera
The issue was caused by uncertainty of current camera when
there're no markers to the left of current frame.
Now in this case camera from the top-left marker will be used.
Diffstat (limited to 'source/blender/blenkernel/intern/scene.c')
-rw-r--r-- | source/blender/blenkernel/intern/scene.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 41e43c00457..23b26d0e629 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -874,18 +874,35 @@ Object *BKE_scene_camera_switch_find(Scene *scene) TimeMarker *m; int cfra = scene->r.cfra; int frame = -(MAXFRAME + 1); + int min_frame = MAXFRAME + 1; Object *camera = NULL; + Object *first_camera; for (m = scene->markers.first; m; m = m->next) { - if (m->camera && (m->camera->restrictflag & OB_RESTRICT_RENDER) == 0 && (m->frame <= cfra) && (m->frame > frame)) { - camera = m->camera; - frame = m->frame; + if (m->camera && (m->camera->restrictflag & OB_RESTRICT_RENDER) == 0) { + if ((m->frame <= cfra) && (m->frame > frame)) { + camera = m->camera; + frame = m->frame; - if (frame == cfra) - break; + if (frame == cfra) + break; + } + if (m->frame < min_frame) { + first_camera = m->camera; + min_frame = m->frame; + } } } + + if (camera == NULL) { + /* If there's no marker to the left of current frame, + * use camera from left-most marker to solve all sort + * of Schrodinger uncertainties. + */ + return first_camera; + } + return camera; } #endif |