[Bf-blender-cvs] [4be4b58] fluid-mantaflow: more manta api refactoring

Sebastián Barschkis noreply at git.blender.org
Thu Jan 28 12:37:25 CET 2016


Commit: 4be4b5881661cc5332a2219fcd1c6439a861588d
Author: Sebastián Barschkis
Date:   Sat Jan 9 03:01:08 2016 +0100
Branches: fluid-mantaflow
https://developer.blender.org/rB4be4b5881661cc5332a2219fcd1c6439a861588d

more manta api refactoring

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

M	intern/smoke/intern/FLUID_3D.cpp
M	intern/smoke/intern/MANTA.cpp
M	intern/smoke/intern/MANTA.h
M	intern/smoke/intern/WTURBULENCE.cpp
M	intern/smoke/intern/scenarios/smoke.h
M	intern/smoke/intern/smoke_API.cpp

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

diff --git a/intern/smoke/intern/FLUID_3D.cpp b/intern/smoke/intern/FLUID_3D.cpp
index 7bb539e..86f4f2c 100644
--- a/intern/smoke/intern/FLUID_3D.cpp
+++ b/intern/smoke/intern/FLUID_3D.cpp
@@ -599,11 +599,22 @@ _xRes(res[0]), _yRes(res[1]), _zRes(res[2]), _res(0.0f)
 	using_colors = false;
 	
 	smd->domain->fluid = this;
-//	vector<string> args;
-//	args.push_back("manta_scene.py");
-//	initializeMantaflow(args); /*need this to delete previous solvers and grids*/
+
 	Manta_API::start_mantaflow();
-	Manta_API::run_manta_sim_file_lowRes(smd);
+	
+	// Base setup low res
+	std::string setup_script =
+		manta_import +
+		solver_setup_low +
+		alloc_base_grids_low +
+		noise_low +
+		prep_domain_low +
+		flags +
+		smoke_step_low;
+	std::string final_script = Manta_API::parse_script(setup_script, smd);
+	PyGILState_STATE gilstate = PyGILState_Ensure();
+	PyRun_SimpleString(final_script.c_str());
+	PyGILState_Release(gilstate);
 	
 	// Heat grids
 	if (init_heat) {
@@ -626,9 +637,10 @@ void FLUID_3D::initHeat()
 	if (!_heat) {
 		using_heat = true;
 		PyGILState_STATE gilstate = PyGILState_Ensure();
-		PyRun_SimpleString(smoke_init_heat_low.c_str());
+		PyRun_SimpleString(alloc_heat_low.c_str());
+		PyRun_SimpleString(with_heat.c_str());
 		PyGILState_Release(gilstate);
-//		Manta_API::updatePointers(this);
+		Manta_API::update_pointers(this);
 	}
 }
 
@@ -642,9 +654,11 @@ void FLUID_3D::initColors(float init_r, float init_g, float init_b)
 		ss << "manta_color_g = " << init_g << endl;
 		ss << "manta_color_b = " << init_b << endl;
 		PyRun_SimpleString(ss.str().c_str());
-		PyRun_SimpleString(smoke_init_colors_low.c_str());
+		PyRun_SimpleString(alloc_colors_low.c_str());
+		PyRun_SimpleString(init_colors_low.c_str());
+		PyRun_SimpleString(with_fire.c_str());
 		PyGILState_Release(gilstate);
-//		Manta_API::updatePointers(this);
+		Manta_API::update_pointers(this);
 	}
 }
 
@@ -653,20 +667,27 @@ void FLUID_3D::initFire()
 	if (!_flame) {
 		using_fire = true;
 		PyGILState_STATE gilstate = PyGILState_Ensure();
-		PyRun_SimpleString(smoke_init_fire_low.c_str());
+		PyRun_SimpleString(alloc_fire_low.c_str());
+		PyRun_SimpleString(with_fire.c_str());
 		PyGILState_Release(gilstate);
-//		Manta_API::updatePointers(this);
+		Manta_API::update_pointers(this);
 	}
 }
 
 FLUID_3D::~FLUID_3D()
 {
 	cout << "~FLUID_3D" << endl;
+	
+	PyGILState_STATE gilstate = PyGILState_Ensure();
+	if (using_heat)
+		PyRun_SimpleString(del_heat_low.c_str());
+	if (using_fire)
+		PyRun_SimpleString(del_fire_low.c_str());
+	if (using_colors)
+		PyRun_SimpleString(del_colors_low.c_str());
+	PyRun_SimpleString(del_base_grids_low.c_str());
+	PyGILState_Release(gilstate);
 
-	if (using_heat) Manta_API::delete_heat_low();
-	if (using_fire) Manta_API::delete_fire_low();
-	if (using_colors) Manta_API::delete_colors_low();
-	Manta_API::delete_base_grids_low();
 
 //	if (_xVelocity) delete[] _xVelocity;
 //	if (_yVelocity) delete[] _yVelocity;
diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index b7f7ea9..09d80e1 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -380,72 +380,24 @@
 //	PyGILState_Release(gilstate);		
 //}
 
-std::string Manta_API::get_manta_smoke_script(SmokeModifierData *smd)
-{
-    std::string smoke_script = "";
-	
-	// Check if high res is enabled
-	// Need to check if wt exists and NOT just check if high res flag is set (smd->domain->flags & MOD_SMOKE_HIGHRES)
-	// because wt might not exist, i.e. when FLUID_3D constructor is called before WTURBULENCE constructor
-	if (smd->domain->wt) {
-		smoke_script = smoke_setup_high + smoke_import_high + smoke_step_high;
-	} else {
-		// TODO: Need to figure out how to handle liquids when high resolution grids are enabled, not just for low res grids
-		if (smd->domain->flags & MOD_SMOKE_MANTA_USE_LIQUID)
-			smoke_script = smoke_setup_low  + liquid_step_low;
-		else
-			smoke_script = smoke_setup_low + smoke_import_low + smoke_inflow_low + smoke_step_low ;
-	}
-	return smoke_script;
-}
-
-void Manta_API::run_manta_sim_file_lowRes(SmokeModifierData *smd)
-{
-	std::string smoke_script = get_manta_smoke_script(smd);
-	std::string final_script = parse_script(smoke_script, smd);
-	
-	PyGILState_STATE gilstate = PyGILState_Ensure();
-	PyRun_SimpleString(final_script.c_str());
-	PyGILState_Release(gilstate);
-}
-
-void Manta_API::run_manta_sim_file_highRes(SmokeModifierData *smd)
-{
-	std::string smoke_script = get_manta_smoke_script(smd);
-	std::string final_script = parse_script(smoke_script, smd);
-	
-	PyGILState_STATE gilstate = PyGILState_Ensure();
-	PyRun_SimpleString(final_script.c_str());
-	PyGILState_Release(gilstate);
-}
-
-void Manta_API::delete_colors_low()
-{
-	PyGILState_STATE gilstate = PyGILState_Ensure();
-	PyRun_SimpleString(del_colors_low.c_str());
-	PyGILState_Release(gilstate);
-}
-
-void Manta_API::delete_fire_low()
-{
-	PyGILState_STATE gilstate = PyGILState_Ensure();
-	PyRun_SimpleString(del_fire_low.c_str());
-	PyGILState_Release(gilstate);
-}
-
-void Manta_API::delete_heat_low()
-{
-	PyGILState_STATE gilstate = PyGILState_Ensure();
-	PyRun_SimpleString(del_heat_low.c_str());
-	PyGILState_Release(gilstate);
-}
-
-void Manta_API::delete_base_grids_low()
-{
-	PyGILState_STATE gilstate = PyGILState_Ensure();
-	PyRun_SimpleString(del_base_grids_low.c_str());
-	PyGILState_Release(gilstate);
-}
+//std::string Manta_API::get_manta_smoke_script(SmokeModifierData *smd)
+//{
+//    std::string smoke_script = "";
+//	
+//	// Check if high res is enabled
+//	// Need to check if wt exists and NOT just check if high res flag is set (smd->domain->flags & MOD_SMOKE_HIGHRES)
+//	// because wt might not exist, i.e. when FLUID_3D constructor is called before WTURBULENCE constructor
+//	if (smd->domain->wt) {
+//		smoke_script = smoke_setup_high + smoke_import_high + smoke_step_high;
+//	} else {
+//		// TODO: Need to figure out how to handle liquids when high resolution grids are enabled, not just for low res grids
+//		if (smd->domain->flags & MOD_SMOKE_MANTA_USE_LIQUID)
+//			smoke_script = smoke_setup_low  + liquid_step_low;
+//		else
+//			smoke_script = smoke_setup_low + smoke_import_low + smoke_inflow_low + smoke_step_low ;
+//	}
+//	return smoke_script;
+//}
 
 void Manta_API::start_mantaflow()
 {
@@ -530,17 +482,7 @@ std::string Manta_API::get_real_value( const std::string& varName, SmokeModifier
 	} else if (varName == "VORTICITY") {
 		ss << smd->domain->vorticity / smd->domain->fluid->_constantScaling;
 	} else if (varName == "BOUNDCONDITIONS") {
-		// OLD SETUP. WHY LIKE THAT??
-		/*if(smd->domain->border_collisions == SM_BORDER_OPEN) ss << "xXyY";
-		else if (smd->domain->border_collisions == SM_BORDER_VERTICAL) ss << "xXyY";
-		else if (smd->domain->border_collisions == SM_BORDER_CLOSED) ss << "xXyY";
-		
-		if (smd->domain->manta_solver_res == 3){
-			if(smd->domain->border_collisions == SM_BORDER_OPEN) ss << "z";
-			else if (smd->domain->border_collisions == SM_BORDER_VERTICAL) ss << "z";
-			else if (smd->domain->border_collisions == SM_BORDER_CLOSED) ss << "zZ";
-		}*/
-		if(smd->domain->border_collisions == SM_BORDER_OPEN) ss << "xXyY";
+		if (smd->domain->border_collisions == SM_BORDER_OPEN) ss << "xXyY";
 		else if (smd->domain->border_collisions == SM_BORDER_VERTICAL) ss << "zZ";
 		else if (smd->domain->border_collisions == SM_BORDER_CLOSED) ss << "";
 		
@@ -626,33 +568,72 @@ std::string Manta_API::parse_script(const string& setup_string, SmokeModifierDat
 	return res.str();
 }
 
-void Manta_API::manta_export_grids(SmokeModifierData *smd)
+void Manta_API::manta_export_script(SmokeModifierData *smd)
 {
-	// Export the scene file
-	std::string smoke_script = get_manta_smoke_script(smd);
+	// Setup low
+	std::string manta_script =
+		manta_import +
+		solver_setup_low +
+		alloc_base_grids_low +
+		alloc_colors_low +
+		noise_low +
+		prep_domain_low +
+		flags;
+	
+	// Setup high
+	if (smd->domain->flags & MOD_SMOKE_HIGHRES) {
+		manta_script +=
+			solver_setup_high +
+			alloc_base_grids_high +
+			noise_high +
+			prep_domain_high +
+			wavelet_turbulence_noise;
+	}
 	
-	std::string final_script = "";
+	// Import low
+	manta_script += smoke_import_low;
+	
+	// Import high
+	if (smd->domain->flags & MOD_SMOKE_HIGHRES) {
+		manta_script += smoke_step_high;
+	}
+	
+	// Step low
+	manta_script += smoke_step_low;
+	
+	// Step high
 	if (smd->domain->flags & MOD_SMOKE_HIGHRES) {
-		final_script = Manta_API::parse_script(smoke_script, smd) + standalone_high;
-	} else {
-		final_script = Manta_API::parse_script(smoke_script, smd) + standalone_low;
+		manta_script += smoke_step_high;
 	}
 	
+	// Fill in missing variables in script
+	std::string final_script = Manta_API::parse_script(manta_script, smd);
+	
+	// Add standalone mode (for-loop, gui, ...)
+	final_script += standalone;
+	
+	// Write script
 	ofstream myfile;
 	myfile.open(smd->domain->_manta_filepath);
 	myfile << final_script;
 	myfile.close();
-	
-	// Run python environment to export grids, that is, create the grid files
+}
+
+void Manta_API::manta_export_grids(SmokeModifierData *smd)
+{
 	PyGILState_STATE gilstate = PyGILState_Ensure();
+	
+	// Export low res grids
+	PyRun_SimpleString(Manta_API::parse_script(smoke_export_low, smd).c_str());
+
+	// Export high res grids
 	if (smd->domain->flags & MOD_SMOKE_HIGHRES) {
 		PyRun_SimpleString(Manta_API::parse_script(smoke_export_high, smd).c_str());
-	} else {
-		PyRun_SimpleString(Manta_API::parse_script(smoke_export_low, smd).c_str());
 	}
 	PyGILState_Release(gilstate);
 }
 
+
 string Manta_API::get_grid_pointer(std::string gridName, std::string solverName)
 {
 	if ((gridName == "") && (solverName == "")) {
@@ -694,7 +675,7 @@ string Manta_API::get_grid_pointer(std::string gridName, std::string solverName)
 //	_max_temp = flame_max_temp;
 //}
 
-void * Manta_API::pointer_from_string(const std::string& s){
+void* Manta_API::pointer_from_string(const std::string& s){
 	stringstream ss(s);
 	void *gridPointer = NULL;
 	ss >> gridPointer;
diff --git a/intern/smoke/intern/MANTA.h b/intern/smoke/intern/MANTA.h
index 53fd56c..1ca23b5 100644
--- a/intern/smoke/intern/MANTA.h
+++ b/intern/smoke/intern/MANTA.h
@@ -25,17 +25,14 @@
 //void runScript(

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list