Commit: db18178f97e1e81a29193bcb5d32bff0060047e3 Author: Sebastián Barschkis Date: Sun Sep 11 19:24:18 2016 +0200 Branches: fluid-mantaflow https://developer.blender.org/rBdb18178f97e1e81a29193bcb5d32bff0060047e3
refactored manta script export and also added script export functionality for liquids =================================================================== 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 intern/mantaflow/intern/strings/shared_script.h M intern/mantaflow/intern/strings/smoke_script.h M source/blender/editors/physics/physics_fluid.c =================================================================== diff --git a/intern/mantaflow/extern/manta_fluid_API.h b/intern/mantaflow/extern/manta_fluid_API.h index 7cca7b5..668b4f2 100644 --- a/intern/mantaflow/extern/manta_fluid_API.h +++ b/intern/mantaflow/extern/manta_fluid_API.h @@ -111,6 +111,8 @@ 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, SmokeModifierData *smd); + #ifdef __cplusplus } diff --git a/intern/mantaflow/intern/FLUID.cpp b/intern/mantaflow/intern/FLUID.cpp index 216e09c..4738999 100644 --- a/intern/mantaflow/intern/FLUID.cpp +++ b/intern/mantaflow/intern/FLUID.cpp @@ -216,6 +216,7 @@ void FLUID::initSmoke(SmokeModifierData *smd) + smoke_variables_low + smoke_bounds_low + smoke_adaptive_step + + smoke_export_low + smoke_step_low; std::string finalString = parseScript(tmpString, smd); mCommands.clear(); @@ -231,6 +232,7 @@ void FLUID::initSmokeHigh(SmokeModifierData *smd) + smoke_uv_setup + smoke_bounds_high + smoke_wavelet_turbulence_noise + + smoke_export_high + smoke_step_high; std::string finalString = parseScript(tmpString, smd); mCommands.clear(); @@ -633,7 +635,7 @@ std::string FLUID::parseScript(const std::string& setup_string, SmokeModifierDat return res.str(); } -void FLUID::exportScript(SmokeModifierData *smd) +void FLUID::exportSmokeScript(SmokeModifierData *smd) { // Setup low std::string manta_script = @@ -711,7 +713,8 @@ void FLUID::exportScript(SmokeModifierData *smd) std::string final_script = FLUID::parseScript(manta_script, smd); // Add standalone mode (loop, gui, ...) - final_script += smoke_standalone; + final_script += smoke_standalone_load; + final_script += fluid_standalone; // Write script std::ofstream myfile; @@ -720,18 +723,71 @@ void FLUID::exportScript(SmokeModifierData *smd) myfile.close(); } -void FLUID::exportGrids(SmokeModifierData *smd) +void FLUID::exportSmokeData(SmokeModifierData *smd) { - PyGILState_STATE gilstate = PyGILState_Ensure(); + bool highres = smd->domain->flags & MOD_SMOKE_HIGHRES; + + char parent_dir[1024]; + BLI_split_dir_part(smd->domain->manta_filepath, parent_dir, sizeof(parent_dir)); - // Export low res grids - PyRun_SimpleString(FLUID::parseScript(smoke_export_low, smd).c_str()); + FLUID::saveSmokeData(parent_dir); + if (highres) + FLUID::saveSmokeDataHigh(parent_dir); +} - // Export high res grids - if (smd->domain->flags & MOD_SMOKE_HIGHRES) { - PyRun_SimpleString(FLUID::parseScript(smoke_export_high, smd).c_str()); +void FLUID::exportLiquidScript(SmokeModifierData *smd) +{ + bool highres = smd->domain->flags & MOD_SMOKE_HIGHRES; + + std::string manta_script; + + manta_script += manta_import + + fluid_solver_low + + fluid_adaptive_time_stepping_low + + liquid_alloc_low + + liquid_init_phi + + liquid_bounds_low + + liquid_variables_low; + + if (highres) { + manta_script += fluid_solver_high + + fluid_adaptive_time_stepping_high + + liquid_alloc_high + + liquid_bounds_high + + liquid_variables_high; } - PyGILState_Release(gilstate); + + manta_script += liquid_import_low; + if (highres) + manta_script += liquid_import_high; + + manta_script += liquid_step_low; + if (highres) + manta_script += liquid_step_high; + + manta_script += liquid_adaptive_step; + manta_script += liquid_standalone_load; + manta_script += fluid_standalone; + + std::string final_script = FLUID::parseScript(manta_script, smd); + + // Write script + std::ofstream myfile; + myfile.open(smd->domain->manta_filepath); + myfile << final_script; + myfile.close(); +} + +void FLUID::exportLiquidData(SmokeModifierData *smd) +{ + bool highres = smd->domain->flags & MOD_SMOKE_HIGHRES; + + char parent_dir[1024]; + BLI_split_dir_part(smd->domain->manta_filepath, parent_dir, sizeof(parent_dir)); + + FLUID::saveLiquidData(parent_dir); + if (highres) + FLUID::saveLiquidDataHigh(parent_dir); } void* FLUID::getGridPointer(std::string gridName, std::string solverName) @@ -943,6 +999,30 @@ void FLUID::saveMeshHigh(char *filename) runPythonString(mCommands); } +void FLUID::saveSmokeData(char *pathname) +{ + std::string path(pathname); + + mCommands.clear(); + std::ostringstream save_smoke_data_low; + save_smoke_data_low << "save_smoke_data_low('" << path << "')"; + mCommands.push_back(save_smoke_data_low.str()); + + runPythonString(mCommands); +} + +void FLUID::saveSmokeDataHigh(char *pathname) +{ + std::string path(pathname); + + mCommands.clear(); + std::ostringstream save_smoke_data_high; + save_smoke_data_high << "save_smoke_data_high('" << path << "')"; + mCommands.push_back(save_smoke_data_high.str()); + + runPythonString(mCommands); +} + void FLUID::saveLiquidData(char *pathname) { std::string path(pathname); diff --git a/intern/mantaflow/intern/FLUID.h b/intern/mantaflow/intern/FLUID.h index c6690f5..607bee0 100644 --- a/intern/mantaflow/intern/FLUID.h +++ b/intern/mantaflow/intern/FLUID.h @@ -58,14 +58,18 @@ public: void updatePointersHigh(struct SmokeModifierData *smd); // IO for Mantaflow scene script - void exportScript(struct SmokeModifierData *smd); - void exportGrids(struct SmokeModifierData *smd); + void exportSmokeScript(struct SmokeModifierData *smd); + void exportSmokeData(struct SmokeModifierData *smd); + void exportLiquidScript(struct SmokeModifierData *smd); + void exportLiquidData(struct SmokeModifierData *smd); // Write files for liquids void saveMesh(char *filename); void saveMeshHigh(char *filename); void saveLiquidData(char *pathname); void saveLiquidDataHigh(char *pathname); + void saveSmokeData(char *pathname); + void saveSmokeDataHigh(char *pathname); // Load files for liquids void loadLiquidData(char *pathname); @@ -239,4 +243,4 @@ private: void* getGridPointer(std::string gridName, std::string solverName); }; -#endif \ No newline at end of file +#endif diff --git a/intern/mantaflow/intern/manta_fluid_API.cpp b/intern/mantaflow/intern/manta_fluid_API.cpp index 3b3d097..2aa457b 100644 --- a/intern/mantaflow/intern/manta_fluid_API.cpp +++ b/intern/mantaflow/intern/manta_fluid_API.cpp @@ -58,8 +58,8 @@ extern "C" size_t smoke_get_index2d(int x, int max_x, int y /*, int max_y, int z extern "C" void smoke_manta_export(FLUID* smoke, SmokeModifierData *smd) { if (!smoke && !smd) return; - smoke->exportScript(smd); - smoke->exportGrids(smd); + smoke->exportSmokeScript(smd); + smoke->exportSmokeData(smd); } extern "C" void smoke_step(FLUID *smoke, SmokeModifierData *smd) @@ -610,3 +610,9 @@ extern "C" void liquid_update_mesh_data(FLUID *liquid, char* filename) liquid->updateMeshData(filename); } +extern "C" void liquid_manta_export(FLUID* liquid, SmokeModifierData *smd) +{ + if (!liquid && !smd) return; + liquid->exportLiquidScript(smd); + liquid->exportLiquidData(smd); +} diff --git a/intern/mantaflow/intern/strings/liquid_script.h b/intern/mantaflow/intern/strings/liquid_script.h index 592f741..a54e0c1 100644 --- a/intern/mantaflow/intern/strings/liquid_script.h +++ b/intern/mantaflow/intern/strings/liquid_script.h @@ -379,3 +379,16 @@ if 'maxVel' in globals() : del maxVel\n"; const std::string liquid_delete_variables_high = "\n\ mantaMsg('Deleting highres liquid variables')\n"; + +////////////////////////////////////////////////////////////////////// +// STANDALONE MODE +////////////////////////////////////////////////////////////////////// + +const std::string liquid_standalone_load = "\n\ +# import *.uni files\n\ +path_prefix = '$MANTA_EXPORT_PATH$'\n\ +load_liquid_data_low(path_prefix)\n\ +if using_highres:\n\ + load_liquid_data_high(path_prefix)\n"; + + diff --git a/intern/mantaflow/intern/strings/shared_script.h b/intern/mantaflow/intern/strings/shared_script.h index 1473b02..9f9ba95 100644 --- a/intern/mantaflow/intern/strings/shared_script.h +++ b/intern/mantaflow/intern/strings/shared_script.h @@ -122,3 +122,22 @@ if 'xl' in globals() : del xl\n"; const std::string gc_collect = "\n\ gc.collect()\n"; + +////////////////////////////////////////////////////////////////////// +// STANDALONE MODE +////////////////////////////////////////////////////////////////////// + +const std::string fluid_standalone = "\n\ +if (GUI):\n\ + gui=Gui()\n\ + gui.show()\n\ + gui.pause()\n\ +\n\ +start_frame = $CURRENT_FRAME$\n\ +end_frame = 100\n\ +\n\ +# All low and high res steps\n\ +while start_frame <= end_frame:\n\ + manta_step(start_frame)\n\ + start_frame += 1\n"; + diff --git a/intern/mantaflow/intern/strings/smoke_script.h b/intern/mantaflow/intern/strings/smoke_script.h index 0fb19e6..5f1caa5 100644 --- a/intern/mantaflow/intern/strings/smoke_script.h +++ b/intern/mantaflow/intern/strings/smoke_script.h @@ -342,71 +342,68 @@ def update_flame_high():\n\ ////////////////////////////////////////////////////////////////////// const std::string smoke_import_low = "\n\ -def import_grids_low():\n\ - mantaMsg('Importing grids low')\n\ - density.load('$MANTA_EXPORT_PATH$density.uni')\n\ - flags.load('$MANTA_EXPORT_PATH$flags.uni')\n\ - vel.save(os.path.join('$MANTA_EXPORT_PATH$','vel.uni'))\n\ - forces.load('$MANTA_EXPORT_PATH$forces.uni')\n\ - inflow_grid.load('$MANTA_EXPORT_PATH$inflow_low.uni')\n\ - fuel_inflow.load('$MANTA_EXPORT_PATH$fuel_inflow.uni')\n\ +def load_smoke_data_low(path):\n\ + density.load(path + str('density.uni'))\n\ + flags.load(path + str('flags.uni'))\n\ + vel.load(path + str('vel.uni'))\n\ + forces.load(path + str('forces.uni')\n\ + inflow_grid.load(path + str('inflow_low.uni')\n\ + fuel_inflow.load(path + str('fuel_inflow.uni')\n\ if using_colors:\n\ - color_r.load('$MANTA_EXPORT_PATH$color_r.uni')\n\ - color_g.load('$MANTA_EXPORT_PATH$color_g.uni')\n\ - color_b.load('$MANTA_EXPORT_PATH$color_b.uni')\n\ + color_r.load(path + str('color_r.uni')\n\ + color_g.load(path + str('color_g.uni')\n\ + color_b.load(path + str('color_b.uni')\n\ if using_heat:\n\ - heat.load('$MANTA_EXPORT_PATH$heat. @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs