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) _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs