[Bf-blender-cvs] [8698915] soc-2014-fluid: started scenarios implemetation; added file for smoke; back to setup file generation
Roman Pogribnyi
noreply at git.blender.org
Mon Aug 18 20:48:51 CEST 2014
Commit: 86989150b51388ac06376d62d13eb6b2a6386970
Author: Roman Pogribnyi
Date: Mon Aug 18 20:48:33 2014 +0200
Branches: soc-2014-fluid
https://developer.blender.org/rB86989150b51388ac06376d62d13eb6b2a6386970
started scenarios implemetation; added file for smoke; back to setup file generation
===================================================================
M intern/smoke/intern/MANTA.cpp
M intern/smoke/intern/MANTA.h
M source/blender/python/manta_pp/CMakeLists.txt
M source/blender/python/manta_pp/plugin/initplugins.cpp
M source/blender/python/manta_pp/pwrapper/pymain.cpp
A source/blender/python/manta_pp/scenarios/smoke.py
===================================================================
diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index 3bead37..375df7e 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -177,7 +177,7 @@ extern "C" int read_mantaflow_sim(struct SmokeDomainSettings *sds, char *name, b
return 0;
}
-void indent_ss(ostringstream& ss, int indent)
+void indent_ss(stringstream& ss, int indent)
{
/*two-spaces indent*/
if (indent < 0) return;
@@ -188,7 +188,7 @@ void indent_ss(ostringstream& ss, int indent)
ss << indentation;
}
-void manta_gen_noise(ostringstream& ss, char* solver, int indent, char *noise, int seed, bool load, bool clamp, float clampNeg, float clampPos, float valScale, float valOffset, float timeAnim)
+void manta_gen_noise(stringstream& ss, char* solver, int indent, char *noise, int seed, bool load, bool clamp, float clampNeg, float clampPos, float valScale, float valOffset, float timeAnim)
{
if (ss == NULL)/*should never be here*/
{
@@ -205,7 +205,7 @@ void manta_gen_noise(ostringstream& ss, char* solver, int indent, char *noise, i
ss << noise << ".timeAnim = " << timeAnim << " \n";
}
-void manta_solve_pressure(ostringstream& ss, char *flags, char *vel, char *pressure, bool useResNorms, int openBound, int solver_res,float cgMaxIterFac, float cgAccuracy)
+void manta_solve_pressure(stringstream& ss, char *flags, char *vel, char *pressure, bool useResNorms, int openBound, int solver_res,float cgMaxIterFac, float cgAccuracy)
{
/*open:0 ; vertical : 1; closed:2*/
ss << " solvePressure(flags=" << flags << ", vel=" << vel << ", pressure=" << pressure << ", useResNorm=" << (useResNorms?"True":"False") << ", openBound='";
@@ -226,7 +226,7 @@ void manta_solve_pressure(ostringstream& ss, char *flags, char *vel, char *press
ss << ", cgMaxIterFac=" << cgMaxIterFac << ", cgAccuracy=" << cgAccuracy << ") \n";
}
-void manta_advect_SemiLagr(ostringstream& ss, int indent, char *flags, char *vel, char *grid, int order)
+void manta_advect_SemiLagr(stringstream& ss, int indent, char *flags, char *vel, char *grid, int order)
{
if((order <=1) || (flags == NULL) || (vel == NULL) || (grid == NULL)){return;}
indent_ss(ss, indent);
@@ -235,7 +235,7 @@ void manta_advect_SemiLagr(ostringstream& ss, int indent, char *flags, char *vel
}
/*create solver, handle 2D case*/
-void manta_create_solver(ostringstream& ss, char *name, char *nick, char *grid_size_name, int x_res, int y_res, int z_res, int dim)
+void manta_create_solver(stringstream& ss, char *name, char *nick, char *grid_size_name, int x_res, int y_res, int z_res, int dim)
{
if ((dim != 2) && (dim != 3))
{ return; }
@@ -250,7 +250,7 @@ inline bool file_exists (const std::string& name) {
}
/*blender transforms obj coords to [-1,1]. This method transforms them back*/
-void add_mesh_transform_method(ostringstream& ss)
+void add_mesh_transform_method(stringstream& ss)
{
ss << "def transform_back(obj, gs):\n" <<
" obj.scale(gs/2)\n" <<
@@ -371,7 +371,7 @@ void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd)
return;
ofstream manta_setup_file;
manta_setup_file.open("manta_scene.py", std::fstream::trunc);
- ostringstream ss; /*setup contents*/
+ stringstream ss; /*setup contents*/
/*header*/
ss << "from manta import * \n";
@@ -544,21 +544,47 @@ void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd)
ss << " densityInflowMesh(flags=xl_flags, density=xl_density, mesh=source, value=1)\n";
ss << " xl_density.save('densityXl_%04d.uni' % t)\n";
//ss << " densityInflow( flags=xl_flags, density=xl_density, noise=xl_noise, shape=xl_source, scale=1, sigma=0.5 ) \n";
-// ss << " xl.step() \n";
+ ss << " xl.step() \n";
}
manta_setup_file << ss.rdbuf();
manta_setup_file.close();
+// parseFile(smd, scene, "smoke.py");
vector<string> a;
a.push_back("manta_scene.py");
- runMantaScript(ss.str(),a);
+ runMantaScript("",a);
}
-std::string getRealValue(SmokeDomainSettings *sds, Scene *s, const std::string& varName)
+std::string getRealValue(SmokeModifierData *smd, Scene *s, const std::string& varName)
{
- return "";
+ ostringstream ss;
+ if (varName == "UVS_CNT")
+ ss << smd->domain->manta_uvs_num ;
+ else if (varName == "UPRES")
+ ss << smd->domain->amplify+1;
+ else if (varName == "WLT_STR")
+ ss << smd->domain->strength ;
+ else if (varName == "RES")
+ ss << smd->domain->maxres;
+ else if (varName == "RESX")
+ ss << smd->domain->fluid->xRes();
+ else if (varName == "RESY")
+ ss << smd->domain->fluid->yRes();
+ else if (varName == "RESZ")
+ ss << smd->domain->fluid->zRes();
+ else if (varName == "SOLVER_DIM")
+ ss << smd->domain->manta_solver_res;
+ else if (varName == "NOISE_CN")
+ ss << smd->domain->noise_clamp_neg;
+ else if (varName == "NOISE_CP")
+ ss << smd->domain->noise_clamp_pos;
+ else if (varName == "NOISE_VALSCALE")
+ ss << smd->domain->noise_val_scale;
+ else if (varName == "NOISE_VALOFFSET")
+ ss << smd->domain->noise_val_offset;
+ return ss.str();
}
-std::string parseLine(SmokeDomainSettings *sds, Scene *s, const string& line)
+std::string parseLine(SmokeModifierData *smd, Scene *s, const string& line)
{
if (line.size() == 0) return "";
string res = "";
@@ -574,7 +600,7 @@ std::string parseLine(SmokeDomainSettings *sds, Scene *s, const string& line)
else if(line[currPos] == delimiter && readingVar){
readingVar = false;
end_del = currPos;
- res += getRealValue(sds,s,line.substr(start_del, currPos - start_del));
+ res += getRealValue(smd,s,line.substr(start_del, currPos - start_del));
}
currPos ++;
}
@@ -582,14 +608,14 @@ std::string parseLine(SmokeDomainSettings *sds, Scene *s, const string& line)
return res;
}
-std::string parseFile(SmokeDomainSettings *sds, Scene *s, char *file)
+void parseFile(SmokeModifierData *smd, Scene *s, char *file)
{
ifstream f (file);
- ofstream of("scenario_p.py");
+ ofstream of("manta_scene.py");
string line="";
if (f.is_open()){
while(getline(f,line)){
- of << parseLine(sds,s,line) << "\n";
+ of << parseLine(smd,s,line) << "\n";
}
f.close();
}
@@ -597,7 +623,6 @@ std::string parseFile(SmokeDomainSettings *sds, Scene *s, char *file)
printf ("Error: No scenario file found");
}
of.close();
- return "";
}
diff --git a/intern/smoke/intern/MANTA.h b/intern/smoke/intern/MANTA.h
index 7ebde51..8c17fcb 100644
--- a/intern/smoke/intern/MANTA.h
+++ b/intern/smoke/intern/MANTA.h
@@ -30,21 +30,21 @@ extern "C" bool manta_check_grid_size(struct FLUID_3D *fluid, int dimX, int dimY
extern "C" int read_mantaflow_sim(struct SmokeDomainSettings *sds, char *name, bool read_wavelets);
-void indent_ss(ostringstream& ss, int indent);
+void indent_ss(stringstream& ss, int indent);
-void manta_gen_noise(ostringstream& ss, char* solver, int indent, char *noise, int seed, bool load, bool clamp, float clampNeg, float clampPos, float valScale, float valOffset, float timeAnim);
+void manta_gen_noise(stringstream& ss, char* solver, int indent, char *noise, int seed, bool load, bool clamp, float clampNeg, float clampPos, float valScale, float valOffset, float timeAnim);
-void manta_solve_pressure(ostringstream& ss, char *flags, char *vel, char *pressure, bool useResNorms, int openBound, int solver_res,float cgMaxIterFac=1.0, float cgAccuracy = 0.01);
+void manta_solve_pressure(stringstream& ss, char *flags, char *vel, char *pressure, bool useResNorms, int openBound, int solver_res,float cgMaxIterFac=1.0, float cgAccuracy = 0.01);
-void manta_advect_SemiLagr(ostringstream& ss, int indent, char *flags, char *vel, char *grid, int order);
+void manta_advect_SemiLagr(stringstream& ss, int indent, char *flags, char *vel, char *grid, int order);
/*create solver, handle 2D case*/
-void manta_create_solver(ostringstream& ss, char *name, char *nick, char *grid_size_name, int x_res, int y_res, int z_res, int dim);
+void manta_create_solver(stringstream& ss, char *name, char *nick, char *grid_size_name, int x_res, int y_res, int z_res, int dim);
inline bool file_exists (const std::string& name);
/*blender transforms obj coords to [-1,1]. This method transforms them back*/
-void add_mesh_transform_method(ostringstream& ss);
+void add_mesh_transform_method(stringstream& ss);
void manta_cache_path(char *filepath);
@@ -64,11 +64,11 @@ void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd);
void manta_sim_step(int frame);
-std::string getRealValue(SmokeDomainSettings *sds, Scene *s, const string& varName);
+std::string getRealValue(SmokeModifierData *sds, Scene *s, const string& varName);
-std::string parseLine(SmokeDomainSettings *sds, Scene *s, const string& line);
+std::string parseLine(SmokeModifierData *sds, Scene *s, const string& line);
-std::string parseFile(SmokeDomainSettings *sds, Scene *s, char *file);
+void parseFile(SmokeModifierData *sds, Scene *s, char *file);
#endif /* MANTA_H */
diff --git a/source/blender/python/manta_pp/CMakeLists.txt b/source/blender/python/manta_pp/CMakeLists.txt
index 61d52ed..f075425 100644
--- a/source/blender/python/manta_pp/CMakeLists.txt
+++ b/source/blender/python/manta_pp/CMakeLists.txt
@@ -126,6 +126,8 @@ ${CMAKE_CURRENT_SOURCE_DIR}/util/mcubes.h
${CMAKE_CURRENT_SOURCE_DIR}/util/randomstream.h
${CMAKE_CURRENT_SOURCE_DIR}/util/solvana.h
+${CMAKE_CURRENT_SOURCE_DIR}/scenarios/smoke.py
+
#gui/customctrl.cpp
#gui/customctrl.h
#gui/customctrl.h.reg
diff --git a/source/blender/python/manta_pp/plugin/initplugins.cpp b/source/blender/python/manta_pp/plugin/initplugins.cpp
index db779dd..24a5032 100644
--- a/source/blender/python/manta_pp/plugin/initplugins.cpp
+++ b/source/blender/python/manta_pp/plugin/initplugins.cpp
@@ -69,12 +69,12 @@ namespace Manta {
} static PyObject* _W_1 (PyObject* _self, PyObject* _linargs, PyObject* _kwds) { try { PbArgs _args(_linargs, _kwds); FluidSolver *parent = _args.obtainParent(); pbPreparePlugin(parent, "densityInflowMeshNoise" ); PyObject *_retval = 0; { ArgLocker _lock; FlagGrid& flags = *_args.getPtr<FlagGrid >("flags",0,&_lock); Grid<Real>& density = *_args.getPtr<Grid<Real> >("density",1,&_lock); WaveletNoiseField& noise = *_args.getPtr<WaveletNoiseField >("noise",2,&_lock); M
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list