Commit: 93d31ac344c5dd80a7e093eeae248dc8c0842957
Author: Sebastián Barschkis
Date:   Sun Jul 2 19:13:59 2017 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rB93d31ac344c5dd80a7e093eeae248dc8c0842957

improved pointcache and now also supporting FLIP visualization again

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

M       intern/mantaflow/extern/manta_fluid_API.h
M       intern/mantaflow/intern/FLUID.cpp
M       intern/mantaflow/intern/FLUID.h
M       intern/mantaflow/intern/manta_fluid_API.cpp
M       intern/mantaflow/intern/strings/liquid_script.h
M       release/scripts/startup/bl_ui/properties_physics_smoke.py
M       source/blender/blenkernel/intern/dynamicpaint.c
M       source/blender/blenkernel/intern/particle_system.c
M       source/blender/blenkernel/intern/pointcache.c
M       source/blender/blenkernel/intern/smoke.c
M       source/blender/makesdna/DNA_particle_types.h
M       source/blender/makesrna/intern/rna_smoke.c

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

diff --git a/intern/mantaflow/extern/manta_fluid_API.h 
b/intern/mantaflow/extern/manta_fluid_API.h
index 29f749bdc25..75824b3ad42 100644
--- a/intern/mantaflow/extern/manta_fluid_API.h
+++ b/intern/mantaflow/extern/manta_fluid_API.h
@@ -44,7 +44,8 @@ void smoke_manta_export(struct FLUID* smoke, struct 
SmokeModifierData *smd);
 void smoke_step(struct FLUID *smoke, int framenr);
 void smoke_dissolve(struct FLUID *smoke, int speed, int log);
 void smoke_dissolve_wavelet(struct FLUID *smoke, int speed, int log);
-void smoke_export(struct FLUID *smoke, float *dt, float *dx, float **dens, 
float **react, float **flame, float **fuel, float **heat, float **vx, float 
**vy, float **vz, float **r, float **g, float **b, int **obstacles, float 
**phi, float **pp, float **pvel);
+void smoke_export(struct FLUID *smoke, float *dt, float *dx, float **dens, 
float **react, float **flame, float **fuel, float **heat, float **vx, float 
**vy, float **vz, float **r, float **g, float **b, int **obstacles);
+void liquid_export(struct FLUID *liquid, float **phi, float **pp, float 
**pvel, float **ppSnd, float **pvelSnd);
 void smoke_turbulence_export(struct FLUID *smoke, float **dens, float **react, 
float **flame, float **fuel, float **r, float **g, float **b , float **tcu, 
float **tcv, float **tcw, float **tcu2, float **tcv2, float **tcw2);
 float *smoke_get_density(struct FLUID *smoke);
 float *smoke_get_fuel(struct FLUID *smoke);
@@ -87,15 +88,25 @@ void smoke_ensure_heat(struct FLUID *smoke, struct 
SmokeModifierData *smd);
 void smoke_ensure_fire(struct FLUID *smoke, struct SmokeModifierData *smd);
 void smoke_ensure_colors(struct FLUID *smoke, struct SmokeModifierData *smd);
 
+// Liquid grids
 float *liquid_get_phiin(struct FLUID *liquid);
 float *liquid_get_phiobs(struct FLUID *liquid);
 float *liquid_get_phiout(struct FLUID *liquid);
 void liquid_ensure_init(struct FLUID *liquid, struct SmokeModifierData *smd);
+void liquid_manta_export(struct FLUID* smoke, struct SmokeModifierData *smd);
+
+// Liquid Mantaflow IO
 void liquid_save_mesh(struct FLUID *liquid, char *filename);
+void liquid_save_mesh_high(struct FLUID *liquid, char *filename);
 void liquid_save_particles(struct FLUID *liquid, char *filename);
 void liquid_save_particle_velocities(struct FLUID *liquid, char *filename);
 void liquid_save_data(struct FLUID *liquid, char *pathname);
+void liquid_save_data_high(struct FLUID *liquid, char *pathname);
 void liquid_load_data(struct FLUID *liquid, char *pathname);
+void liquid_load_data_high(struct FLUID *liquid, char *pathname);
+void liquid_update_mesh_data(struct FLUID *liquid, char *filename);
+
+// Liquid mesh
 int liquid_get_num_verts(struct FLUID *liquid);
 int liquid_get_num_normals(struct FLUID *liquid);
 int liquid_get_num_triangles(struct FLUID *liquid);
@@ -108,24 +119,35 @@ float liquid_get_normal_z_at(struct FLUID *liquid, int i);
 float liquid_get_triangle_x_at(struct FLUID *liquid, int i);
 float liquid_get_triangle_y_at(struct FLUID *liquid, int i);
 float liquid_get_triangle_z_at(struct FLUID *liquid, int i);
-int liquid_get_num_particles(struct FLUID *liquid);
-int liquid_get_particle_flag_at(struct FLUID *liquid, int i);
-float liquid_get_particle_position_x_at(struct FLUID *liquid, int i);
-float liquid_get_particle_position_y_at(struct FLUID *liquid, int i);
-float liquid_get_particle_position_z_at(struct FLUID *liquid, int i);
-float liquid_get_particle_velocity_x_at(struct FLUID *liquid, int i);
-float liquid_get_particle_velocity_y_at(struct FLUID *liquid, int i);
-float liquid_get_particle_velocity_z_at(struct FLUID *liquid, int i);
-float *liquid_get_particle_data(struct FLUID *liquid);
-float *liquid_get_particle_velocity(struct FLUID *liquid);
-void liquid_update_mesh_data(struct FLUID *liquid, char *filename);
-void liquid_save_mesh_high(struct FLUID *liquid, char *filename);
-void liquid_save_data_high(struct FLUID *liquid, char *pathname);
-void liquid_load_data_high(struct FLUID *liquid, char *pathname);
-void liquid_manta_export(struct FLUID* smoke, struct SmokeModifierData *smd);
-void liquid_set_particle_data(struct FLUID* liquid, float* buffer, int 
numParts);
-void liquid_set_particle_velocity(struct FLUID* liquid, float* buffer, int 
numParts);
 
+// Liquids particles
+int liquid_get_num_flip_particles(struct FLUID *liquid);
+int liquid_get_num_snd_particles(struct FLUID *liquid);
+
+int liquid_get_flip_particle_flag_at(struct FLUID *liquid, int i);
+int liquid_get_snd_particle_flag_at(struct FLUID *liquid, int i);
+
+float liquid_get_flip_particle_position_x_at(struct FLUID *liquid, int i);
+float liquid_get_flip_particle_position_y_at(struct FLUID *liquid, int i);
+float liquid_get_flip_particle_position_z_at(struct FLUID *liquid, int i);
+float liquid_get_snd_particle_position_x_at(struct FLUID *liquid, int i);
+float liquid_get_snd_particle_position_y_at(struct FLUID *liquid, int i);
+float liquid_get_snd_particle_position_z_at(struct FLUID *liquid, int i);
+
+float liquid_get_flip_particle_velocity_x_at(struct FLUID *liquid, int i);
+float liquid_get_flip_particle_velocity_y_at(struct FLUID *liquid, int i);
+float liquid_get_flip_particle_velocity_z_at(struct FLUID *liquid, int i);
+float liquid_get_snd_particle_velocity_x_at(struct FLUID *liquid, int i);
+float liquid_get_snd_particle_velocity_y_at(struct FLUID *liquid, int i);
+float liquid_get_snd_particle_velocity_z_at(struct FLUID *liquid, int i);
+
+void liquid_set_flip_particle_data(struct FLUID* liquid, float* buffer, int 
numParts);
+void liquid_set_snd_particle_data(struct FLUID* liquid, float* buffer, int 
numParts);
+
+void liquid_set_flip_particle_velocity(struct FLUID* liquid, float* buffer, 
int numParts);
+void liquid_set_snd_particle_velocity(struct FLUID* liquid, float* buffer, int 
numParts);
+
+// Fluids in general
 int *fluid_get_num_obstacle(struct FLUID *fluid);
 float *fluid_get_inflow(struct FLUID *fluid);
 int fluid_get_res_x(struct FLUID *fluid);
diff --git a/intern/mantaflow/intern/FLUID.cpp 
b/intern/mantaflow/intern/FLUID.cpp
index 956407c36c3..e0c8074476e 100644
--- a/intern/mantaflow/intern/FLUID.cpp
+++ b/intern/mantaflow/intern/FLUID.cpp
@@ -124,8 +124,10 @@ FLUID::FLUID(int *res, SmokeModifierData *smd) : 
mCurrentID(++solverID)
        mNumTriangles = 0;
 
        // Particles
-       mParticleData      = NULL;
-       mParticleVelocity  = NULL;
+       mFlipParticleData      = NULL;
+       mFlipParticleVelocity  = NULL;
+       mSndParticleData       = NULL;
+       mSndParticleVelocity   = NULL;
 
        // Only start Mantaflow once. No need to start whenever new FLUID 
objected is allocated
        if (!mantaInitialized)
@@ -476,8 +478,10 @@ FLUID::~FLUID()
        mPhiOut = NULL;
        mPhi    = NULL;
 
-       mParticleData      = NULL;
-       mParticleVelocity  = NULL;
+       mFlipParticleData      = NULL;
+       mFlipParticleVelocity  = NULL;
+       mSndParticleData       = NULL;
+       mSndParticleVelocity   = NULL;
 
        // Reset flags
        mUsingHeat    = false;
@@ -1083,8 +1087,10 @@ void FLUID::updatePointers()
                mPhiOut = (float*) getDataPointer("phiOut" + solver_ext, 
solver);
                mPhi    = (float*) getDataPointer("phi" + solver_ext, solver);
 
-               mParticleData     = (std::vector<pData>*) 
getDataPointer("ppSnd" + solver_ext, solver);
-               mParticleVelocity = (std::vector<pVel>*) 
getDataPointer("pVelSnd" + parts_ext, parts);
+               mFlipParticleData     = (std::vector<pData>*) 
getDataPointer("pp" + solver_ext, solver);
+               mFlipParticleVelocity = (std::vector<pVel>*) 
getDataPointer("pVel" + parts_ext, parts);
+               mSndParticleData      = (std::vector<pData>*) 
getDataPointer("ppSnd" + solver_ext, solver);
+               mSndParticleVelocity  = (std::vector<pVel>*) 
getDataPointer("pVelSnd" + parts_ext, parts);
        }
        
        // Smoke
@@ -1148,11 +1154,11 @@ void FLUID::updatePointersHigh()
        }
 }
 
-void FLUID::setParticleData(float* buffer, int numParts)
+void FLUID::setFlipParticleData(float* buffer, int numParts)
 {
-       mParticleData->resize(numParts);
+       mFlipParticleData->resize(numParts);
        FLUID::pData* bufferPData = (FLUID::pData*) buffer;
-       for (std::vector<pData>::iterator it = mParticleData->begin(); it != 
mParticleData->end(); ++it) {
+       for (std::vector<pData>::iterator it = mFlipParticleData->begin(); it 
!= mFlipParticleData->end(); ++it) {
                it->pos[0] = bufferPData->pos[0];
                it->pos[1] = bufferPData->pos[1];
                it->pos[2] = bufferPData->pos[2];
@@ -1161,11 +1167,36 @@ void FLUID::setParticleData(float* buffer, int numParts)
        }
 }
 
-void FLUID::setParticleVelocity(float* buffer, int numParts)
+void FLUID::setSndParticleData(float* buffer, int numParts)
 {
-       mParticleVelocity->resize(numParts);
+       mSndParticleData->resize(numParts);
+       FLUID::pData* bufferPData = (FLUID::pData*) buffer;
+       for (std::vector<pData>::iterator it = mSndParticleData->begin(); it != 
mSndParticleData->end(); ++it) {
+               it->pos[0] = bufferPData->pos[0];
+               it->pos[1] = bufferPData->pos[1];
+               it->pos[2] = bufferPData->pos[2];
+               it->flag = bufferPData->flag;
+               bufferPData++;
+       }
+}
+
+void FLUID::setFlipParticleVelocity(float* buffer, int numParts)
+{
+       mFlipParticleVelocity->resize(numParts);
+       FLUID::pVel* bufferPVel = (FLUID::pVel*) buffer;
+       for (std::vector<pVel>::iterator it = mFlipParticleVelocity->begin(); 
it != mFlipParticleVelocity->end(); ++it) {
+               it->pos[0] = bufferPVel->pos[0];
+               it->pos[1] = bufferPVel->pos[1];
+               it->pos[2] = bufferPVel->pos[2];
+               bufferPVel++;
+       }
+}
+
+void FLUID::setSndParticleVelocity(float* buffer, int numParts)
+{
+       mSndParticleVelocity->resize(numParts);
        FLUID::pVel* bufferPVel = (FLUID::pVel*) buffer;
-       for (std::vector<pVel>::iterator it = mParticleVelocity->begin(); it != 
mParticleVelocity->end(); ++it) {
+       for (std::vector<pVel>::iterator it = mSndParticleVelocity->begin(); it 
!= mSndParticleVelocity->end(); ++it) {
                it->pos[0] = bufferPVel->pos[0];
                it->pos[1] = bufferPVel->pos[1];
                it->pos[2] = bufferPVel->pos[2];
diff --git a/intern/mantaflow/intern/FLUID.h b/intern/mantaflow/intern/FLUID.h
index 02f2a6a1d6a..f2887d8d9df 100644
--- a/intern/mantaflow/intern/FLUID.h
+++ b/intern/mantaflow/intern/FLUID.h
@@ -153,26 +153,44 @@ 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]; }


@@ Diff output truncated at 10240 characters. @@

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

Reply via email to