[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [30085] trunk/blender/source/blender: duplicating a sequence strip now duplicates its fcurves
Campbell Barton
ideasman42 at gmail.com
Wed Jul 7 18:17:19 CEST 2010
Revision: 30085
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30085
Author: campbellbarton
Date: 2010-07-07 18:17:18 +0200 (Wed, 07 Jul 2010)
Log Message:
-----------
duplicating a sequence strip now duplicates its fcurves
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_sequencer.h
trunk/blender/source/blender/blenkernel/intern/sequencer.c
trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
trunk/blender/source/blender/makesrna/intern/rna_sequencer.c
Modified: trunk/blender/source/blender/blenkernel/BKE_sequencer.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sequencer.h 2010-07-07 15:26:02 UTC (rev 30084)
+++ trunk/blender/source/blender/blenkernel/BKE_sequencer.h 2010-07-07 16:17:18 UTC (rev 30085)
@@ -187,6 +187,7 @@
int seq_test_overlap(struct ListBase * seqbasep, struct Sequence *test);
struct ListBase *seq_seqbase(struct ListBase *seqbase, struct Sequence *seq);
void seq_offset_animdata(struct Scene *scene, struct Sequence *seq, int ofs);
+void seq_dupe_animdata(struct Scene *scene, char *name_from, char *name_to);
int shuffle_seq(struct ListBase * seqbasep, struct Sequence *test, struct Scene *evil_scene);
int shuffle_seq_time(ListBase * seqbasep, struct Scene *evil_scene);
int seqbase_isolated_sel_check(struct ListBase *seqbase);
@@ -232,6 +233,7 @@
/* seq_dupli' flags */
#define SEQ_DUPE_UNIQUE_NAME 1<<0
#define SEQ_DUPE_CONTEXT 1<<1
+#define SEQ_DUPE_ANIM 1<<2
/* use as an api function */
typedef struct Sequence *(*SeqLoadFunc)(struct bContext *, ListBase *, struct SeqLoadInfo *);
Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c 2010-07-07 15:26:02 UTC (rev 30084)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c 2010-07-07 16:17:18 UTC (rev 30085)
@@ -40,6 +40,7 @@
#include "DNA_anim_types.h"
#include "DNA_object_types.h"
+#include "BKE_animsys.h"
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_main.h"
@@ -3877,6 +3878,37 @@
}
}
+void seq_dupe_animdata(Scene *scene, char *name_from, char *name_to)
+{
+ char str_from[32];
+ char str_to[32];
+ FCurve *fcu;
+ FCurve *fcu_last;
+ FCurve *fcu_cpy;
+ ListBase lb= {NULL, NULL};
+
+ if(scene->adt==NULL || scene->adt->action==NULL)
+ return;
+
+ sprintf(str_from, "[\"%s\"]", name_from);
+ sprintf(str_to, "[\"%s\"]", name_to);
+
+ fcu_last= scene->adt->action->curves.last;
+
+ for (fcu= scene->adt->action->curves.first; fcu && fcu->prev != fcu_last; fcu= fcu->next) {
+ if(strstr(fcu->rna_path, "sequence_editor.sequences_all[") && strstr(fcu->rna_path, str_from)) {
+ fcu_cpy= copy_fcurve(fcu);
+ BLI_addtail(&lb, fcu_cpy);
+ }
+ }
+
+ /* notice validate is 0, keep this because the seq may not be added to the scene yet */
+ BKE_animdata_fix_paths_rename(&scene->id, scene->adt, "sequence_editor.sequences_all", name_from, name_to, 0, 0, 0);
+
+ /* add the original fcurves back */
+ addlisttolist(&scene->adt->action->curves, &lb);
+}
+
/* XXX - hackish function needed to remove all fcurves belonging to a sequencer strip */
static void seq_free_animdata(Scene *scene, Sequence *seq)
{
@@ -4233,9 +4265,14 @@
" now...\n");
}
- if(dupe_flag & SEQ_DUPE_UNIQUE_NAME)
+ if(dupe_flag & SEQ_DUPE_UNIQUE_NAME) {
seqbase_unique_name_recursive(&scene->ed->seqbase, seqn);
+ printf("%s %s\n", seqn->name+2, seq->name+2);
+ }
+ if(dupe_flag & SEQ_DUPE_ANIM)
+ seq_dupe_animdata(scene, seq->name+2, seqn->name+2);
+
return seqn;
}
Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c 2010-07-07 15:26:02 UTC (rev 30084)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c 2010-07-07 16:17:18 UTC (rev 30085)
@@ -792,7 +792,7 @@
if (!skip_dup) {
/* Duplicate AFTER the first change */
- seqn = seq_dupli_recursive(scene, seq, SEQ_DUPE_UNIQUE_NAME);
+ seqn = seq_dupli_recursive(scene, seq, SEQ_DUPE_UNIQUE_NAME | SEQ_DUPE_ANIM);
}
if (seqn) {
@@ -881,7 +881,7 @@
if (!skip_dup) {
/* Duplicate AFTER the first change */
- seqn = seq_dupli_recursive(scene, seq, SEQ_DUPE_UNIQUE_NAME);
+ seqn = seq_dupli_recursive(scene, seq, SEQ_DUPE_UNIQUE_NAME | SEQ_DUPE_ANIM);
}
if (seqn) {
@@ -1598,15 +1598,19 @@
if(ed==NULL)
return OPERATOR_CANCELLED;
- seqbase_dupli_recursive(scene, &nseqbase, ed->seqbasep, SEQ_DUPE_UNIQUE_NAME|SEQ_DUPE_CONTEXT);
+ seqbase_dupli_recursive(scene, &nseqbase, ed->seqbasep, SEQ_DUPE_CONTEXT);
if(nseqbase.first) {
Sequence * seq= nseqbase.first;
/* rely on the nseqbase list being added at the end */
addlisttolist(ed->seqbasep, &nseqbase);
- for( ; seq; seq= seq->next)
+ for( ; seq; seq= seq->next) {
+ char name[sizeof(seq->name)-2];
+ strcpy(name, seq->name+2);
seqbase_unique_name_recursive(&ed->seqbase, seq);
+ seq_dupe_animdata(scene, name, seq->name+2);
+ }
WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
return OPERATOR_FINISHED;
Modified: trunk/blender/source/blender/makesrna/intern/rna_sequencer.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_sequencer.c 2010-07-07 15:26:02 UTC (rev 30084)
+++ trunk/blender/source/blender/makesrna/intern/rna_sequencer.c 2010-07-07 16:17:18 UTC (rev 30085)
@@ -30,6 +30,7 @@
#include "rna_internal.h"
+#include "DNA_anim_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_sequence_types.h"
@@ -270,6 +271,7 @@
Scene *scene= (Scene*)ptr->id.data;
Sequence *seq= (Sequence*)ptr->data;
char oldname[sizeof(seq->name)];
+ AnimData *adt;
/* make a copy of the old name first */
BLI_strncpy(oldname, seq->name+2, sizeof(seq->name)-2);
@@ -281,7 +283,12 @@
seqbase_unique_name_recursive(&scene->ed->seqbase, seq);
/* fix all the animation data which may link to this */
- BKE_all_animdata_fix_paths_rename("sequence_editor.sequences_all", oldname, seq->name+2);
+
+ /* dont rename everywhere because these are per scene */
+ /* BKE_all_animdata_fix_paths_rename("sequence_editor.sequences_all", oldname, seq->name+2); */
+ adt= BKE_animdata_from_id(&scene->id);
+ if(adt)
+ BKE_animdata_fix_paths_rename(&scene->id, adt, "sequence_editor.sequences_all", oldname, seq->name+2, 0, 0, 1);
}
static StructRNA* rna_Sequence_refine(struct PointerRNA *ptr)
More information about the Bf-blender-cvs
mailing list