[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