Commit: d67e7284b9080d2d60e2f09f93daa921ce19a95d
Author: Sebastián Barschkis
Date:   Wed Jun 15 16:36:21 2016 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rBd67e7284b9080d2d60e2f09f93daa921ce19a95d

added mesh (.bobj.gz files) read functionality to fluid class

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

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

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

diff --git a/intern/mantaflow/extern/manta_smoke_API.h 
b/intern/mantaflow/extern/manta_smoke_API.h
index 0a84e40..e1ac7d1 100644
--- a/intern/mantaflow/extern/manta_smoke_API.h
+++ b/intern/mantaflow/extern/manta_smoke_API.h
@@ -105,6 +105,7 @@ float liquid_get_normal_z_at(struct SMOKE *liquid, int i);
 float liquid_get_triangle_x_at(struct SMOKE *liquid, int i);
 float liquid_get_triangle_y_at(struct SMOKE *liquid, int i);
 float liquid_get_triangle_z_at(struct SMOKE *liquid, int i);
+void liquid_update_mesh_data(struct SMOKE *liquid, char *filename);
 
 #ifdef __cplusplus
 }
diff --git a/intern/mantaflow/intern/SMOKE.cpp 
b/intern/mantaflow/intern/SMOKE.cpp
index 52e9ae6c..665fa7d 100644
--- a/intern/mantaflow/intern/SMOKE.cpp
+++ b/intern/mantaflow/intern/SMOKE.cpp
@@ -30,6 +30,7 @@
 #include <sstream>
 #include <fstream>
 #include <iostream>
+#include <zlib.h>
 
 #include "SMOKE.h"
 #include "registry.h"
@@ -39,6 +40,7 @@
 
 #include "BLI_path_util.h"
 #include "BLI_utildefines.h"
+#include "BLI_fileops.h"
 
 #include "DNA_scene_types.h"
 #include "DNA_modifier_types.h"
@@ -692,6 +694,89 @@ void* SMOKE::getGridPointer(std::string gridName, 
std::string solverName)
        return gridPointer;
 }
 
+void SMOKE::updateMeshData(char* filename)
+{
+       float dx =  1.0f / mMaxRes;
+       float fbuffer[3];
+       int ibuffer[3];
+
+       gzFile gzf = BLI_gzopen(filename, "rb1"); // do some compression
+       if (!gzf)
+               std::cout << "readBobj: unable to open file" << std::endl;
+       
+       // Num vertices
+       mNumVertices = 0;
+       gzread(gzf, &mNumVertices, sizeof(int));
+       
+       std::cout << "read mesh , verts " << mNumVertices << std::endl;
+
+       if (mNumVertices)
+       {
+               mVerticesX.resize(mNumVertices);
+               mVerticesY.resize(mNumVertices);
+               mVerticesZ.resize(mNumVertices);
+               
+               // Vertices
+               for (int i = 0; i < mNumVertices; i++) {
+                       gzread(gzf, fbuffer, sizeof(float)  * 3);
+                       
+                       mVerticesX[i] = fbuffer[0];
+                       mVerticesY[i] = fbuffer[1];
+                       mVerticesZ[i] = fbuffer[2];
+
+                       // convert to grid space
+                       mVerticesX[i] /= dx;
+                       mVerticesX[i] += mResX*0.5;
+                       mVerticesY[i] /= dx;
+                       mVerticesY[i] += mResY*0.5;
+                       mVerticesZ[i] /= dx;
+                       mVerticesZ[i] += mResZ*0.5;
+               }
+       }
+       
+       // Num normals
+       mNumNormals = 0;
+       gzread(gzf, &mNumNormals, sizeof(float));
+       
+       if (mNumNormals)
+       {
+               mNormalsX.resize(mNumNormals);
+               mNormalsY.resize(mNumNormals);
+               mNormalsZ.resize(mNumNormals);
+               
+               // Normals
+               for (int i = 0; i < mNumNormals; i++) {
+                       gzread(gzf, fbuffer, sizeof(float) * 3);
+                       
+                       mNormalsX[i] = fbuffer[0];
+                       mNormalsY[i] = fbuffer[1];
+                       mNormalsZ[i] = fbuffer[2];
+               }
+       }
+       
+       // Num triangles
+       mNumTriangles = 0;
+       gzread(gzf, &mNumTriangles, sizeof(int));
+       
+       if (mNumTriangles)
+       {
+               mTrianglesX.resize(mNumTriangles);
+               mTrianglesY.resize(mNumTriangles);
+               mTrianglesZ.resize(mNumTriangles);
+               
+               // Triangles
+               for (int i = 0; i < mNumTriangles; i++) {
+                       gzread(gzf, ibuffer, sizeof(int) * 3);
+                       
+                       mTrianglesX[i] = ibuffer[0];
+                       mTrianglesY[i] = ibuffer[1];
+                       mTrianglesZ[i] = ibuffer[2];
+               }
+       }
+
+       gzclose( gzf );
+}
+
 void SMOKE::updatePointers(SmokeModifierData *smd)
 {
        std::cout << "Updating pointers low res" << std::endl;
diff --git a/intern/mantaflow/intern/SMOKE.h b/intern/mantaflow/intern/SMOKE.h
index c2c5e39..81887da 100644
--- a/intern/mantaflow/intern/SMOKE.h
+++ b/intern/mantaflow/intern/SMOKE.h
@@ -132,6 +132,8 @@ public:
        inline int getTriangleXAt(int i) { return mTrianglesX[i]; }
        inline int getTriangleYAt(int i) { return mTrianglesY[i]; }
        inline int getTriangleZAt(int i) { return mTrianglesZ[i]; }
+       
+       void updateMeshData(char* filename);
 
 private:
        // simulation constants
diff --git a/intern/mantaflow/intern/manta_smoke_API.cpp 
b/intern/mantaflow/intern/manta_smoke_API.cpp
index d96c390..45f7c15 100644
--- a/intern/mantaflow/intern/manta_smoke_API.cpp
+++ b/intern/mantaflow/intern/manta_smoke_API.cpp
@@ -564,3 +564,8 @@ extern "C" float liquid_get_triangle_z_at(SMOKE *liquid, 
int i)
        return liquid->getTriangleZAt(i);
 }
 
+extern "C" void liquid_update_mesh_data(SMOKE *liquid, char* filename)
+{
+       liquid->updateMeshData(filename);
+}
+

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to