[Bf-blender-cvs] [6821bec] particles_refactor: Fixed read/write code for particle display dupli lists and added a modifier object walk callback (also used in readfile for generic modifier lib_link).
Lukas Tönne
noreply at git.blender.org
Tue Apr 22 12:07:03 CEST 2014
Commit: 6821bec4eb1de8ce0c5ab46369e31c996fb54b14
Author: Lukas Tönne
Date: Fri Jan 3 14:05:19 2014 +0100
https://developer.blender.org/rB6821bec4eb1de8ce0c5ab46369e31c996fb54b14
Fixed read/write code for particle display dupli lists and added a
modifier object walk callback (also used in readfile for generic
modifier lib_link).
===================================================================
M source/blender/blenloader/intern/readfile.c
M source/blender/blenloader/intern/writefile.c
M source/blender/modifiers/intern/MOD_nparticle.c
===================================================================
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index eae5a8d..9577fa7 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -4258,9 +4258,9 @@ static void direct_link_pagedbuffer(FileData *fd, bPagedBuffer *pbuf)
/* ************ READ NPARTICLE BUFFER ***************** */
-static void direct_link_nparticle_display(FileData *UNUSED(fd), NParticleDisplay *UNUSED(display))
+static void direct_link_nparticle_display(FileData *fd, NParticleDisplay *display)
{
- /* nothing to do here yet */
+ link_list(fd, &display->dupli_objects);
}
static void direct_link_nparticle_system(FileData *fd, NParticleSystem *psys)
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index a2b0df6..3236a71 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1375,7 +1375,13 @@ static void write_pagedbuffer(WriteData *wd, bPagedBuffer *pbuf)
static void write_nparticle_display(WriteData *wd, NParticleDisplay *display)
{
+ NParticleDisplayDupliObject *dob;
+
writestruct(wd, DATA, "NParticleDisplay", 1, display);
+
+ for (dob = display->dupli_objects.first; dob; dob = dob->next) {
+ writestruct(wd, DATA, "NParticleDisplayDupliObject", 1, dob);
+ }
}
static void write_nparticle_system(WriteData *wd, NParticleSystem *psys)
diff --git a/source/blender/modifiers/intern/MOD_nparticle.c b/source/blender/modifiers/intern/MOD_nparticle.c
index ace0fdb..b761e83 100644
--- a/source/blender/modifiers/intern/MOD_nparticle.c
+++ b/source/blender/modifiers/intern/MOD_nparticle.c
@@ -78,6 +78,26 @@ static struct DerivedMesh *nparticle_system_applyModifier(ModifierData *UNUSED(m
return derivedData;
}
+static void nparticle_system_foreachObjectLink(ModifierData *md, struct Object *ob,
+ void (*walk)(void *userData, struct Object *ob, struct Object **obpoin),
+ void *userData)
+{
+ NParticleSystemModifierData *pmd = (NParticleSystemModifierData *)md;
+ NParticleDisplay *display;
+
+ for (display = pmd->psys->display.first; display; display = display->next) {
+ switch (display->type) {
+ case PAR_DISPLAY_DUPLI: {
+ NParticleDisplayDupliObject *dob;
+ for (dob = display->dupli_objects.first; dob; dob = dob->next) {
+ walk(userData, ob, &dob->object);
+ }
+ break;
+ }
+ }
+ }
+}
+
ModifierTypeInfo modifierType_NParticleSystem = {
/* name */ "Particles",
/* structName */ "NParticleSystemModifierData",
@@ -101,6 +121,6 @@ ModifierTypeInfo modifierType_NParticleSystem = {
/* updateDepgraph */ NULL,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
- /* foreachObjectLink */ NULL,
+ /* foreachObjectLink */ nparticle_system_foreachObjectLink,
/* foreachIDLink */ NULL,
};
More information about the Bf-blender-cvs
mailing list