diff options
author | Sebastián Barschkis <sebbas@sebbas.org> | 2020-06-24 13:00:13 +0300 |
---|---|---|
committer | Sebastián Barschkis <sebbas@sebbas.org> | 2020-06-24 17:07:35 +0300 |
commit | 9fe64948abe991d18c1af3a52d81e87c24d39687 (patch) | |
tree | bc7363b04130a7538eeb21a7e42e04038e1f3314 /extern/mantaflow/preprocessed/particle.cpp | |
parent | 6fec2e4db05f6acdfc2b1b0ba365af143201277c (diff) |
Fluid: Updated Mantaflow source with latest OpenVDB changes
This updated set of Mantaflow files includes the improved OpenVDB file IO. With this update it is finally possible to store multiple grids per file. It is also possible to save particle systems and particle data to OpenVDB files.
Diffstat (limited to 'extern/mantaflow/preprocessed/particle.cpp')
-rw-r--r-- | extern/mantaflow/preprocessed/particle.cpp | 50 |
1 files changed, 37 insertions, 13 deletions
diff --git a/extern/mantaflow/preprocessed/particle.cpp b/extern/mantaflow/preprocessed/particle.cpp index 41af5d3ba81..c719fc8f27d 100644 --- a/extern/mantaflow/preprocessed/particle.cpp +++ b/extern/mantaflow/preprocessed/particle.cpp @@ -214,20 +214,26 @@ void BasicParticleSystem::writeParticlesRawVelocityGz(const string name) const #endif } -void BasicParticleSystem::load(const string name) +int BasicParticleSystem::load(const string name) { if (name.find_last_of('.') == string::npos) errMsg("file '" + name + "' does not have an extension"); string ext = name.substr(name.find_last_of('.')); if (ext == ".uni") - readParticlesUni(name, this); + return readParticlesUni(name, this); + else if (ext == ".vdb") { + std::vector<PbClass *> parts; + parts.push_back(this); + return readObjectsVDB(name, &parts); + } else if (ext == ".raw") // raw = uni for now - readParticlesUni(name, this); + return readParticlesUni(name, this); else errMsg("particle '" + name + "' filetype not supported for loading"); + return 0; } -void BasicParticleSystem::save(const string name) const +int BasicParticleSystem::save(const string name) { if (name.find_last_of('.') == string::npos) errMsg("file '" + name + "' does not have an extension"); @@ -235,16 +241,22 @@ void BasicParticleSystem::save(const string name) const if (ext == ".txt") this->writeParticlesText(name); else if (ext == ".uni") - writeParticlesUni(name, this); + return writeParticlesUni(name, this); else if (ext == ".raw") // raw = uni for now - writeParticlesUni(name, this); - // raw data formats, very basic for simple data transfer to other programs + return writeParticlesUni(name, this); + else if (ext == ".vdb") { + std::vector<PbClass *> parts; + parts.push_back(this); + return writeObjectsVDB(name, &parts); + // raw data formats, very basic for simple data transfer to other programs + } else if (ext == ".posgz") this->writeParticlesRawPositionsGz(name); else if (ext == ".velgz") this->writeParticlesRawVelocityGz(name); else errMsg("particle '" + name + "' filetype not supported for saving"); + return 0; } void BasicParticleSystem::printParts(IndexInt start, IndexInt stop, bool printIndex) @@ -372,30 +384,42 @@ template<> void ParticleDataImpl<Vec3>::initNewValue(IndexInt idx, Vec3 pos) } } -template<typename T> void ParticleDataImpl<T>::load(string name) +template<typename T> int ParticleDataImpl<T>::load(string name) { if (name.find_last_of('.') == string::npos) errMsg("file '" + name + "' does not have an extension"); string ext = name.substr(name.find_last_of('.')); if (ext == ".uni") - readPdataUni<T>(name, this); + return readPdataUni<T>(name, this); + else if (ext == ".vdb") { + std::vector<PbClass *> parts; + parts.push_back(this); + return readObjectsVDB(name, &parts); + } else if (ext == ".raw") // raw = uni for now - readPdataUni<T>(name, this); + return readPdataUni<T>(name, this); else errMsg("particle data '" + name + "' filetype not supported for loading"); + return 0; } -template<typename T> void ParticleDataImpl<T>::save(string name) +template<typename T> int ParticleDataImpl<T>::save(string name) { if (name.find_last_of('.') == string::npos) errMsg("file '" + name + "' does not have an extension"); string ext = name.substr(name.find_last_of('.')); if (ext == ".uni") - writePdataUni<T>(name, this); + return writePdataUni<T>(name, this); + else if (ext == ".vdb") { + std::vector<PbClass *> parts; + parts.push_back(this); + return writeObjectsVDB(name, &parts); + } else if (ext == ".raw") // raw = uni for now - writePdataUni<T>(name, this); + return writePdataUni<T>(name, this); else errMsg("particle data '" + name + "' filetype not supported for saving"); + return 0; } // specializations |