[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24756] trunk/blender/source/blender/ blenloader/intern/readfile.c: Small tweak to file-loading code for F-Curves so that F-Modifiers using library data get re-loaded correct

Joshua Leung aligorith at gmail.com
Sun Nov 22 12:15:39 CET 2009


Revision: 24756
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24756
Author:   aligorith
Date:     2009-11-22 12:15:38 +0100 (Sun, 22 Nov 2009)

Log Message:
-----------
Small tweak to file-loading code for F-Curves so that F-Modifiers using library data get re-loaded correct

Modified Paths:
--------------
    trunk/blender/source/blender/blenloader/intern/readfile.c

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2009-11-22 10:32:37 UTC (rev 24755)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2009-11-22 11:15:38 UTC (rev 24756)
@@ -10426,15 +10426,56 @@
 	}
 }
 
-// XXX depreceated - old animation system
+static void expand_fmodifiers(FileData *fd, Main *mainvar, ListBase *list)
+{
+	FModifier *fcm;
+	
+	for (fcm= list->first; fcm; fcm= fcm->next) {
+		/* library data for specific F-Modifier types */
+		switch (fcm->type) {
+			case FMODIFIER_TYPE_PYTHON:
+			{
+				FMod_Python *data= (FMod_Python *)fcm->data;
+				
+				expand_doit(fd, mainvar, data->script);
+			}
+				break;
+		}
+	}
+}
+
+static void expand_fcurves(FileData *fd, Main *mainvar, ListBase *list)
+{
+	FCurve *fcu;
+	
+	for (fcu= list->first; fcu; fcu= fcu->next) {
+		/* Driver targets if there is a driver */
+		if (fcu->driver) {
+			ChannelDriver *driver= fcu->driver;
+			DriverTarget *dtar;
+			
+			for (dtar= driver->targets.first; dtar; dtar= dtar->next)
+				expand_doit(fd, mainvar, dtar->id);
+		}
+		
+		/* F-Curve Modifiers */
+		expand_fmodifiers(fd, mainvar, &fcu->modifiers);
+	}
+}
+
 static void expand_action(FileData *fd, Main *mainvar, bAction *act)
 {
 	bActionChannel *chan;
 	
+	// XXX depreceated - old animation system --------------
 	for (chan=act->chanbase.first; chan; chan=chan->next) {
 		expand_doit(fd, mainvar, chan->ipo);
 		expand_constraint_channels(fd, mainvar, &chan->constraintChannels);
 	}
+	// ---------------------------------------------------
+	
+	/* F-Curves in Action */
+	expand_fcurves(fd, mainvar, &act->curves);
 }
 
 static void expand_keyingsets(FileData *fd, Main *mainvar, ListBase *list)
@@ -10458,6 +10499,9 @@
 		/* check child strips */
 		expand_animdata_nlastrips(fd, mainvar, &strip->strips);
 		
+		/* check F-Modifiers */
+		expand_fmodifiers(fd, mainvar, &strip->modifiers);
+		
 		/* relink referenced action */
 		expand_doit(fd, mainvar, strip->act);
 	}
@@ -10465,7 +10509,6 @@
 
 static void expand_animdata(FileData *fd, Main *mainvar, AnimData *adt)
 {
-	FCurve *fcd;
 	NlaTrack *nlt;
 	
 	/* own action */
@@ -10473,13 +10516,7 @@
 	expand_doit(fd, mainvar, adt->tmpact);
 	
 	/* drivers - assume that these F-Curves have driver data to be in this list... */
-	for (fcd= adt->drivers.first; fcd; fcd= fcd->next) {
-		ChannelDriver *driver= fcd->driver;
-		DriverTarget *dtar;
-		
-		for (dtar= driver->targets.first; dtar; dtar= dtar->next)
-			expand_doit(fd, mainvar, dtar->id);
-	}
+	expand_fcurves(fd, mainvar, &adt->drivers);
 	
 	/* nla-data - referenced actions */
 	for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next) 





More information about the Bf-blender-cvs mailing list