[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