Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastián Barschkis <sebbas@sebbas.org>2020-06-24 13:00:13 +0300
committerSebastián Barschkis <sebbas@sebbas.org>2020-06-24 17:07:35 +0300
commit9fe64948abe991d18c1af3a52d81e87c24d39687 (patch)
treebc7363b04130a7538eeb21a7e42e04038e1f3314 /extern/mantaflow/preprocessed/particle.cpp
parent6fec2e4db05f6acdfc2b1b0ba365af143201277c (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.cpp50
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