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);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to