[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22174] branches/blender2.5/blender/source /blender/blenkernel/intern/object.c: 2.5 - Make Proxy Tweaks

Joshua Leung aligorith at gmail.com
Mon Aug 3 14:11:50 CEST 2009


Revision: 22174
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22174
Author:   aligorith
Date:     2009-08-03 14:11:50 +0200 (Mon, 03 Aug 2009)

Log Message:
-----------
2.5 - Make Proxy Tweaks 

* Drivers are now copied across and relinked as appropriate
* Drawtype is also copied now (especially useful for rigs)

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/intern/object.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/object.c	2009-08-03 12:02:40 UTC (rev 22173)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/object.c	2009-08-03 12:11:50 UTC (rev 22174)
@@ -91,6 +91,7 @@
 #include "BKE_constraint.h"
 #include "BKE_curve.h"
 #include "BKE_displist.h"
+#include "BKE_fcurve.h"
 #include "BKE_group.h"
 #include "BKE_icons.h"
 #include "BKE_key.h"
@@ -1402,12 +1403,33 @@
 	
 	ob->parent= target->parent;	/* libdata */
 	Mat4CpyMat4(ob->parentinv, target->parentinv);
-#if 0 // XXX old animation system
-	ob->ipo= target->ipo;		/* libdata */
-#endif // XXX old animation system
 	
-	/* skip constraints, constraintchannels, nla? */
+	/* copy animdata stuff - drivers only for now... */
+	if ((target->adt) && (target->adt->drivers.first)) {
+		FCurve *fcu;
+		
+		/* add new animdata block */
+		ob->adt= BKE_id_add_animdata(&ob->id);
+		
+		/* make a copy of all the drivers (for now), then correct any links that need fixing */
+		copy_fcurves(&ob->adt->drivers, &target->adt->drivers);
+		
+		for (fcu= ob->adt->drivers.first; fcu; fcu= fcu->next) {
+			ChannelDriver *driver= fcu->driver;
+			DriverTarget *dtar;
+			
+			for (dtar= driver->targets.first; dtar; dtar= dtar->next) {
+				if ((Object *)dtar->id == target)
+					dtar->id= (ID *)ob;
+				else
+					id_lib_extern((ID *)dtar->id);
+			}
+		}
+	}
 	
+	/* skip constraints? */
+	// FIXME: this is considered by many as a bug
+	
 	/* set object type and link to data */
 	ob->type= target->type;
 	ob->data= target->data;
@@ -1442,6 +1464,9 @@
 		
 		armature_set_id_extern(ob);
 	}
+	
+	/* copy drawtype info */
+	ob->dt= target->dt;
 }
 
 





More information about the Bf-blender-cvs mailing list