[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27362] trunk/blender: camera override option for scene strips.

Campbell Barton ideasman42 at gmail.com
Tue Mar 9 14:52:52 CET 2010


Revision: 27362
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27362
Author:   campbellbarton
Date:     2010-03-09 14:52:52 +0100 (Tue, 09 Mar 2010)

Log Message:
-----------
camera override option for scene strips.

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/space_sequencer.py
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/blenkernel/intern/sequencer.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c
    trunk/blender/source/blender/makesdna/DNA_sequence_types.h
    trunk/blender/source/blender/makesrna/intern/rna_sequencer.c

Modified: trunk/blender/release/scripts/ui/space_sequencer.py
===================================================================
--- trunk/blender/release/scripts/ui/space_sequencer.py	2010-03-09 13:03:03 UTC (rev 27361)
+++ trunk/blender/release/scripts/ui/space_sequencer.py	2010-03-09 13:52:52 UTC (rev 27362)
@@ -617,6 +617,10 @@
         strip = act_strip(context)
 
         layout.template_ID(strip, "scene")
+
+        layout.label(text="Camera Override")
+        layout.template_ID(strip, "scene_camera")
+
         layout.prop(strip, "use_opengl")
 
 

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2010-03-09 13:03:03 UTC (rev 27361)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2010-03-09 13:52:52 UTC (rev 27362)
@@ -64,6 +64,7 @@
 #include "DNA_particle_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_screen_types.h"
+#include "DNA_sequence_types.h"
 #include "DNA_space_types.h"
 #include "DNA_texture_types.h"
 #include "DNA_userdef_types.h"
@@ -110,6 +111,7 @@
 #include "BKE_sca.h"
 #include "BKE_scene.h"
 #include "BKE_screen.h"
+#include "BKE_sequencer.h"
 #include "BKE_softbody.h"
 
 #include "LBM_fluidsim.h"
@@ -591,7 +593,16 @@
 				}
 			}
 #endif
+			if(sce->ed) {
+				Sequence *seq;
+				SEQ_BEGIN(sce->ed, seq)
+					if(seq->scene_camera==ob) {
+						seq->scene_camera= NULL;
+					}
+				SEQ_END
+			}
 		}
+
 		sce= sce->id.next;
 	}
 	

Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c	2010-03-09 13:03:03 UTC (rev 27361)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c	2010-03-09 13:52:52 UTC (rev 27362)
@@ -2136,6 +2136,7 @@
 		else if (se->ibuf==NULL && sce_valid) {
 			int frame= seq->sfra + se->nr + seq->anim_startofs;
 			int oldcfra = seq->scene->r.cfra;
+			Object *oldcamera= seq->scene->camera;
 
 			/* Hack! This function can be called from do_render_seq(), in that case
 			   the seq->scene can already have a Render initialized with same name,
@@ -2158,16 +2159,22 @@
 
 			seq->scene->r.cfra= frame;
 
-			if(sequencer_view3d_cb && (seq->flag & SEQ_USE_SCENE_OPENGL) && have_seq==0) {
+			if(sequencer_view3d_cb && (seq->flag & SEQ_USE_SCENE_OPENGL) && (seq->scene == scene || have_seq==0)) {
 				/* opengl offscreen render */
+				if(seq->scene_camera)	seq->scene->camera= seq->scene_camera;
+				else					scene_camera_switch_update(seq->scene);
 
-				scene_camera_switch_update(seq->scene);
 				scene_update_for_newframe(seq->scene, seq->scene->lay);
 				se->ibuf= sequencer_view3d_cb(seq->scene, seqrectx, seqrecty);
 			}
 			else {
 				RenderResult rres;
 
+#ifdef DURIAN_CAMERA_SWITCH
+				/* stooping to new low's in hackyness :( */
+				scene_marker_tfm_translate(seq->scene, MAXFRAME*2, 0);
+#endif
+
 				if(rendering)
 					re= RE_NewRender(" do_build_seq_ibuf", RE_SLOT_DEFAULT);
 				else
@@ -2192,12 +2199,18 @@
 				RE_ReleaseResultImage(re);
 
 				// BIF_end_render_callbacks();
+
+#ifdef DURIAN_CAMERA_SWITCH
+				/* stooping to new low's in hackyness :( */
+				scene_marker_tfm_translate(seq->scene, MAXFRAME*-2, 0);
+#endif
 			}
 			
 			/* restore */
 			scene->r.scemode |= doseq;
 
 			seq->scene->r.cfra = oldcfra;
+			seq->scene->camera= oldcamera;
 
 			copy_to_ibuf_still(seq, se);
 

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2010-03-09 13:03:03 UTC (rev 27361)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2010-03-09 13:52:52 UTC (rev 27362)
@@ -4143,6 +4143,7 @@
 			SEQ_BEGIN(sce->ed, seq) {
 				if(seq->ipo) seq->ipo= newlibadr_us(fd, sce->id.lib, seq->ipo);
 				if(seq->scene) seq->scene= newlibadr(fd, sce->id.lib, seq->scene);
+				if(seq->scene_camera) seq->scene_camera= newlibadr(fd, sce->id.lib, seq->scene_camera);
 				if(seq->sound) {
 					seq->scene_sound = NULL;
 					if(seq->type == SEQ_HD_SOUND)
@@ -11572,6 +11573,7 @@
 
 		SEQ_BEGIN(sce->ed, seq) {
 			if(seq->scene) expand_doit(fd, mainvar, seq->scene);
+			if(seq->scene_camera) expand_doit(fd, mainvar, seq->scene_camera);
 			if(seq->sound) expand_doit(fd, mainvar, seq->sound);
 		}
 		SEQ_END

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c	2010-03-09 13:03:03 UTC (rev 27361)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c	2010-03-09 13:52:52 UTC (rev 27362)
@@ -438,40 +438,47 @@
 {
 	rctf rect;
 	char str[32 + FILE_MAXDIR+FILE_MAXFILE];
+	const char *name= seq->name+2;
 	
-	if(seq->name[2]) {
-		sprintf(str, "%d | %s: %s", seq->len, give_seqname(seq), seq->name+2);
+	if(name[0]=='\0')
+		name= give_seqname(seq);
+
+	if(seq->type == SEQ_META) {
+		sprintf(str, "%d | %s", seq->len, name);
 	}
-	else{
-		if(seq->type == SEQ_META) {
-			sprintf(str, "%d | %s", seq->len, give_seqname(seq));
+	else if(seq->type == SEQ_SCENE) {
+		if(seq->scene) {
+			if(seq->scene_camera) {
+				sprintf(str, "%d | %s: %s (%s)", seq->len, name, seq->scene->id.name+2, ((ID *)seq->scene_camera)->name+2);
+			} else {
+				sprintf(str, "%d | %s: %s", seq->len, name, seq->scene->id.name+2);
+			}
 		}
-		else if(seq->type == SEQ_SCENE) {
-			if(seq->scene) sprintf(str, "%d | %s: %s", seq->len, give_seqname(seq), seq->scene->id.name+2);
-			else sprintf(str, "%d | %s", seq->len, give_seqname(seq));
-			
+		else {
+			sprintf(str, "%d | %s", seq->len, name);
 		}
-		else if(seq->type == SEQ_IMAGE) {
-			sprintf(str, "%d | %s%s", seq->len, seq->strip->dir, seq->strip->stripdata->name);
-		}
-		else if(seq->type & SEQ_EFFECT) {
-			int can_float = (seq->type != SEQ_PLUGIN)
-				|| (seq->plugin && seq->plugin->version >= 4);
 
-			if(seq->seq3!=seq->seq2 && seq->seq1!=seq->seq3)
-				sprintf(str, "%d | %s: %d>%d (use %d)%s", seq->len, give_seqname(seq), seq->seq1->machine, seq->seq2->machine, seq->seq3->machine, can_float ? "" : " No float, upgrade plugin!");
-			else if (seq->seq1 && seq->seq2)
-				sprintf(str, "%d | %s: %d>%d%s", seq->len, give_seqname(seq), seq->seq1->machine, seq->seq2->machine, can_float ? "" : " No float, upgrade plugin!");
-			else 
-				sprintf(str, "%d | %s", seq->len, give_seqname(seq));
-		}
-		else if (seq->type == SEQ_SOUND) {
-			sprintf(str, "%d | %s", seq->len, seq->sound->name);
-		}
-		else if (seq->type == SEQ_MOVIE) {
-			sprintf(str, "%d | %s%s", seq->len, seq->strip->dir, seq->strip->stripdata->name);
-		}
 	}
+	else if(seq->type == SEQ_IMAGE) {
+		sprintf(str, "%d | %s%s", seq->len, seq->strip->dir, seq->strip->stripdata->name);
+	}
+	else if(seq->type & SEQ_EFFECT) {
+		int can_float = (seq->type != SEQ_PLUGIN)
+			|| (seq->plugin && seq->plugin->version >= 4);
+
+		if(seq->seq3!=seq->seq2 && seq->seq1!=seq->seq3)
+			sprintf(str, "%d | %s: %d>%d (use %d)%s", seq->len, name, seq->seq1->machine, seq->seq2->machine, seq->seq3->machine, can_float ? "" : " No float, upgrade plugin!");
+		else if (seq->seq1 && seq->seq2)
+			sprintf(str, "%d | %s: %d>%d%s", seq->len, name, seq->seq1->machine, seq->seq2->machine, can_float ? "" : " No float, upgrade plugin!");
+		else
+			sprintf(str, "%d | %s", seq->len, name);
+	}
+	else if (seq->type == SEQ_SOUND) {
+		sprintf(str, "%d | %s", seq->len, seq->sound->name);
+	}
+	else if (seq->type == SEQ_MOVIE) {
+		sprintf(str, "%d | %s%s", seq->len, seq->strip->dir, seq->strip->stripdata->name);
+	}
 	
 	if(seq->flag & SELECT){
 		cpack(0xFFFFFF);

Modified: trunk/blender/source/blender/makesdna/DNA_sequence_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_sequence_types.h	2010-03-09 13:03:03 UTC (rev 27361)
+++ trunk/blender/source/blender/makesdna/DNA_sequence_types.h	2010-03-09 13:52:52 UTC (rev 27362)
@@ -149,6 +149,8 @@
 
 	struct Ipo *ipo;	// xxx depreceated... old animation system
 	struct Scene *scene;
+	struct Object *scene_camera; /* override scene camera */
+
 	struct anim *anim;
 	float effect_fader;
 	float speed_fader;

Modified: trunk/blender/source/blender/makesrna/intern/rna_sequencer.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_sequencer.c	2010-03-09 13:03:03 UTC (rev 27361)
+++ trunk/blender/source/blender/makesrna/intern/rna_sequencer.c	2010-03-09 13:52:52 UTC (rev 27362)
@@ -920,8 +920,12 @@
 	RNA_def_property_flag(prop, PROP_EDITABLE);
 	RNA_def_property_ui_text(prop, "Scene", "Scene that this sequence uses");
 	RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
-	
 
+	prop= RNA_def_property(srna, "scene_camera", PROP_POINTER, PROP_NONE);
+	RNA_def_property_flag(prop, PROP_EDITABLE);
+	RNA_def_property_ui_text(prop, "Camera Override", "Override the scenes active camera");
+	RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
+
 	prop= RNA_def_property(srna, "use_opengl", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_SCENE_OPENGL);
 	RNA_def_property_ui_text(prop, "Use OpenGL", "Use OpenGL preview rather then rendering the scene");





More information about the Bf-blender-cvs mailing list