[Bf-blender-cvs] [173a104] gooseberry: Hair path writer needs 2 different variants for parent/child hairs.

Lukas Tönne noreply at git.blender.org
Mon Mar 23 13:01:19 CET 2015


Commit: 173a104335438b9473cffafaed57f7fad5187ef7
Author: Lukas Tönne
Date:   Wed Feb 25 11:58:19 2015 +0100
Branches: gooseberry
https://developer.blender.org/rB173a104335438b9473cffafaed57f7fad5187ef7

Hair path writer needs 2 different variants for parent/child hairs.

===================================================================

M	source/blender/pointcache/PTC_api.cpp
M	source/blender/pointcache/PTC_api.h
M	source/blender/pointcache/alembic/abc_particles.cpp
M	source/blender/pointcache/intern/alembic.h

===================================================================

diff --git a/source/blender/pointcache/PTC_api.cpp b/source/blender/pointcache/PTC_api.cpp
index 6b2f3b0..d322a62 100644
--- a/source/blender/pointcache/PTC_api.cpp
+++ b/source/blender/pointcache/PTC_api.cpp
@@ -267,6 +267,15 @@ void PTC_cachlib_readers_free(PTCReaderArchive *archive, ListBase *readers)
 	PTC_close_reader_archive(archive);
 }
 
+static void cachelib_add_writer(ListBase *writers, PTCWriter *writer)
+{
+	if (writer) {
+		LinkData *link = (LinkData *)MEM_callocN(sizeof(LinkData), "cachelib writers link");
+		link->data = writer;
+		BLI_addtail(writers, link);
+	}
+}
+
 PTCWriterArchive *PTC_cachlib_writers(Scene *scene, CacheLibrary *cachelib, ListBase *writers)
 {
 	std::string filename = ptc_archive_path(cachelib->filepath, (ID *)cachelib, cachelib->id.lib);
@@ -282,34 +291,28 @@ PTCWriterArchive *PTC_cachlib_writers(Scene *scene, CacheLibrary *cachelib, List
 		
 		BKE_cache_item_name(item->ob, item->type, item->index, name);
 		
-		PTCWriter *writer = NULL;
 		switch (item->type) {
 			case CACHE_TYPE_DERIVED_MESH:
-				writer = PTC_writer_derived_mesh(archive, name, item->ob, &item->ob->derivedFinal);
+				cachelib_add_writer(writers, PTC_writer_derived_mesh(archive, name, item->ob, &item->ob->derivedFinal));
 				break;
 			case CACHE_TYPE_HAIR: {
 				ParticleSystem *psys = (ParticleSystem *)BLI_findlink(&item->ob->particlesystem, item->index);
 				if (psys && psys->part && psys->part->type == PART_HAIR && psys->clmd) {
-					writer = PTC_writer_cloth(archive, name, item->ob, psys->clmd);
+					cachelib_add_writer(writers, PTC_writer_cloth(archive, name, item->ob, psys->clmd));
 				}
 				break;
 			};
 			case CACHE_TYPE_HAIR_PATHS: {
 				ParticleSystem *psys = (ParticleSystem *)BLI_findlink(&item->ob->particlesystem, item->index);
 				if (psys && psys->part && psys->part->type == PART_HAIR) {
-					writer = PTC_writer_particle_paths(archive, name, item->ob, psys);
+					cachelib_add_writer(writers, PTC_writer_particle_paths(archive, name, item->ob, psys, PTC_PARTICLE_PATHS_PARENTS));
+					cachelib_add_writer(writers, PTC_writer_particle_paths(archive, name, item->ob, psys, PTC_PARTICLE_PATHS_CHILDREN));
 				}
 				break;
 			};
 			default:
 				break;
 		}
-		
-		if (writer) {
-			LinkData *link = (LinkData *)MEM_callocN(sizeof(LinkData), "cachelib writers link");
-			link->data = writer;
-			BLI_addtail(writers, link);
-		}
 	}
 	
 	return archive;
@@ -454,10 +457,10 @@ int PTC_reader_particles_totpoint(PTCReader *_reader)
 	return ((PTC::ParticlesReader *)_reader)->totpoint();
 }
 
-PTCWriter *PTC_writer_particle_paths(PTCWriterArchive *_archive, const char *name, Object *ob, ParticleSystem *psys)
+PTCWriter *PTC_writer_particle_paths(PTCWriterArchive *_archive, const char *name, Object *ob, ParticleSystem *psys, eParticlePathsMode mode)
 {
 	PTC::WriterArchive *archive = (PTC::WriterArchive *)_archive;
-	return (PTCWriter *)abc_writer_particle_paths(archive, name, ob, psys);
+	return (PTCWriter *)abc_writer_particle_paths(archive, name, ob, psys, mode);
 }
 
 PTCReader *PTC_reader_particle_paths(PTCReaderArchive *_archive, const char *name, Object *ob, ParticleSystem *psys, eParticlePathsMode mode)
diff --git a/source/blender/pointcache/PTC_api.h b/source/blender/pointcache/PTC_api.h
index 467e674..bd5c03c 100644
--- a/source/blender/pointcache/PTC_api.h
+++ b/source/blender/pointcache/PTC_api.h
@@ -95,7 +95,7 @@ typedef enum eParticlePathsMode {
 	PTC_PARTICLE_PATHS_CHILDREN = 1,
 } eParticlePathsMode;
 
-struct PTCWriter *PTC_writer_particle_paths(struct PTCWriterArchive *archive, const char *name, struct Object *ob, struct ParticleSystem *psys);
+struct PTCWriter *PTC_writer_particle_paths(struct PTCWriterArchive *archive, const char *name, struct Object *ob, struct ParticleSystem *psys, eParticlePathsMode mode);
 struct PTCReader *PTC_reader_particle_paths(struct PTCReaderArchive *archive, const char *name, struct Object *ob, struct ParticleSystem *psys, eParticlePathsMode mode);
 
 /* Cloth */
diff --git a/source/blender/pointcache/alembic/abc_particles.cpp b/source/blender/pointcache/alembic/abc_particles.cpp
index 14199f5..c6a713d 100644
--- a/source/blender/pointcache/alembic/abc_particles.cpp
+++ b/source/blender/pointcache/alembic/abc_particles.cpp
@@ -471,11 +471,15 @@ Reader *abc_reader_particles(ReaderArchive *archive, const std::string &name, Ob
 	return new AbcParticlesReader((AbcReaderArchive *)archive, name, ob, psys);
 }
 
-Writer *abc_writer_particle_paths(WriterArchive *archive, const std::string &name, Object *ob, ParticleSystem *psys)
+Writer *abc_writer_particle_paths(WriterArchive *archive, const std::string &name, Object *ob, ParticleSystem *psys, eParticlePathsMode mode)
 {
 	BLI_assert(dynamic_cast<AbcWriterArchive *>(archive));
-//	return new AbcParticlePathsWriter((AbcWriterArchive *)archive, name, ob, psys);
-	// XXX TODO
+	switch (mode) {
+		case PTC_PARTICLE_PATHS_PARENTS:
+			return new AbcParticlePathsWriter((AbcWriterArchive *)archive, name, ob, psys, &psys->pathcache, &psys->totpart, "__parent_paths");
+		case PTC_PARTICLE_PATHS_CHILDREN:
+			return new AbcParticlePathsWriter((AbcWriterArchive *)archive, name, ob, psys, &psys->childcache, &psys->totchild, "__child_paths");
+	}
 	return NULL;
 }
 
diff --git a/source/blender/pointcache/intern/alembic.h b/source/blender/pointcache/intern/alembic.h
index b42d5a7..799c8a2 100644
--- a/source/blender/pointcache/intern/alembic.h
+++ b/source/blender/pointcache/intern/alembic.h
@@ -44,7 +44,7 @@ ReaderArchive *abc_reader_archive(Scene *scene, const std::string &name, ErrorHa
 /* Particles */
 Writer *abc_writer_particles(WriterArchive *archive, const std::string &name, Object *ob, ParticleSystem *psys);
 Reader *abc_reader_particles(ReaderArchive *archive, const std::string &name, Object *ob, ParticleSystem *psys);
-Writer *abc_writer_particle_paths(WriterArchive *archive, const std::string &name, Object *ob, ParticleSystem *psys);
+Writer *abc_writer_particle_paths(WriterArchive *archive, const std::string &name, Object *ob, ParticleSystem *psys, eParticlePathsMode mode);
 Reader *abc_reader_particle_paths(ReaderArchive *archive, const std::string &name, Object *ob, ParticleSystem *psys, eParticlePathsMode mode);
 
 /* Cloth */




More information about the Bf-blender-cvs mailing list