[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