From d8e6dd705fbf7d98043e8a210bb49d6903792872 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 25 Mar 2011 07:34:44 +0000 Subject: fix [#26607] blender won't duplicate or assign new drivers on duplication --- source/blender/blenkernel/intern/anim_sys.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'source/blender/blenkernel/intern/anim_sys.c') diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 16269c3f66f..b4adaa0ab07 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -282,6 +282,32 @@ void BKE_animdata_make_local(AnimData *adt) make_local_strips(&nlt->strips); } +void BKE_relink_animdata(struct AnimData *adt) +{ + /* drivers */ + if (adt->drivers.first) { + FCurve *fcu; + + /* check each driver against all the base paths to see if any should go */ + for (fcu= adt->drivers.first; fcu; fcu=fcu->next) { + ChannelDriver *driver= fcu->driver; + DriverVar *dvar; + + /* driver variables */ + for (dvar= driver->variables.first; dvar; dvar=dvar->next) { + /* only change the used targets, since the others will need fixing manually anyway */ + DRIVER_TARGETS_USED_LOOPER(dvar) + { + if(dtar->id->newid) { + dtar->id= dtar->id->newid; + } + } + DRIVER_TARGETS_LOOPER_END + } + } + } +} + /* Sub-ID Regrouping ------------------------------------------- */ /* helper heuristic for determining if a path is compatible with the basepath -- cgit v1.2.3