Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2009-12-16 22:49:33 +0300
committerCampbell Barton <ideasman42@gmail.com>2009-12-16 22:49:33 +0300
commitc3401eb5cb0833dc76eff1e90e573b487181ec81 (patch)
treece0ab6907d724650abff8f4ee2d80c96c8e4169f /source/blender/blenkernel/intern
parent5e48ab8d75bd5ce3085a9de183f36107f6d5d616 (diff)
camera switching via markers
Currently access by selecting a marking and binding with the active camera from the view menu. Note: after long discussion we decieded there is no nice way to do this.. animate pointers? animate multiple camera visibility?, use sequencer? use NLA?.... have a kind of event system (like framechange scriptlinks)... etc so this is ifdef'd with DURIAN_CAMERA_SWITCH
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r--source/blender/blenkernel/intern/object.c11
-rw-r--r--source/blender/blenkernel/intern/scene.c41
2 files changed, 52 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 6b86c6c2908..9a7a3501031 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -554,6 +554,17 @@ void unlink_object(Scene *scene, Object *ob)
if(sce->id.lib==NULL) {
if(sce->camera==ob) sce->camera= NULL;
if(sce->toolsettings->skgen_template==ob) sce->toolsettings->skgen_template = NULL;
+
+#ifdef DURIAN_CAMERA_SWITCH
+ {
+ TimeMarker *m;
+
+ for (m= sce->markers.first; m; m= m->next) {
+ if(m->camera==ob)
+ m->camera= NULL;
+ }
+ }
+#endif
}
sce= sce->id.next;
}
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 4312f23bd9b..7bfeac037ce 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -698,6 +698,47 @@ Object *scene_find_camera(Scene *sc)
return NULL;
}
+#ifdef DURIAN_CAMERA_SWITCH
+Object *scene_find_camera_switch(Scene *scene)
+{
+ TimeMarker *m;
+ int cfra = scene->r.cfra;
+ int frame = -(MAXFRAME + 1);
+ Object *camera= NULL;
+
+ for (m= scene->markers.first; m; m= m->next) {
+ if(m->camera && (m->frame <= cfra) && (m->frame > frame)) {
+ camera= m->camera;
+ frame= m->frame;
+
+ if(frame == cfra)
+ break;
+
+ }
+ }
+ return camera;
+}
+#endif
+
+static char *get_cfra_marker_name(Scene *scene)
+{
+ ListBase *markers= &scene->markers;
+ TimeMarker *m1, *m2;
+
+ /* search through markers for match */
+ for (m1=markers->first, m2=markers->last; m1 && m2; m1=m1->next, m2=m2->prev) {
+ if (m1->frame==CFRA)
+ return m1->name;
+
+ if (m1 == m2)
+ break;
+
+ if (m2->frame==CFRA)
+ return m2->name;
+ }
+
+ return NULL;
+}
Base *scene_add_base(Scene *sce, Object *ob)
{