[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35772] trunk/blender/source/blender: fix [#26607] blender won't duplicate or assign new drivers on duplication
Campbell Barton
ideasman42 at gmail.com
Fri Mar 25 08:34:45 CET 2011
Revision: 35772
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35772
Author: campbellbarton
Date: 2011-03-25 07:34:44 +0000 (Fri, 25 Mar 2011)
Log Message:
-----------
fix [#26607] blender won't duplicate or assign new drivers on duplication
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_animsys.h
trunk/blender/source/blender/blenkernel/intern/anim_sys.c
trunk/blender/source/blender/editors/object/object_add.c
trunk/blender/source/blender/editors/object/object_relations.c
trunk/blender/source/blender/makesdna/DNA_anim_types.h
Modified: trunk/blender/source/blender/blenkernel/BKE_animsys.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_animsys.h 2011-03-25 05:23:58 UTC (rev 35771)
+++ trunk/blender/source/blender/blenkernel/BKE_animsys.h 2011-03-25 07:34:44 UTC (rev 35772)
@@ -72,6 +72,9 @@
/* Make Local */
void BKE_animdata_make_local(struct AnimData *adt);
+/* Re-Assign ID's */
+void BKE_relink_animdata(struct AnimData *adt);
+
/* ************************************* */
/* KeyingSets API */
Modified: trunk/blender/source/blender/blenkernel/intern/anim_sys.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/anim_sys.c 2011-03-25 05:23:58 UTC (rev 35771)
+++ trunk/blender/source/blender/blenkernel/intern/anim_sys.c 2011-03-25 07:34:44 UTC (rev 35772)
@@ -282,6 +282,32 @@
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
Modified: trunk/blender/source/blender/editors/object/object_add.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_add.c 2011-03-25 05:23:58 UTC (rev 35771)
+++ trunk/blender/source/blender/editors/object/object_add.c 2011-03-25 07:34:44 UTC (rev 35772)
@@ -868,6 +868,10 @@
}
}
modifiers_foreachIDLink(ob, copy_object__forwardModifierLinks, NULL);
+
+ if(ob->adt)
+ BKE_relink_animdata(ob->adt);
+
ID_NEW(ob->parent);
ID_NEW(ob->proxy);
ID_NEW(ob->proxy_group);
Modified: trunk/blender/source/blender/editors/object/object_relations.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_relations.c 2011-03-25 05:23:58 UTC (rev 35771)
+++ trunk/blender/source/blender/editors/object/object_relations.c 2011-03-25 07:34:44 UTC (rev 35772)
@@ -1412,7 +1412,10 @@
}
}
modifiers_foreachObjectLink(base->object, single_object_users__forwardModifierLinks, NULL);
-
+
+ if(ob->adt)
+ BKE_relink_animdata(ob->adt);
+
ID_NEW(ob->parent);
}
}
Modified: trunk/blender/source/blender/makesdna/DNA_anim_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_anim_types.h 2011-03-25 05:23:58 UTC (rev 35771)
+++ trunk/blender/source/blender/makesdna/DNA_anim_types.h 2011-03-25 07:34:44 UTC (rev 35772)
@@ -261,7 +261,7 @@
* Defines how to access a dependency needed for a driver variable.
*/
typedef struct DriverTarget {
- ID *id; /* ID-block which owns the target */
+ ID *id; /* ID-block which owns the target, no user count */
char *rna_path; /* RNA path defining the setting to use (for DVAR_TYPE_SINGLE_PROP) */
More information about the Bf-blender-cvs
mailing list