[Bf-blender-cvs] [473255d] soc-2014-fluid: method for frame_step in separate thread added

Roman Pogribnyi noreply at git.blender.org
Fri Aug 1 19:36:50 CEST 2014


Commit: 473255d2f77aa6b5a3ee9ede939d8b9c4fc3edcc
Author: Roman Pogribnyi
Date:   Thu Jul 31 13:13:35 2014 +0200
Branches: soc-2014-fluid
https://developer.blender.org/rB473255d2f77aa6b5a3ee9ede939d8b9c4fc3edcc

method for frame_step in separate thread added

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

M	intern/smoke/intern/MANTA.cpp
M	intern/smoke/intern/MANTA.h
M	source/blender/python/manta_pp/pwrapper/pymain.cpp

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

diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index 50ee200..f72ffe3 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -163,6 +163,7 @@ void 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);
 void create_manta_folder()
 {
@@ -195,19 +196,40 @@ void *run_manta_scene_thread(void *arguments)
 
 void run_manta_scene(char *filepath)
 {
-	//vector<string> a;
-	//a.push_back(filepath);
+	vector<string> a;
+	a.push_back(filepath);
 	//PyGILState_STATE gilstate = PyGILState_Ensure();
-	//runMantaScript(a);
+	runMantaScript(a);
 	//PyGILState_Release(gilstate);
 
 	pthread_t manta_thread;
 	struct manta_arg_struct args;
 	args.filepath = filepath;
-	int rc = pthread_create(&manta_thread, NULL, run_manta_scene_thread, (void *)&args);
+	args.frame_num = 7;
+	int rc = pthread_create(&manta_thread, NULL, run_manta_sim_thread, (void *)&args);
 	pthread_detach(manta_thread);
 }
 
+void *run_manta_sim_thread(void *arguments)
+//void manta_sim_step(int frame)
+{
+	struct manta_arg_struct *args = (struct manta_arg_struct *)arguments;
+	
+	PyGILState_STATE gilstate = PyGILState_Ensure();
+	for (int fr=0; fr<args->frame_num; ++fr) {
+		cout<< "cansimulate? "<<manta_sim_running<<endl;
+		if (! manta_sim_running)
+			break;
+		std::string frame_str = static_cast<ostringstream*>( &(ostringstream() << fr) )->str();
+		std::string py_string_0 = string("sim_step(").append(frame_str);
+		std::string py_string_1 = py_string_0.append(")\0");
+		PyRun_SimpleString(py_string_1.c_str());
+		cout<< "done"<<manta_sim_running<<endl;
+	}
+	cout<< "doubledone"<<endl;
+	PyGILState_Release(gilstate);
+}
+
 void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd)
 {
 	/*for now, simpleplume file creation
@@ -409,5 +431,9 @@ void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd)
 	manta_setup_file << ss.rdbuf();
 	manta_setup_file.close();
 	run_manta_scene("manta_scene.py");
+//	for (int frame=0; frame< 20; frame++)
+//	{
+//		manta_sim_step(frame);
+//	}
 }
 
diff --git a/intern/smoke/intern/MANTA.h b/intern/smoke/intern/MANTA.h
index 8801f42..1ec633c 100644
--- a/intern/smoke/intern/MANTA.h
+++ b/intern/smoke/intern/MANTA.h
@@ -17,6 +17,7 @@
 
 struct manta_arg_struct {
 	std::string filepath;
+	int frame_num;
 };
 
 void runMantaScript(vector<string>& args);//defined in manta_pp/pwrapper/pymain.cpp
@@ -43,14 +44,20 @@ void add_mesh_transform_method(stringstream& ss);
 
 void manta_cache_path(char *filepath);
 
+static bool manta_sim_running=true;
+
 //void BLI_dir_create_recursive(const char *filepath);
 void create_manta_folder();
 
 void *run_manta_scene_thread(void *threadid);
 
+void *run_manta_sim_thread(void *threadid);
+
 void run_manta_scene(char * filepath);
 
 void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd);
 
+void manta_sim_step(int frame);
+
 #endif /* MANTA_H */
 
diff --git a/source/blender/python/manta_pp/pwrapper/pymain.cpp b/source/blender/python/manta_pp/pwrapper/pymain.cpp
index 72a8534..70f1971 100644
--- a/source/blender/python/manta_pp/pwrapper/pymain.cpp
+++ b/source/blender/python/manta_pp/pwrapper/pymain.cpp
@@ -86,13 +86,13 @@ void runMantaScript(vector<string>& args) {
 #else
 	// for linux, use this as it produces nicer error messages
 	PyRun_SimpleFileEx(fp, filename.c_str(), 1);    
-	for (int frame=0; frame < 4; ++frame)
-	{
-		std::string frame_str = static_cast<ostringstream*>( &(ostringstream() << frame) )->str();
-		std::string py_string_0 = string("sim_step(").append(frame_str);
-		std::string py_string_1 = py_string_0.append(")\0");
-		PyRun_SimpleString(py_string_1.c_str());
-	}
+//	for (int frame=0; frame < 4; ++frame)
+//	{
+//		std::string frame_str = static_cast<ostringstream*>( &(ostringstream() << frame) )->str();
+//		std::string py_string_0 = string("sim_step(").append(frame_str);
+//		std::string py_string_1 = py_string_0.append(")\0");
+//		PyRun_SimpleString(py_string_1.c_str());
+//	}
 	fclose(fp);    
 #endif




More information about the Bf-blender-cvs mailing list