[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29909] trunk/blender/source/blender/ blenkernel/intern/sequencer.c: == Sequencer ==

Peter Schlaile peter at schlaile.de
Sat Jul 3 23:13:08 CEST 2010


Revision: 29909
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29909
Author:   schlaile
Date:     2010-07-03 23:13:08 +0200 (Sat, 03 Jul 2010)

Log Message:
-----------
== Sequencer ==

This fixes:
[#22722] Removing a sequence strip doesnt remove assosiated fcurves

by using the same hack that is used for moving curve-data along with the 
strips on grab.

Should be cleaned up (both functions!) by making sequencer-strips 
finally true IDs.

Until that happens, there is only an more or less ugly way of doing 
that.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/sequencer.c

Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c	2010-07-03 20:47:03 UTC (rev 29908)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c	2010-07-03 21:13:08 UTC (rev 29909)
@@ -213,6 +213,8 @@
 	MEM_freeN(strip);
 }
 
+static void seq_free_animdata(Scene *scene, Sequence *seq);
+
 void seq_free_sequence(Scene *scene, Sequence *seq)
 {
 	if(seq->strip) seq_free_strip(seq->strip);
@@ -236,6 +238,8 @@
 			sound_remove_scene_sound(scene, seq->scene_sound);
 	}
 
+	seq_free_animdata(scene, seq);
+
 	MEM_freeN(seq);
 }
 
@@ -3842,7 +3846,34 @@
 	}
 }
 
+/* XXX - hackish function needed to remove all fcurves belonging to a sequencer strip */
+static void seq_free_animdata(Scene *scene, Sequence *seq)
+{
+	char str[32];
+	FCurve *fcu;
 
+	if(scene->adt==NULL || scene->adt->action==NULL)
+		return;
+
+	sprintf(str, "[\"%s\"]", seq->name+2);
+
+	fcu= scene->adt->action->curves.first; 
+
+	while (fcu) {
+		if(strstr(fcu->rna_path, "sequence_editor.sequences_all[") && strstr(fcu->rna_path, str)) {
+			FCurve *next_fcu = fcu->next;
+			
+			BLI_remlink(&scene->adt->action->curves, fcu);
+			free_fcurve(fcu);
+
+			fcu = next_fcu;
+		} else {
+			fcu = fcu->next;
+		}
+	}
+}
+
+
 Sequence *get_seq_by_name(ListBase *seqbase, const char *name, int recursive)
 {
 	Sequence *iseq=NULL;





More information about the Bf-blender-cvs mailing list