[Bf-blender-cvs] [2b541854b50] fluid-mantaflow: fix for windows path issue
Sebastián Barschkis
noreply at git.blender.org
Thu May 10 20:16:58 CEST 2018
Commit: 2b541854b50fd579834b60dae11307fa9b7b9a13
Author: Sebastián Barschkis
Date: Thu May 10 20:16:49 2018 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rB2b541854b50fd579834b60dae11307fa9b7b9a13
fix for windows path issue
escape slashes in python calls
===================================================================
M intern/mantaflow/intern/FLUID.cpp
M source/blender/blenkernel/intern/smoke.c
M source/blender/makesdna/DNA_smoke_types.h
===================================================================
diff --git a/intern/mantaflow/intern/FLUID.cpp b/intern/mantaflow/intern/FLUID.cpp
index 8fbdddd6ee4..62844cc6b43 100644
--- a/intern/mantaflow/intern/FLUID.cpp
+++ b/intern/mantaflow/intern/FLUID.cpp
@@ -1113,6 +1113,19 @@ int FLUID::updateParticleStructures(SmokeModifierData *smd, int framenr)
return 1;
}
+/* Dirty hack: Needed to format paths from python code that is run via PyRun_SimpleString */
+static std::string escapeSlashes(std::string const& s) {
+ std::string result = "";
+ for (std::string::const_iterator i = s.begin(), end = s.end(); i != end; ++i) {
+ unsigned char c = *i;
+ if (c == '\\')
+ result += "\\\\";
+ else
+ result += c;
+ }
+ return result;
+}
+
int FLUID::writeData(SmokeModifierData *smd, int framenr)
{
if (with_debug)
@@ -1128,20 +1141,22 @@ int FLUID::writeData(SmokeModifierData *smd, int framenr)
std::string pformat = getCacheFileEnding(smd->domain->cache_particle_format);
BLI_path_join(cacheDirData, sizeof(cacheDirData), smd->domain->cache_directory, FLUID_CACHE_DIR_DATA, NULL);
- ss << "fluid_save_data_" << mCurrentID << "('" << cacheDirData << "', " << framenr << ", '" << dformat << "')";
+ BLI_path_make_safe(cacheDirData);
+
+ ss << "fluid_save_data_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', " << framenr << ", '" << dformat << "')";
pythonCommands.push_back(ss.str());
if (mUsingSmoke) {
ss.str("");
- ss << "smoke_save_data_" << mCurrentID << "('" << cacheDirData << "', " << framenr << ", '" << dformat << "')";
+ ss << "smoke_save_data_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', " << framenr << ", '" << dformat << "')";
pythonCommands.push_back(ss.str());
}
if (mUsingLiquid) {
ss.str("");
- ss << "liquid_save_data_" << mCurrentID << "('" << cacheDirData << "', " << framenr << ", '" << dformat << "')";
+ ss << "liquid_save_data_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', " << framenr << ", '" << dformat << "')";
pythonCommands.push_back(ss.str());
ss.str("");
- ss << "liquid_save_flip_" << mCurrentID << "('" << cacheDirData << "', " << framenr << ", '" << pformat << "')";
+ ss << "liquid_save_flip_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', " << framenr << ", '" << pformat << "')";
pythonCommands.push_back(ss.str());
}
runPythonString(pythonCommands);
@@ -1165,15 +1180,17 @@ int FLUID::readData(SmokeModifierData *smd, int framenr)
std::string pformat = getCacheFileEnding(smd->domain->cache_particle_format);
BLI_path_join(cacheDirData, sizeof(cacheDirData), smd->domain->cache_directory, FLUID_CACHE_DIR_DATA, NULL);
+ BLI_path_make_safe(cacheDirData);
+
if (mUsingSmoke) {
- ss << "smoke_load_data_" << mCurrentID << "('" << cacheDirData << "', " << framenr << ", '" << dformat << "')";
+ ss << "smoke_load_data_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', " << framenr << ", '" << dformat << "')";
pythonCommands.push_back(ss.str());
}
if (mUsingLiquid) {
- ss << "liquid_load_data_" << mCurrentID << "('" << cacheDirData << "', " << framenr << ", '" << dformat << "')";
+ ss << "liquid_load_data_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', " << framenr << ", '" << dformat << "')";
pythonCommands.push_back(ss.str());
ss.str("");
- ss << "liquid_load_flip_" << mCurrentID << "('" << cacheDirData << "', " << framenr << ", '" << pformat << "')";
+ ss << "liquid_load_flip_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', " << framenr << ", '" << pformat << "')";
pythonCommands.push_back(ss.str());
}
runPythonString(pythonCommands);
@@ -1197,8 +1214,10 @@ int FLUID::readNoise(SmokeModifierData *smd, int framenr)
std::string nformat = getCacheFileEnding(smd->domain->cache_noise_format);
BLI_path_join(cacheDirNoise, sizeof(cacheDirNoise), smd->domain->cache_directory, FLUID_CACHE_DIR_NOISE, NULL);
+ BLI_path_make_safe(cacheDirNoise);
+
if (mUsingSmoke && mUsingNoise) {
- ss << "smoke_load_noise_" << mCurrentID << "('" << cacheDirNoise << "', " << framenr << ", '" << nformat << "')";
+ ss << "smoke_load_noise_" << mCurrentID << "('" << escapeSlashes(cacheDirNoise) << "', " << framenr << ", '" << nformat << "')";
pythonCommands.push_back(ss.str());
}
runPythonString(pythonCommands);
@@ -1233,8 +1252,10 @@ int FLUID::readParticles(SmokeModifierData *smd, int framenr)
std::string pformat = getCacheFileEnding(smd->domain->cache_particle_format);
BLI_path_join(cacheDirParticles, sizeof(cacheDirParticles), smd->domain->cache_directory, FLUID_CACHE_DIR_PARTICLES, NULL);
+ BLI_path_make_safe(cacheDirParticles);
+
if (mUsingDrops || mUsingBubbles || mUsingFloats || mUsingTracers) {
- ss << "fluid_load_particles_" << mCurrentID << "('" << cacheDirParticles << "', " << framenr << ", '" << pformat << "')";
+ ss << "fluid_load_particles_" << mCurrentID << "('" << escapeSlashes(cacheDirParticles) << "', " << framenr << ", '" << pformat << "')";
pythonCommands.push_back(ss.str());
}
runPythonString(pythonCommands);
@@ -1257,9 +1278,10 @@ int FLUID::bakeData(SmokeModifierData *smd, int framenr)
std::string dformat = getCacheFileEnding(smd->domain->cache_volume_format);
std::string pformat = getCacheFileEnding(smd->domain->cache_particle_format);
- // Actual call to bake routine
BLI_path_join(cacheDirData, sizeof(cacheDirData), smd->domain->cache_directory, FLUID_CACHE_DIR_DATA, NULL);
- ss << "bake_fluid_data_" << mCurrentID << "('" << cacheDirData << "', " << framenr << ", '" << dformat << "', '" << pformat << "')";
+ BLI_path_make_safe(cacheDirData);
+
+ ss << "bake_fluid_data_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', " << framenr << ", '" << dformat << "', '" << pformat << "')";
pythonCommands.push_back(ss.str());
runPythonString(pythonCommands);
@@ -1281,11 +1303,12 @@ int FLUID::bakeNoise(SmokeModifierData *smd, int framenr)
std::string dformat = getCacheFileEnding(smd->domain->cache_volume_format);
std::string nformat = getCacheFileEnding(smd->domain->cache_noise_format);
- // Actual call to bake routine
BLI_path_join(cacheDirData, sizeof(cacheDirData), smd->domain->cache_directory, FLUID_CACHE_DIR_DATA, NULL);
BLI_path_join(cacheDirNoise, sizeof(cacheDirNoise), smd->domain->cache_directory, FLUID_CACHE_DIR_NOISE, NULL);
+ BLI_path_make_safe(cacheDirData);
+ BLI_path_make_safe(cacheDirNoise);
- ss << "bake_noise_" << mCurrentID << "('" << cacheDirData << "', '" << cacheDirNoise << "', " << framenr << ", '" << dformat << "', '" << nformat << "')";
+ ss << "bake_noise_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', '" << escapeSlashes(cacheDirNoise) << "', " << framenr << ", '" << dformat << "', '" << nformat << "')";
pythonCommands.push_back(ss.str());
runPythonString(pythonCommands);
@@ -1308,10 +1331,12 @@ int FLUID::bakeMesh(SmokeModifierData *smd, int framenr)
std::string mformat = getCacheFileEnding(smd->domain->cache_surface_format);
std::string pformat = getCacheFileEnding(smd->domain->cache_particle_format);
- BLI_path_join(cacheDirMesh, sizeof(cacheDirMesh), smd->domain->cache_directory, FLUID_CACHE_DIR_MESH, NULL);
BLI_path_join(cacheDirData, sizeof(cacheDirData), smd->domain->cache_directory, FLUID_CACHE_DIR_DATA, NULL);
+ BLI_path_join(cacheDirMesh, sizeof(cacheDirMesh), smd->domain->cache_directory, FLUID_CACHE_DIR_MESH, NULL);
+ BLI_path_make_safe(cacheDirData);
+ BLI_path_make_safe(cacheDirMesh);
- ss << "bake_mesh_" << mCurrentID << "('" << cacheDirData << "', '" << cacheDirMesh << "', " << framenr << ", '" << dformat << "', '" << mformat << "', '" << pformat << "')";
+ ss << "bake_mesh_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', '" << escapeSlashes(cacheDirMesh) << "', " << framenr << ", '" << dformat << "', '" << mformat << "', '" << pformat << "')";
pythonCommands.push_back(ss.str());
runPythonString(pythonCommands);
@@ -1333,10 +1358,12 @@ int FLUID::bakeParticles(SmokeModifierData *smd, int framenr)
std::string dformat = getCacheFileEnding(smd->domain->cache_volume_format);
std::string pformat = getCacheFileEnding(smd->domain->cache_particle_format);
- BLI_path_join(cacheDirParticles, sizeof(cacheDirParticles), smd->domain->cache_directory, FLUID_CACHE_DIR_PARTICLES, NULL);
BLI_path_join(cacheDirData, sizeof(cacheDirData), smd->domain->cache_directory, FLUID_CACHE_DIR_DATA, NULL);
+ BLI_path_join(cacheDirParticles, sizeof(cacheDirParticles), smd->domain->cache_directory, FLUID_CACHE_DIR_PARTICLES, NULL);
+ BLI_path_make_safe(cacheDirData);
+ BLI_path_make_safe(cacheDirParticles);
- ss << "bake_particles_" << mCurrentID << "('" << cacheDirData << "', '" << cacheDirParticles << "', " << framenr << ", '" << dformat << "', '" << pformat << "')";
+ ss << "bake_particles_" << mCurrentID << "('" << escapeSlashes(cacheDirData) << "', '" << escapeSlashes(cacheDirParticles) << "', " << framenr << ", '" << dformat << "', '" << pformat << "')";
pythonCommands.push_back(ss.str());
runPythonString(pythonCommands);
@@ -2085,19 +2112,6 @@ void FLUID::setSndParticleLife(float* buffer, int numParts)
}
}
-/* Dirty hack: Needed to format paths from python code that is run via PyRun_SimpleString */
-static std::string escape_slashes(std::string const& s) {
- std::string Result = "";
- for (std::string::const_iterator i = s.begin(), end = s.end(); i != end; ++i) {
- unsigned char c = *i;
- if (c == '\\')
- Result += "\\\\";
- else
- Result += c;
- }
- return Result;
-}
-
void FLUID::saveFluidObstacleData(char *pathname)
{
std::string path(pathname);
@@ -2176,7 +2190,7 @@ void FLUID::saveLiquidData(char *pathname)
std::vector<std::string> pythonCommands;
std::ostringstream ss;
- ss << "liquid_save_mesh_high_" << mCurrentID << "(\"" << escape_slashes(path) << "\")\r\n";
+ ss << "liquid_save_mesh_high_" << mCurrentID << "(\"" << escapeSlashes(path) << "\")\r\n";
pythonCommands.push_back(ss.str());
runPythonString(pythonCommands);
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index 7848b30809d..10ef8826cf4 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -576
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list