[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