[Bf-blender-cvs] [f809240] soc-2014-fluid: importing manta module to interpreter

Roman Pogribnyi noreply at git.blender.org
Wed Jul 2 20:14:03 CEST 2014


Commit: f80924027f848f2deef01c6e7575923377e8fa9e
Author: Roman Pogribnyi
Date:   Wed Jul 2 20:13:12 2014 +0200
https://developer.blender.org/rBf80924027f848f2deef01c6e7575923377e8fa9e

importing manta module to interpreter

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

M	extern/manta_pp/pwrapper/registry.cpp
M	intern/smoke/intern/MANTA.h

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

diff --git a/extern/manta_pp/pwrapper/registry.cpp b/extern/manta_pp/pwrapper/registry.cpp
index b571b2e..0880b88 100644
--- a/extern/manta_pp/pwrapper/registry.cpp
+++ b/extern/manta_pp/pwrapper/registry.cpp
@@ -97,6 +97,13 @@ public:
 	ClassData* lookup(const std::string& name);
 	bool canConvert(ClassData* from, ClassData* to);
 	PyThreadState *state;
+	/*blender integration*/
+	PyGILState_STATE mMainGilState;     
+    PyThreadState* mOldThreadState;    
+    PyThreadState* mNewThreadState;     
+    PyThreadState* mSubThreadState;     
+    PyGILState_STATE mSubGilState;      
+
 private:
 	ClassData* getOrConstructClass(const string& name);
 	void registerBaseclasses();
@@ -400,10 +407,10 @@ void WrapperRegistry::runPreInit() {
 	// add python directories to path
 //	WrapperRegistry::instance().initModule();
 	PyObject *sys_path = NULL;
-	PyObject *sd = PyThreadState_GET()->interp->sysdict;
-    if (sd == NULL)
-        sys_path = NULL;
-    else sys_path = PyDict_GetItemString(sd, (char*)"path");
+//	PyObject *sd = PyThreadState_GET()->interp->sysdict;
+//    if (sd == NULL)
+//        sys_path = NULL;
+//    else sys_path = PyDict_GetItemString(sd, (char*)"path");
 	sys_path = PySys_GetObject("path");
 	
 	for (size_t i=0; i<mPaths.size(); i++) {
@@ -459,7 +466,7 @@ void WrapperRegistry::construct(const string& scriptname, const vector<string>&
 	registerDummyTypes();
 	
 	// load main extension module
-	PyImport_AppendInittab((char*)gDefaultModuleName.c_str(), PyInit_Main);
+//	PyImport_AppendInittab((char*)gDefaultModuleName.c_str(), PyInit_Main);
 }
 
 inline PyObject* castPy(PyTypeObject* p) { 
@@ -587,17 +594,29 @@ PyObject* WrapperRegistry::initModule() {
 
 void setup(const std::string& filename, const std::vector<std::string>& args) {
 	WrapperRegistry::instance().construct(filename,args);
-	int a = Py_IsInitialized();
-	Py_Initialize();
-//	int b = Py_IsInitialized();
-//	PyThreadState *st = Py_NewInterpreter();
-	int c = Py_IsInitialized();
+	
+	WrapperRegistry::instance().mMainGilState =  PyGILState_Ensure(); 
+	WrapperRegistry::instance().mOldThreadState = PyThreadState_Get(); 
+	WrapperRegistry::instance().mNewThreadState = Py_NewInterpreter();
+	PyThreadState_Swap( WrapperRegistry::instance().mNewThreadState );
+	WrapperRegistry::instance().mSubThreadState = PyEval_SaveThread();  
+	WrapperRegistry::instance().mSubGilState = PyGILState_Ensure();     
+
+	PyObject * manta_module = PyInit_Main();
+	PyImport_Import(manta_module);
+	int k=0;
+
 	WrapperRegistry::instance().runPreInit();
 }
 
 void finalize() {
-	Py_Finalize();
+//	Py_Finalize();
 	//Py_EndInterpreter(WrapperRegistry::instance().state);
+	PyGILState_Release( WrapperRegistry::instance().mSubGilState );      
+	PyEval_RestoreThread( WrapperRegistry::instance().mSubThreadState ); 
+	Py_EndInterpreter( WrapperRegistry::instance().mNewThreadState );    
+	PyThreadState_Swap( WrapperRegistry::instance().mOldThreadState );
+	PyGILState_Release( WrapperRegistry::instance().mMainGilState );    
 	WrapperRegistry::instance().cleanup();
 }
 
diff --git a/intern/smoke/intern/MANTA.h b/intern/smoke/intern/MANTA.h
index 67dd9cc..4abde3e 100644
--- a/intern/smoke/intern/MANTA.h
+++ b/intern/smoke/intern/MANTA.h
@@ -170,27 +170,12 @@ void run_manta_scene()
 	int a = Py_IsInitialized();
 	//PyInterpreterState *st = PyThreadState_GET()->interp;
 	//PyThreadState *ts = Py_NewInterpreter();
-	PyGILState_STATE mMainGilState;     
-    PyThreadState* mOldThreadState;    
-    PyThreadState* mNewThreadState;     
-    PyThreadState* mSubThreadState;     
-    PyGILState_STATE mSubGilState;      
-	mMainGilState =  PyGILState_Ensure(); 
-	mOldThreadState = PyThreadState_Get(); 
-	mNewThreadState = Py_NewInterpreter();
-	PyThreadState_Swap( mNewThreadState );
-	mSubThreadState = PyEval_SaveThread();  
-	mSubGilState = PyGILState_Ensure();     
-	
+		
 	vector<string> args;
 	args.push_back("manta_scene.py");
 	
 	runScript(args);
-	PyGILState_Release( mSubGilState );      
-	PyEval_RestoreThread( mSubThreadState ); 
-	Py_EndInterpreter( mNewThreadState );    
-	PyThreadState_Swap( mOldThreadState );
-	PyGILState_Release( mMainGilState );     
+	 
 	//system("./manta manta_scene.py");
 //	pthread_exit(NULL);
 }
@@ -214,7 +199,7 @@ static void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd)
 	stringstream ss; /*setup contents*/
 	
 	/*header*/
-	ss << "from manta import * \n";
+	ss << "import manta\n";//"from manta import * \n";
 	ss << "import os, shutil, math, sys \n";
 	if (!file_exists("manta_flow.obj")){
 		return;




More information about the Bf-blender-cvs mailing list