[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35918] trunk/blender/source/blender: library linked modifiers were not having their ID linked expanded properly .

Campbell Barton ideasman42 at gmail.com
Thu Mar 31 13:21:22 CEST 2011


Revision: 35918
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35918
Author:   campbellbarton
Date:     2011-03-31 11:21:21 +0000 (Thu, 31 Mar 2011)
Log Message:
-----------
library linked modifiers were not having their ID linked expanded properly.
was missing array cap ends, wave map object and shrinkwrap objects.

use modifiers_foreachIDLink() rather then having to list all modifiers ID's in this function.
also add foreachIDLink() for smoke domain.

This fixes a bug where a linked object has as a modifier using an indirectly linked object for the missing cases mentioned above.

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

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2011-03-31 10:31:14 UTC (rev 35917)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2011-03-31 11:21:21 UTC (rev 35918)
@@ -12301,50 +12301,19 @@
 	}
 }
 
-static void expand_modifier(FileData *fd, Main *mainvar, ModifierData *md)
+static void expand_object_expandModifiers(void *userData, Object *UNUSED(ob),
+											  ID **idpoin)
 {
-	if (md->type==eModifierType_Lattice) {
-		LatticeModifierData *lmd = (LatticeModifierData*) md;
-			
-		expand_doit(fd, mainvar, lmd->object);
-	} 
-	else if (md->type==eModifierType_Curve) {
-		CurveModifierData *cmd = (CurveModifierData*) md;
-			
-		expand_doit(fd, mainvar, cmd->object);
-	}
-	else if (md->type==eModifierType_Array) {
-		ArrayModifierData *amd = (ArrayModifierData*) md;
-			
-		expand_doit(fd, mainvar, amd->curve_ob);
-		expand_doit(fd, mainvar, amd->offset_ob);
-	}
-	else if (md->type==eModifierType_Mirror) {
-		MirrorModifierData *mmd = (MirrorModifierData*) md;
-			
-		expand_doit(fd, mainvar, mmd->mirror_ob);
-	}
-	else if (md->type==eModifierType_Displace) {
-		DisplaceModifierData *dmd = (DisplaceModifierData*) md;
-		
-		expand_doit(fd, mainvar, dmd->map_object);
-		expand_doit(fd, mainvar, dmd->texture);
-	}
-	else if (md->type==eModifierType_Smoke) {
-		SmokeModifierData *smd = (SmokeModifierData*) md;
-			
-		if(smd->type==MOD_SMOKE_TYPE_DOMAIN && smd->domain)
-		{	
-			expand_doit(fd, mainvar, smd->domain->coll_group);
-			expand_doit(fd, mainvar, smd->domain->fluid_group);
-			expand_doit(fd, mainvar, smd->domain->eff_group);
-		}
-	}
+	struct { FileData *fd; Main *mainvar; } *data= userData;
+
+	FileData *fd= data->fd;
+	Main *mainvar= data->mainvar;
+
+	expand_doit(fd, mainvar, *idpoin);
 }
 
 static void expand_object(FileData *fd, Main *mainvar, Object *ob)
 {
-	ModifierData *md;
 	ParticleSystem *psys;
 	bSensor *sens;
 	bController *cont;
@@ -12354,9 +12323,14 @@
 	int a;
 
 	expand_doit(fd, mainvar, ob->data);
-	
-	for (md=ob->modifiers.first; md; md=md->next) {
-		expand_modifier(fd, mainvar, md);
+
+	/* expand_object_expandModifier() */
+	if(ob->modifiers.first) {
+		struct { FileData *fd; Main *mainvar; } data;
+		data.fd= fd;
+		data.mainvar= mainvar;
+
+		modifiers_foreachIDLink(ob, expand_object_expandModifiers, (void *)&data);
 	}
 
 	expand_pose(fd, mainvar, ob->pose);

Modified: trunk/blender/source/blender/modifiers/intern/MOD_smoke.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_smoke.c	2011-03-31 10:31:14 UTC (rev 35917)
+++ trunk/blender/source/blender/modifiers/intern/MOD_smoke.c	2011-03-31 11:21:21 UTC (rev 35918)
@@ -147,7 +147,18 @@
 	}
 }
 
+static void foreachIDLink(ModifierData *md, Object *ob,
+					   IDWalkFunc walk, void *userData)
+{
+	SmokeModifierData *smd = (SmokeModifierData*) md;
 
+	if(smd->type==MOD_SMOKE_TYPE_DOMAIN && smd->domain) {
+		walk(userData, ob, (ID **)&smd->domain->coll_group);
+		walk(userData, ob, (ID **)&smd->domain->fluid_group);
+		walk(userData, ob, (ID **)&smd->domain->eff_group);
+	}
+}
+
 ModifierTypeInfo modifierType_Smoke = {
 	/* name */              "Smoke",
 	/* structName */        "SmokeModifierData",
@@ -172,5 +183,5 @@
 	/* dependsOnTime */     dependsOnTime,
 	/* dependsOnNormals */	NULL,
 	/* foreachObjectLink */ NULL,
-	/* foreachIDLink */     NULL,
+	/* foreachIDLink */     foreachIDLink,
 };




More information about the Bf-blender-cvs mailing list