[Bf-blender-cvs] [ff20f36] soc-2014-fluid: exporting wind force
Roman Pogribnyi
noreply at git.blender.org
Thu Aug 7 23:51:33 CEST 2014
Commit: ff20f36680a162cd075b7fa052d729cff0545980
Author: Roman Pogribnyi
Date: Thu Aug 7 20:12:38 2014 +0200
Branches: soc-2014-fluid
https://developer.blender.org/rBff20f36680a162cd075b7fa052d729cff0545980
exporting wind force
===================================================================
M intern/smoke/extern/smoke_API.h
M intern/smoke/intern/MANTA.cpp
M intern/smoke/intern/MANTA.h
M intern/smoke/intern/smoke_API.cpp
M source/blender/blenkernel/intern/smoke.c
M source/blender/python/manta_pp/pwrapper/pymain.cpp
===================================================================
diff --git a/intern/smoke/extern/smoke_API.h b/intern/smoke/extern/smoke_API.h
index e57ac43..38b5a05 100644
--- a/intern/smoke/extern/smoke_API.h
+++ b/intern/smoke/extern/smoke_API.h
@@ -118,6 +118,8 @@ void smoke_mantaflow_read(struct FLUID_3D *fluid, char* name);
void smoke_mantaflow_write_scene_file(struct Scene *s, struct SmokeModifierData *smd);
void smoke_mantaflow_sim_step(struct SmokeModifierData *smd);
void smoke_mantaflow_stop_sim();
+void manta_write_effectors(struct Scene *s, struct SmokeModifierData *smd);
+void update_effectors(struct Scene *scene, struct Object *ob,struct SmokeDomainSettings *sds, float dt);
#ifdef __cplusplus
}
#endif
diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index 8d7cfd7..b547744 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -5,6 +5,8 @@
void runMantaScript(vector<string>& args);//defined in manta_pp/pwrapper/pymain.cpp
+void export_force_fields(struct FLUID_3D *fluid);
+
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())) {
diff --git a/intern/smoke/intern/MANTA.h b/intern/smoke/intern/MANTA.h
index 7f82a03..42ecb80 100644
--- a/intern/smoke/intern/MANTA.h
+++ b/intern/smoke/intern/MANTA.h
@@ -15,6 +15,8 @@
//#include "../../../source/blender/blenlib/BLI_fileops.h"
//#include "../../../source/blender/python/manta_pp/pwrapper/pymain.cpp"
+void export_force_fields(int size_x, int size_y, int size_z, float *f_x, float*f_y, float*f_z);/*defined in pymain.cpp*/
+
struct manta_arg_struct {
// std::string filepath;
SmokeModifierData *smd;
diff --git a/intern/smoke/intern/smoke_API.cpp b/intern/smoke/intern/smoke_API.cpp
index 572861a..51fdeb5 100644
--- a/intern/smoke/intern/smoke_API.cpp
+++ b/intern/smoke/intern/smoke_API.cpp
@@ -508,13 +508,34 @@ extern "C" void smoke_mantaflow_read(struct FLUID_3D *fluid, char* name)
extern "C" void smoke_mantaflow_write_scene_file(struct Scene *s, struct SmokeModifierData *smd)
{
- generate_manta_sim_file(s, smd);
+// update_effectors(s, NULL, smd->domain, 0.1f);
+// FLUID_3D *fluid = smd->domain->fluid;
+// int size_x = fluid->xRes();
+// int size_y = fluid->yRes();
+// int size_z = fluid->zRes();
+// float *force_x = smoke_get_force_x(fluid);
+// float *force_y = smoke_get_force_y(fluid);
+// float *force_z = smoke_get_force_z(fluid);
+// export_force_fields(size_x, size_y, size_z, force_x, force_y, force_z);
+ generate_manta_sim_file(s, smd);
}
extern "C" void smoke_mantaflow_sim_step(SmokeModifierData *smd)
{
run_manta_scene(smd);
}
+extern "C" void manta_write_effectors(struct Scene *s, struct SmokeModifierData *smd)
+{
+ /*updateeffectors function already called*/
+ FLUID_3D *fluid = smd->domain->fluid;
+ int size_x = fluid->xRes();
+ int size_y = fluid->yRes();
+ int size_z = fluid->zRes();
+ float *force_x = smoke_get_force_x(fluid);
+ float *force_y = smoke_get_force_y(fluid);
+ float *force_z = smoke_get_force_z(fluid);
+ export_force_fields(size_x, size_y, size_z, force_x, force_y, force_z);
+}
extern "C" void smoke_mantaflow_stop_sim()
{
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index e734839..ca4a516 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -2378,7 +2378,7 @@ static void update_flowsfluids(Scene *scene, Object *ob, SmokeDomainSettings *sd
MEM_freeN(emaps);
}
-static void update_effectors(Scene *scene, Object *ob, SmokeDomainSettings *sds, float UNUSED(dt))
+void update_effectors(Scene *scene, Object *ob, SmokeDomainSettings *sds, float UNUSED(dt))
{
ListBase *effectors;
/* make sure smoke flow influence is 0.0f */
@@ -2411,8 +2411,8 @@ static void update_effectors(Scene *scene, Object *ob, SmokeDomainSettings *sds,
float voxelCenter[3] = {0, 0, 0}, vel[3] = {0, 0, 0}, retvel[3] = {0, 0, 0};
unsigned int index = smoke_get_index(x, sds->res[0], y, sds->res[1], z);
- if (((fuel ? MAX2(density[index], fuel[index]) : density[index]) < FLT_EPSILON) || obstacle[index])
- continue;
+// if (((fuel ? MAX2(density[index], fuel[index]) : density[index]) < FLT_EPSILON) || obstacle[index])
+// continue;
vel[0] = velocity_x[index];
vel[1] = velocity_y[index];
@@ -2698,6 +2698,8 @@ static void smokeModifier_process(SmokeModifierData *smd, Scene *scene, Object *
}
if(smd->domain->flags & MOD_SMOKE_USE_MANTA)
{
+ update_effectors(scene, ob, smd->domain, 0.1f);
+ manta_write_effectors(scene,smd);
char buff[100];
if(smd->domain->manta_start_frame > scene->r.cfra)
return;
diff --git a/source/blender/python/manta_pp/pwrapper/pymain.cpp b/source/blender/python/manta_pp/pwrapper/pymain.cpp
index a392699..a569322 100644
--- a/source/blender/python/manta_pp/pwrapper/pymain.cpp
+++ b/source/blender/python/manta_pp/pwrapper/pymain.cpp
@@ -17,6 +17,8 @@
#include <stdio.h>
#include "manta.h"
#include "../general.h"
+#include "grid.h"
+#include "fileio.h"
#include "wchar.h"
using namespace std;
namespace Manta {
@@ -62,6 +64,27 @@ del_var(tempFlag)\n\
del_var(sdf_flow)\n\
del_var(source_shape)";
const static string clean_code2 = "del s; del noise;";
+
+
+void export_force_fields(int size_x, int size_y, int size_z, float *f_x, float*f_y, float*f_z)
+{
+ assert(size_x>0 && size_y>0 && size_z>0);
+ FluidSolver dummy(Vec3i(size_x,size_y,size_z));
+ Grid<Vec3 > force_fields(&dummy, false);
+ for (int x=0; x < size_x; ++x)
+ {
+ for (int y=0; y < size_y; ++y)
+ {
+ for (int z=0; z < size_z; ++z)
+ {
+ force_fields.get(x, y, z) = Vec3(f_x[x],f_y[y],f_z[z]);
+ }
+ }
+ }
+ writeGridUni("s.uni", &force_fields);
+ writeGridTxt("s.txt", &force_fields);
+}
+
void runMantaScript(vector<string>& args) {
string filename = args[0];
More information about the Bf-blender-cvs
mailing list