[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