[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