[Bf-blender-cvs] [66f2131] soc-2014-fluid: added Manta.h for mantaflow integrtion; reading smoke simulation files

Roman Pogribnyi noreply at git.blender.org
Sun May 25 18:57:26 CEST 2014


Commit: 66f21314f9c5e1a03380e582b39cda07e12c3cae
Author: Roman Pogribnyi
Date:   Sun May 25 00:44:12 2014 +0200
https://developer.blender.org/rB66f21314f9c5e1a03380e582b39cda07e12c3cae

added Manta.h for mantaflow integrtion; reading smoke simulation files

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

M	CMakeLists.txt
M	intern/smoke/extern/smoke_API.h
A	intern/smoke/intern/MANTA.h
M	intern/smoke/intern/smoke_API.cpp

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

diff --git a/CMakeLists.txt b/CMakeLists.txt
index dafcf15..a30b930 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2110,7 +2110,7 @@ if(CMAKE_COMPILER_IS_GNUCC)
 	ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_NULL -Wnonnull)  # C only
 	ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
 	ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
-	ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_TYPE_LIMITS -Wtype-limits)
+	
 
 	# gcc 4.2 gives annoying warnings on every file with this
 	if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
@@ -2137,7 +2137,7 @@ if(CMAKE_COMPILER_IS_GNUCC)
 	ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_INIT_SELF -Winit-self)  # needs -Wuninitialized
 	ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
 	ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
-	ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_TYPE_LIMITS -Wtype-limits)
+	
 
 	# gcc 4.2 gives annoying warnings on every file with this
 	if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
diff --git a/intern/smoke/extern/smoke_API.h b/intern/smoke/extern/smoke_API.h
index 08dbded..b748734 100644
--- a/intern/smoke/extern/smoke_API.h
+++ b/intern/smoke/extern/smoke_API.h
@@ -113,6 +113,9 @@ void smoke_ensure_heat(struct FLUID_3D *fluid);
 void smoke_ensure_fire(struct FLUID_3D *fluid, struct WTURBULENCE *wt);
 void smoke_ensure_colors(struct FLUID_3D *fluid, struct WTURBULENCE *wt, float init_r, float init_g, float init_b);
 
+/*Mantaflow functions*/
+void smoke_mantaflow_read(struct FLUID_3D *fluid, char* name);
+	
 #ifdef __cplusplus
 }
 #endif
diff --git a/intern/smoke/intern/MANTA.h b/intern/smoke/intern/MANTA.h
new file mode 100644
index 0000000..ebdba3e
--- /dev/null
+++ b/intern/smoke/intern/MANTA.h
@@ -0,0 +1,81 @@
+#ifndef MANTA_H
+#define MANTA_H
+#include "FLUID_3D.h"
+#include "zlib.h"
+
+extern "C" bool manta_check_grid_size(struct FLUID_3D *fluid, int dimX, int dimY, int dimZ)
+{
+	if (!(dimX == fluid->xRes() && dimY == fluid->yRes() && dimZ == fluid->zRes())) {
+		for (int cnt(0); cnt < fluid->_totalCells; cnt++)
+			fluid->_density[cnt] = 0.0f;
+		return false;
+	}
+	return true;
+}
+
+extern "C" void read_mantaflow_sim(struct FLUID_3D *fluid, char* name)
+{
+    /*! legacy headers for reading old files */
+	typedef struct {
+		int dimX, dimY, dimZ;
+		int frames, elements, elementType, bytesPerElement, bytesPerFrame;
+	} UniLegacyHeader;
+	
+	typedef struct {
+		int dimX, dimY, dimZ;
+		int gridType, elementType, bytesPerElement;
+	} UniLegacyHeader2;
+	
+	/* uni file header - currently used */ 
+	typedef struct {
+		int dimX, dimY, dimZ;
+		int gridType, elementType, bytesPerElement;
+		char info[256]; /* mantaflow build information */
+		unsigned long long timestamp; /* creation time */
+	} UniHeader;
+	
+#	if NO_ZLIB!=1
+    gzFile gzf = gzopen(name, "rb");
+    if (!gzf) {
+		for (int cnt(0); cnt < fluid->_totalCells; cnt++)
+			fluid->_density[cnt] = 0.0f;
+		return;
+	}
+	
+    char ID[5] = {0,0,0,0,0};
+	gzread(gzf, ID, 4);
+	
+	/* legacy file format */
+    if (!strcmp(ID, "DDF2")) {
+        UniLegacyHeader head;
+		gzread(gzf, &head, sizeof(UniLegacyHeader));
+		if (!manta_check_grid_size(fluid, head.dimX, head.dimY, head.dimZ))	return;
+        int numEl = head.dimX*head.dimY*head.dimZ;
+        gzseek(gzf, numEl, SEEK_CUR);
+        /* actual grid read */
+        gzread(gzf, fluid->_density, sizeof(float)*numEl);
+    } 
+	/* legacy file format 2 */
+    else if (!strcmp(ID, "MNT1")) {
+        UniLegacyHeader2 head;
+        gzread(gzf, &head, sizeof(UniLegacyHeader2));
+		if (!manta_check_grid_size(fluid, head.dimX, head.dimY, head.dimZ))	return;
+        // actual grid read
+        gzread(gzf, fluid->_density, sizeof(float)*head.dimX*head.dimY*head.dimZ);
+    }
+	// current file format
+    else if (!strcmp(ID, "MNT2")) {
+        UniHeader head;
+        gzread(gzf, &head, sizeof(UniHeader));
+		if (!manta_check_grid_size(fluid, head.dimX, head.dimY, head.dimZ))	return;
+		// actual grid read
+        gzread(gzf,fluid->_density, sizeof(float)*head.dimX*head.dimY*head.dimZ);
+    }
+    gzclose(gzf);
+#	else
+    //cout << "file format not supported without zlib" << endl;
+#	endif	//zlib
+}
+
+#endif // MANTA_H
+
diff --git a/intern/smoke/intern/smoke_API.cpp b/intern/smoke/intern/smoke_API.cpp
index e25dff0..9de4d5b 100644
--- a/intern/smoke/intern/smoke_API.cpp
+++ b/intern/smoke/intern/smoke_API.cpp
@@ -35,6 +35,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <math.h>
+#include "MANTA.h"
 
 #include "../extern/smoke_API.h"  /* to ensure valid prototypes */
 
@@ -498,3 +499,10 @@ extern "C" void smoke_ensure_colors(FLUID_3D *fluid, WTURBULENCE *wt, float init
 		wt->initColors(init_r, init_g, init_b);
 	}
 }
+
+/*MantaFlow funcs*/
+extern "C" void smoke_mantaflow_read(struct FLUID_3D *fluid, char* name)
+{
+	read_mantaflow_sim(fluid, name);
+}
+




More information about the Bf-blender-cvs mailing list