[Bf-blender-cvs] [5a83406] fluid-mantaflow: custom file names for liquid cache now supported

Sebastián Barschkis noreply at git.blender.org
Fri Jun 10 14:18:12 CEST 2016


Commit: 5a8340634080f79e5c015f113cfaea01d51c4fd4
Author: Sebastián Barschkis
Date:   Fri Jun 10 14:17:01 2016 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rB5a8340634080f79e5c015f113cfaea01d51c4fd4

custom file names for liquid cache now supported

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

M	intern/mantaflow/extern/manta_smoke_API.h
M	intern/mantaflow/intern/SMOKE.cpp
M	intern/mantaflow/intern/SMOKE.h
M	intern/mantaflow/intern/manta_smoke_API.cpp
M	intern/mantaflow/intern/strings/liquid_script.h
M	source/blender/blenkernel/BKE_pointcache.h
M	source/blender/blenkernel/intern/pointcache.c

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

diff --git a/intern/mantaflow/extern/manta_smoke_API.h b/intern/mantaflow/extern/manta_smoke_API.h
index 0734156..4392e51 100644
--- a/intern/mantaflow/extern/manta_smoke_API.h
+++ b/intern/mantaflow/extern/manta_smoke_API.h
@@ -91,7 +91,7 @@ float *smoke_get_fuel_inflow(struct SMOKE *smoke);
 float *liquid_get_phi(struct SMOKE *liquid);
 float *liquid_turbulence_get_phi(struct SMOKE *liquid);
 void liquid_ensure_init(struct SMOKE *smoke, struct SmokeModifierData *smd);
-void liquid_save_mesh(struct SMOKE *smoke, int startFrame);
+void liquid_save_mesh(struct SMOKE *smoke, char *filename);
 
 #ifdef __cplusplus
 }
diff --git a/intern/mantaflow/intern/SMOKE.cpp b/intern/mantaflow/intern/SMOKE.cpp
index 04a2aae..633cc30 100644
--- a/intern/mantaflow/intern/SMOKE.cpp
+++ b/intern/mantaflow/intern/SMOKE.cpp
@@ -761,11 +761,13 @@ void SMOKE::updatePointersHigh(SmokeModifierData *smd)
 	}
 }
 
-void SMOKE::saveMesh(int startFrame)
+void SMOKE::saveMesh(char *filename)
 {
+	std::string path(filename);
+	
 	mCommands.clear();
 	std::ostringstream save_mesh;
-	save_mesh <<  "save_mesh(" << startFrame << ")";
+	save_mesh <<  "save_mesh('" <<  path << "')";
 	mCommands.push_back(save_mesh.str());
 	
 	runPythonString(mCommands);
diff --git a/intern/mantaflow/intern/SMOKE.h b/intern/mantaflow/intern/SMOKE.h
index 56f380f..ea98c7a 100644
--- a/intern/mantaflow/intern/SMOKE.h
+++ b/intern/mantaflow/intern/SMOKE.h
@@ -61,7 +61,7 @@ public:
 	void exportGrids(struct SmokeModifierData *smd);
 	
 	// Write files for liquids
-	void saveMesh(int startFrame);
+	void saveMesh(char *filename);
 	
 	// Getters
 	inline size_t getTotalCells() { return mTotalCells; }
diff --git a/intern/mantaflow/intern/manta_smoke_API.cpp b/intern/mantaflow/intern/manta_smoke_API.cpp
index 454adc1..df22a7b 100644
--- a/intern/mantaflow/intern/manta_smoke_API.cpp
+++ b/intern/mantaflow/intern/manta_smoke_API.cpp
@@ -497,9 +497,9 @@ extern "C" float *liquid_get_phi(SMOKE *liquid)
 	return liquid->getPhi();
 }
 
-extern "C" void liquid_save_mesh(SMOKE *liquid, int startFrame)
+extern "C" void liquid_save_mesh(SMOKE *liquid, char *filename)
 {
 	if (liquid) {
-		liquid->saveMesh(startFrame);
+		liquid->saveMesh(filename);
 	}
 }
diff --git a/intern/mantaflow/intern/strings/liquid_script.h b/intern/mantaflow/intern/strings/liquid_script.h
index 55e99ed..e67d5da 100644
--- a/intern/mantaflow/intern/strings/liquid_script.h
+++ b/intern/mantaflow/intern/strings/liquid_script.h
@@ -175,8 +175,8 @@ def liquid_step():\n\
         adjustNumber( parts=pp, vel=vel, flags=flags, minParticles=1*minParticles, maxParticles=2*minParticles, phi=phi )\n";
 
 const std::string save_mesh = "\n\
-def save_mesh(step):\n\
-    mesh.save('/Users/sbarschkis/Desktop/surface/fluidsurface_final_%04d.bobj.gz' % step)\n";
+def save_mesh(path):\n\
+    mesh.save(path)\n";
 
 //////////////////////////////////////////////////////////////////////
 // DESTRUCTION
diff --git a/source/blender/blenkernel/BKE_pointcache.h b/source/blender/blenkernel/BKE_pointcache.h
index e854c5b..3939d7b 100644
--- a/source/blender/blenkernel/BKE_pointcache.h
+++ b/source/blender/blenkernel/BKE_pointcache.h
@@ -162,9 +162,9 @@ typedef struct PTCacheID {
 	int (*read_openvdb_stream)(struct OpenVDBReader *reader, void *calldata);
 	
 	/* copies point data to cache data */
-	int (*write_liquid_stream)(void *calldata, int cfra);
+	int (*write_liquid_stream)(void *calldata, char *filename);
 	/* copies cache cata to point data */
-	int (*read_liquid_stream)(void *calldata, int cfra);
+	int (*read_liquid_stream)(void *calldata, char *filename);
 
 	/* copies custom extradata to cache data */
 	void (*write_extra_data)(void *calldata, struct PTCacheMem *pm, int cfra);
diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c
index 1ff3a90..222dfb2 100644
--- a/source/blender/blenkernel/intern/pointcache.c
+++ b/source/blender/blenkernel/intern/pointcache.c
@@ -1216,7 +1216,7 @@ static int ptcache_smoke_openvdb_read(struct OpenVDBReader *reader, void *smoke_
 #endif
 
 #ifdef WITH_MANTA
-static int ptcache_liquid_read(PTCacheFile *pf, void *smoke_v)
+static int ptcache_liquid_read(void *smoke_v, char *filename)
 {
 	SmokeModifierData *smd = (SmokeModifierData *)smoke_v;
 
@@ -1228,7 +1228,7 @@ static int ptcache_liquid_read(PTCacheFile *pf, void *smoke_v)
 	return 1;
 }
 
-static int ptcache_liquid_write(void *smoke_v, int cfra)
+static int ptcache_liquid_write(void *smoke_v, char *filename)
 {
 	SmokeModifierData *smd = (SmokeModifierData *) smoke_v;
 
@@ -1239,7 +1239,7 @@ static int ptcache_liquid_write(void *smoke_v, int cfra)
 	SmokeDomainSettings *sds = smd->domain;
 	
 	if (sds->fluid) {
-		liquid_save_mesh(sds->fluid, cfra);
+		liquid_save_mesh(sds->fluid, filename);
 		return 1;
 	}
 	return 0;
@@ -1852,6 +1852,8 @@ static const char *ptcache_file_extension(const PTCacheID *pid)
 			return PTCACHE_EXT;
 		case PTCACHE_FILE_OPENVDB:
 			return ".vdb";
+		case PTCACHE_FILE_LIQUID:
+			return ".bobj.gz";
 	}
 }
 
@@ -2882,10 +2884,13 @@ static int ptcache_write_openvdb_stream(PTCacheID *pid, int cfra)
 static int ptcache_write_liquid_stream(PTCacheID *pid, int cfra)
 {
 	char filename[FILE_MAX * 2];
+	
 	BKE_ptcache_id_clear(pid, PTCACHE_CLEAR_FRAME, cfra);
-	ptcache_filename(pid, filename, cfra, 1, 1);
 	
-	int error = pid->write_liquid_stream(pid->calldata, cfra);
+	ptcache_filename(pid, filename, cfra, 1, 1);
+	BLI_make_existing_file(filename);
+
+	int error = pid->write_liquid_stream(pid->calldata, filename);
 	
 	return error == 0;
 }




More information about the Bf-blender-cvs mailing list