[Bf-blender-cvs] [193461e] soc-2014-fluid: Manta_API as singletone

Roman Pogribnyi noreply at git.blender.org
Wed Oct 15 19:53:44 CEST 2014


Commit: 193461e3da325192007d8e4a443da54c5d990d97
Author: Roman Pogribnyi
Date:   Sat Oct 11 20:21:40 2014 +0200
Branches: soc-2014-fluid
https://developer.blender.org/rB193461e3da325192007d8e4a443da54c5d990d97

Manta_API as singletone

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

M	intern/smoke/intern/MANTA.cpp
M	intern/smoke/intern/MANTA.h
M	intern/smoke/intern/smoke_API.cpp

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

diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index 52ade51..c73c746 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -1,7 +1,14 @@
 #include "MANTA.h"
 #include "WTURBULENCE.h"
 #include "scenarios/smoke.h"
-void runMantaScript(vector<string>& args);//defined in manta_pp/pwrapper/pymain.cpp
+
+Manta_API* Manta_API::_instance = 0;
+Manta_API* Manta_API::instance(){
+	if (_instance == 0){
+		_instance = new Manta_API;
+	}
+	return _instance;
+}
 
 extern "C" bool manta_check_grid_size(struct FLUID_3D *fluid, int dimX, int dimY, int dimZ)
 {
@@ -87,7 +94,7 @@ static void wavelets_add_lowres_density(SmokeDomainSettings *sds)
 //PR need SMD data here for wavelets 
 extern "C" int read_mantaflow_sim(struct SmokeDomainSettings *sds, char *name, bool reading_wavelets)
 {
-    /*! legacy headers for reading old files */
+    /*! l /*! legacy headers for reading old files */
 	typedef struct {
 		int dimX, dimY, dimZ;
 		int frames, elements, elementType, bytesPerElement, bytesPerFrame;
@@ -177,7 +184,8 @@ extern "C" int read_mantaflow_sim(struct SmokeDomainSettings *sds, char *name, b
 	return 0;
 }
 
-static void indent_ss(stringstream& ss, int indent)
+
+void Manta_API::indent_ss(stringstream& ss, int indent)
 {
 	/*two-spaces indent*/
 	if (indent < 0) return;
@@ -188,7 +196,7 @@ static void indent_ss(stringstream& ss, int indent)
 	ss << indentation;
 }
 
-static 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_API::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 +213,7 @@ static void manta_gen_noise(stringstream& ss, char* solver, int indent, char *no
 	ss << noise << ".timeAnim = " << timeAnim << " \n";
 }
 
-static void manta_solve_pressure(stringstream& ss, char *flags, char *vel, char *pressure, bool useResNorms, int openBound, int solver_res,float cgMaxIterFac, float cgAccuracy)
+void Manta_API::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 +234,7 @@ static void manta_solve_pressure(stringstream& ss, char *flags, char *vel, char
 	ss << ", cgMaxIterFac=" << cgMaxIterFac << ", cgAccuracy=" << cgAccuracy << ") \n";
 }
 
-static void manta_advect_SemiLagr(stringstream& ss, int indent, char *flags, char *vel, char *grid, int order)
+void Manta_API::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 +243,7 @@ static void manta_advect_SemiLagr(stringstream& ss, int indent, char *flags, cha
 }
 
 /*create solver, handle 2D case*/
-static 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)
+void Manta_API::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,21 +258,21 @@ inline bool file_exists (const std::string& name) {
 }
 
 /*blender transforms obj coords to [-1,1]. This method transforms them back*/
-static void add_mesh_transform_method(stringstream& ss)
+void Manta_API::add_mesh_transform_method(stringstream& ss)
 {
 	ss << "def transform_back(obj, gs):\n" <<
 	"  obj.scale(gs/2)\n" <<
 	"  obj.offset(gs/2)\n\n";
 }
 
-static void manta_cache_path(char *filepath)
+void Manta_API::manta_cache_path(char *filepath)
 {
 	char *name="manta";
 	BLI_make_file_string("/", filepath, BLI_temporary_dir(), name);
 }
 
 //void BLI_dir_create_recursive(const char *filepath);
-static void create_manta_folder()
+void Manta_API::create_manta_folder()
 {
 	char* filepath=NULL;
 	manta_cache_path(filepath);
@@ -272,7 +280,7 @@ static void create_manta_folder()
 	
 }
 
-static void *run_manta_scene_thread(void *arguments)
+void *Manta_API::run_manta_scene_thread(void *arguments)
 {
 //	struct manta_arg_struct *args = (struct manta_arg_struct *)arguments;
 //	//create_manta_folder();
@@ -291,7 +299,7 @@ static void *run_manta_scene_thread(void *arguments)
 	return NULL;
 }
 
-void run_manta_scene(Scene *s, SmokeModifierData *smd)
+void Manta_API::run_manta_scene(Scene *s, SmokeModifierData *smd)
 {
 //	smd->domain->manta_sim_frame = 0;
 //	PyGILState_STATE gilstate = PyGILState_Ensure();
@@ -326,13 +334,13 @@ void run_manta_scene(Scene *s, SmokeModifierData *smd)
 	run_manta_sim_thread((void*) args);
 }
 
-void stop_manta_sim()
+void Manta_API::stop_manta_sim()
 {
 	pthread_cancel(manta_thread);
 }
 
 
-static void run_manta_sim_thread(void *arguments)
+void Manta_API::run_manta_sim_thread(void *arguments)
 {
 	struct manta_arg_struct *args = (struct manta_arg_struct *)arguments;
 	SmokeModifierData *smd = &args->smd;
@@ -357,7 +365,7 @@ static void run_manta_sim_thread(void *arguments)
 	PyGILState_Release(gilstate);
 }
 
-void generate_manta_sim_file(SmokeModifierData *smd)
+void Manta_API::generate_manta_sim_file(SmokeModifierData *smd)
 {
 //	 /*create python file with 2-spaces indentation*/
 	bool wavelets = smd->domain->flags & MOD_SMOKE_HIGHRES;
@@ -384,7 +392,7 @@ void generate_manta_sim_file(SmokeModifierData *smd)
 	runMantaScript("",a);
 }
 
-std::string getRealValue( const std::string& varName, SmokeModifierData *smd)
+std::string Manta_API::getRealValue( const std::string& varName, SmokeModifierData *smd)
 {
 	ostringstream ss;
 	if (varName == "UVS_CNT")
@@ -444,7 +452,7 @@ std::string getRealValue( const std::string& varName, SmokeModifierData *smd)
 	return ss.str();
 }
 
-std::string parseLine(const string& line, SmokeModifierData *smd)
+std::string Manta_API::parseLine(const string& line, SmokeModifierData *smd)
 {
 	if (line.size() == 0) return "";
 	string res = "";
@@ -468,7 +476,7 @@ std::string parseLine(const string& line, SmokeModifierData *smd)
 	return res;
 }
 
-static void parseFile(const string & setup_string, SmokeModifierData *smd)
+void Manta_API::parseFile(const string & setup_string, SmokeModifierData *smd)
 {
 //	ifstream f (file);
 std::istringstream f(setup_string);
diff --git a/intern/smoke/intern/MANTA.h b/intern/smoke/intern/MANTA.h
index e972f0b..8d94213 100644
--- a/intern/smoke/intern/MANTA.h
+++ b/intern/smoke/intern/MANTA.h
@@ -16,6 +16,7 @@
 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*/
 void export_em_fields(float flow_density, int min_x, int min_y, int min_z, int max_x, int max_y, int max_z, int d_x, int d_y, int d_z, float *inf, float *vel);/*defined in pymain.cpp*/
 extern "C" void manta_write_effectors(struct Scene *s, struct SmokeModifierData *smd); /*defined in smoke_api.cpp*/
+void runMantaScript(const string& ss,vector<string>& args);//defined in manta_pp/pwrapper/pymain.cpp
 
 /*for passing to detached thread*/
 struct manta_arg_struct {
@@ -29,34 +30,41 @@ 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);
 
-//class Manta_API: public FLUID_3D{
+class Manta_API: public FLUID_3D{
+private:	
+	static Manta_API *_instance;
+	Manta_API() {}
+	~Manta_API() {} 	 
+	Manta_API(const Manta_API &);	 
+	Manta_API & operator=(const Manta_API &);
+public:
+	static Manta_API *instance();
 	void step(float dt, float gravity[3]);
-	void runMantaScript(const string&, vector<string>& args);//defined in manta_pp/pwrapper/pymain.cpp
+//	void runMantaScript(const string&, vector<string>& args);//defined in manta_pp/pwrapper/pymain.cpp
 	
+	void indent_ss(stringstream& ss, int indent);
 	
-	static void indent_ss(stringstream& ss, int indent);
+	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);
 	
-	static 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(stringstream& ss, char *flags, char *vel, char *pressure, bool useResNorms, int openBound, int solver_res,float cgMaxIterFac=1.0, float cgAccuracy = 0.01);
 	
-	static 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);
-	
-	static void manta_advect_SemiLagr(stringstream& 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*/
-	static 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);
+	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*/
-	static void add_mesh_transform_method(stringstream& ss);
+	void add_mesh_transform_method(stringstream& ss);
 	
-	static void manta_cache_path(char *filepath);
+	void manta_cache_path(char *filepath);
 	
-	static void create_manta_folder();
+	void create_manta_folder();
 	
-	static void *run_manta_scene_thread(void *threadid);
+	void *run_manta_scene_thread(void *threadid);
 	
-	static void run_manta_sim_thread(void *threadid);
+	void run_manta_sim_thread(

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list