[Bf-blender-cvs] [79d6c89e] soc-2014-fluid: frame_num field added, manta_sim in separate thread

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


Commit: 79d6c89eafd3d9347a493b758469ee7bafc7ac57
Author: Roman Pogribnyi
Date:   Thu Jul 31 19:54:09 2014 +0200
Branches: soc-2014-fluid
https://developer.blender.org/rB79d6c89eafd3d9347a493b758469ee7bafc7ac57

frame_num field added, manta_sim in separate thread

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

M	intern/smoke/intern/MANTA.cpp
M	intern/smoke/intern/MANTA.h
M	release/scripts/startup/bl_ui/properties_physics_smoke.py
M	source/blender/blenkernel/intern/smoke.c
M	source/blender/makesdna/DNA_smoke_types.h
M	source/blender/makesrna/intern/rna_smoke.c

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

diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index f72ffe3..7e466ca 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -177,56 +177,60 @@ void create_manta_folder()
 
 void *run_manta_scene_thread(void *arguments)
 {
-	struct manta_arg_struct *args = (struct manta_arg_struct *)arguments;
-	//create_manta_folder();
-	//PyInterpreterState *st = PyThreadState_GET()->interp;
-	//PyThreadState *ts = Py_NewInterpreter();
-	
-	vector<string> a;
-	a.push_back(args->filepath);
-	//a.push_back("manta_scene.py");
-	//args.push_back("test_1.py");
-	
-	runMantaScript(a);
-	
-	//system("./manta manta_scene.py");
-	pthread_exit(NULL);
+//	struct manta_arg_struct *args = (struct manta_arg_struct *)arguments;
+//	//create_manta_folder();
+//	//PyInterpreterState *st = PyThreadState_GET()->interp;
+//	//PyThreadState *ts = Py_NewInterpreter();
+//	
+//	vector<string> a;
+//	a.push_back(args->filepath);
+//	//a.push_back("manta_scene.py");
+//	//args.push_back("test_1.py");
+//	
+//	runMantaScript(a);
+//	
+//	//system("./manta manta_scene.py");
+//	pthread_exit(NULL);
 	return NULL;
 }
 
-void run_manta_scene(char *filepath)
+void run_manta_scene(SmokeModifierData *smd)
 {
-	vector<string> a;
-	a.push_back(filepath);
-	//PyGILState_STATE gilstate = PyGILState_Ensure();
-	runMantaScript(a);
-	//PyGILState_Release(gilstate);
+//	vector<string> a;
+//	a.push_back(filepath);
+//	//PyGILState_STATE gilstate = PyGILState_Ensure();
+//	runMantaScript(a);
+//	//PyGILState_Release(gilstate);
 
-	pthread_t manta_thread;
 	struct manta_arg_struct args;
-	args.filepath = filepath;
-	args.frame_num = 7;
+//	args.filepath = filepath;
+	args.frame_num = smd->domain->manta_end_frame - smd->domain->manta_start_frame;
 	int rc = pthread_create(&manta_thread, NULL, run_manta_sim_thread, (void *)&args);
-	pthread_detach(manta_thread);
+//	pthread_join(manta_thread,NULL);
+//	pthread_detach(manta_thread);
 }
 
+void stop_manta_sim()
+{
+	pthread_cancel(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;
-	
+	int num_sim_steps = args->frame_num;
 	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;
+	for (int fr=0; fr< num_sim_steps; ++fr) {
 		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");
+//		std::string py_string_1 = string("sim_step()\0");
 		PyRun_SimpleString(py_string_1.c_str());
 		cout<< "done"<<manta_sim_running<<endl;
+//		frame_num ++;
 	}
-	cout<< "doubledone"<<endl;
 	PyGILState_Release(gilstate);
 }
 
@@ -370,6 +374,7 @@ void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd)
 	//setting 20 sim frames for now
 //	ss << "for t in range(0,20): \n";		// << scene->r.sfra << ", " << scene->r.efra << "): \n";
 	ss << "def sim_step(t):\n";
+	
 	manta_advect_SemiLagr(ss, 1, "flags", "vel", "density", 2);
 	manta_advect_SemiLagr(ss, 1, "flags", "vel", "vel", 2);
 	
@@ -430,7 +435,11 @@ void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd)
 	}
 	manta_setup_file << ss.rdbuf();
 	manta_setup_file.close();
-	run_manta_scene("manta_scene.py");
+	vector<string> a;
+	a.push_back("manta_scene.py");
+	runMantaScript(a);
+//	run_manta_scene("manta_scene.py");
+//	manta_sim_running = false;
 //	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 1ec633c..6b1f4aa 100644
--- a/intern/smoke/intern/MANTA.h
+++ b/intern/smoke/intern/MANTA.h
@@ -16,10 +16,12 @@
 //#include "../../../source/blender/python/manta_pp/pwrapper/pymain.cpp"
 
 struct manta_arg_struct {
-	std::string filepath;
+//	std::string filepath;
 	int frame_num;
 };
 
+static pthread_t manta_thread;
+
 void runMantaScript(vector<string>& args);//defined in manta_pp/pwrapper/pymain.cpp
 
 extern "C" bool manta_check_grid_size(struct FLUID_3D *fluid, int dimX, int dimY, int dimZ);
@@ -53,7 +55,9 @@ void *run_manta_scene_thread(void *threadid);
 
 void *run_manta_sim_thread(void *threadid);
 
-void run_manta_scene(char * filepath);
+void run_manta_scene(SmokeModifierData *smd);
+
+void stop_manta_sim();
 
 void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd);
 
diff --git a/release/scripts/startup/bl_ui/properties_physics_smoke.py b/release/scripts/startup/bl_ui/properties_physics_smoke.py
index e6f8e78..713964c 100644
--- a/release/scripts/startup/bl_ui/properties_physics_smoke.py
+++ b/release/scripts/startup/bl_ui/properties_physics_smoke.py
@@ -387,6 +387,10 @@ class OBJECT_OT_MantaButton(bpy.types.Operator):
         for ob in selected_before:
             ob.select = True
         bpy.ops.manta.make_file()
+        # for frame_num in range(10):
+            # domain.manta_sim_frame += 1
+        bpy.ops.manta.sim_step()
+        # domain.manta_sim_frame = -1
         return{'FINISHED'}
 
 class PHYSICS_PT_smoke_manta_settings(PhysicButtonsPanel, Panel):
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index cc91219..e734839 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -565,6 +565,7 @@ void smokeModifier_createType(struct SmokeModifierData *smd)
 			
 			/*mantaflow settings*/
 			smd-> domain->manta_solver_res = 3;
+			smd->domain->manta_sim_frame = -1;
 			smd-> domain->manta_start_frame = 1;
 			smd-> domain->manta_end_frame = 10;
 			smd->domain->noise_clamp_neg = 0;
diff --git a/source/blender/makesdna/DNA_smoke_types.h b/source/blender/makesdna/DNA_smoke_types.h
index e4b7820..64e3cba 100644
--- a/source/blender/makesdna/DNA_smoke_types.h
+++ b/source/blender/makesdna/DNA_smoke_types.h
@@ -162,7 +162,9 @@ typedef struct SmokeDomainSettings {
 	float noise_val_scale;
 	float noise_val_offset;
 	float noise_time_anim;
+	int manta_sim_frame;/*current simulation frame number. If not simulating-> manta_sim_frame == -1*/
 	float mock_var;	/*not used*/
+//	float mock_var2;	/*not used*/
 } SmokeDomainSettings;
 
 
diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c
index a8b6d5f..8141d18 100644
--- a/source/blender/makesrna/intern/rna_smoke.c
+++ b/source/blender/makesrna/intern/rna_smoke.c
@@ -557,6 +557,13 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
 	RNA_def_property_ui_text(prop, "Solver Res", "Solver resolution(2D/3D)");
 	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
 
+	prop = RNA_def_property(srna, "manta_sim_frame", PROP_INT, PROP_NONE);
+	RNA_def_property_int_sdna(prop, NULL, "manta_sim_frame");
+	RNA_def_property_range(prop, -1, 250);
+	RNA_def_property_ui_range(prop, -1, 250, 1, -1);
+	RNA_def_property_ui_text(prop, "Current Simulation Frame", "-1, if not simulating");
+	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
+
 	prop = RNA_def_property(srna, "manta_start_frame", PROP_INT, PROP_NONE);
 	RNA_def_property_int_sdna(prop, NULL, "manta_start_frame");
 	RNA_def_property_range(prop, 0, 249);




More information about the Bf-blender-cvs mailing list