[Bf-blender-cvs] [b4ef7ed] soc-2014-fluid: GetGridPOinter form mantaflow working

Roman Pogribnyi noreply at git.blender.org
Tue Nov 11 23:42:57 CET 2014


Commit: b4ef7ed987018b08004929288c7461b2eb9fbcc1
Author: Roman Pogribnyi
Date:   Sun Oct 26 21:51:41 2014 +0100
Branches: soc-2014-fluid
https://developer.blender.org/rBb4ef7ed987018b08004929288c7461b2eb9fbcc1

GetGridPOinter form mantaflow working

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

M	intern/smoke/intern/MANTA.cpp
M	intern/smoke/intern/MANTA.h
M	source/blender/python/manta_pp/grid.cpp
M	source/blender/python/manta_pp/grid.h
M	source/blender/python/manta_pp/grid.h.reg
M	source/blender/python/manta_pp/grid.h.reg.cpp

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

diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index 4db5536..35f38d4 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -438,6 +438,8 @@ void Manta_API::run_manta_sim_thread(void *arguments)
 		std::string frame_str = static_cast<ostringstream*>( &(ostringstream() << s->r.cfra) )->str();
 		std::string py_string_0 = string("sim_step(").append(frame_str);
 		std::string py_string_1 = py_string_0.append(")\0");
+	cout << "Debug C++: densityPointer:" << Manta_API::getGridPointer("density", "s")<<endl;
+		PyRun_SimpleString("print ('pyhton density pointer:' + density.getDataPointer())");
 		PyRun_SimpleString(py_string_1.c_str());
 		cout<< "done"<<manta_sim_running<<endl;
 	//}
@@ -580,4 +582,30 @@ std::istringstream f(setup_string);
 	of.close();
 }
 
-
+string Manta_API::getGridPointer(std::string gridName, std::string solverName)
+{
+	if ((gridName == "") && (solverName == "")){
+		return "";
+	}
+#ifdef WITH_MANTA
+	cout << "MANTA_DEFINED_________" << endl;
+#else
+	cout << "MANTA_NOT_DEFINED_________" << endl;
+#endif
+	PyGILState_STATE gilstate = PyGILState_Ensure();
+	PyObject *main = PyImport_AddModule("__main__");
+	if (main == NULL){cout << "null" << 1 << endl;}
+    PyObject *globals = PyModule_GetDict(main);
+    if (globals == NULL){cout << "null" << 12 << endl;}
+    PyObject *grid_object = PyDict_GetItemString(globals, gridName.c_str());
+    if (grid_object == NULL){cout << "null" << 13 << endl;}
+    PyObject* func = PyObject_GetAttrString(grid_object,(char*)"getDataPointer");
+    if (func == NULL){cout << "null" << 14 << endl;}
+    PyObject* retured_value = PyObject_CallObject(func, NULL);
+	PyObject* encoded = PyUnicode_AsUTF8String(retured_value);
+	if (retured_value == NULL){cout << "null" << 15 << endl;}
+	std::string res = strdup(PyBytes_AsString(encoded));
+	cout << "RESRES" << res << "___" << endl;
+	PyGILState_Release(gilstate);		
+	return res;
+}
\ No newline at end of file
diff --git a/intern/smoke/intern/MANTA.h b/intern/smoke/intern/MANTA.h
index 3a766f8..9e82305 100644
--- a/intern/smoke/intern/MANTA.h
+++ b/intern/smoke/intern/MANTA.h
@@ -43,7 +43,10 @@ private:
 	Manta_API(const Manta_API &);	 
 	Manta_API & operator=(const Manta_API &);
 public:
-	float *_emission_map;
+	/*Data fields*/
+	float *density;
+	
+	
 	static Manta_API *instance();
 	void step(float dt, float gravity[3]);
 //	void runMantaScript(const string&, vector<string>& args);//defined in manta_pp/pwrapper/pymain.cpp
@@ -93,6 +96,7 @@ public:
 	static void addAdaptiveGrid(void * data, string gridName, string solverName, string type,int minX, int minY, int minZ, int maxX, int maxY, int maxZ);
 	static void export_obstacles(float *data, int x, int y, int z);
 	
+	std::string getGridPointer(string gridName, string solverName);
 };
 
 
diff --git a/source/blender/python/manta_pp/grid.cpp b/source/blender/python/manta_pp/grid.cpp
index 96ce003..d474966 100644
--- a/source/blender/python/manta_pp/grid.cpp
+++ b/source/blender/python/manta_pp/grid.cpp
@@ -394,6 +394,13 @@ template<class T> void Grid<T>::readAdaptiveGridFromMemory(const std::string& me
 	}
 }
 
+template<class T> std::string Grid<T>::getDataPointer()
+{
+	ostringstream ss;
+	ss << mData ;
+	return ss.str();
+}
+
 //! Kernel: Apply a texture to a grid, setting texture(ijk)*value where texture(ijk) > 0
 //note: can not use template kernel here, because of Blender classes 
 
diff --git a/source/blender/python/manta_pp/grid.h b/source/blender/python/manta_pp/grid.h
index 07d982f..3bc5326 100644
--- a/source/blender/python/manta_pp/grid.h
+++ b/source/blender/python/manta_pp/grid.h
@@ -193,6 +193,7 @@ template<class T> class Grid : public GridBase {public:
 	void readAdaptiveGridFromMemory(const std::string& memLoc, Vec3i min, Vec3i max); static PyObject* _W_21 (PyObject* _self, PyObject* _linargs, PyObject* _kwds) { try { PbArgs _args(_linargs, _kwds); Grid* pbo = dynamic_cast<Grid*>(Pb::objFromPy(_self)); pbPreparePlugin(pbo->getParent(), "Grid::readAdaptiveGridFromMemory"); PyObject *_retval = 0; { ArgLocker _lock; const std::string& memLoc = _args.get<std::string >("memLoc",0,&_lock); Vec3i min = _args.get<Vec3i >("min",1,&_lock); Vec3i [...]
 	//! Applies texture to grid, as in Shape::applyToGrid
 	void applyToGrid(GridBase *grid, FlagGrid* respectFlags = 0); static PyObject* _W_22 (PyObject* _self, PyObject* _linargs, PyObject* _kwds) { try { PbArgs _args(_linargs, _kwds); Grid* pbo = dynamic_cast<Grid*>(Pb::objFromPy(_self)); pbPreparePlugin(pbo->getParent(), "Grid::applyToGrid"); PyObject *_retval = 0; { ArgLocker _lock; GridBase* grid = _args.getPtr<GridBase >("grid",0,&_lock); FlagGrid* respectFlags = _args.getPtrOpt<FlagGrid >("respectFlags",1,0,&_lock);  pbo->_args.copy(_ar [...]
+	std::string getDataPointer(); static PyObject* _W_23 (PyObject* _self, PyObject* _linargs, PyObject* _kwds) { try { PbArgs _args(_linargs, _kwds); Grid* pbo = dynamic_cast<Grid*>(Pb::objFromPy(_self)); pbPreparePlugin(pbo->getParent(), "Grid::getDataPointer"); PyObject *_retval = 0; { ArgLocker _lock;  pbo->_args.copy(_args);  _retval = toPy(pbo->getDataPointer());  pbo->_args.check(); } pbFinalizePlugin(pbo->getParent(),"Grid::getDataPointer"); return _retval; } catch(std::exception& e [...]
 	// c++ only operators
 	template<class S> Grid<T>& operator+=(const Grid<S>& a);
 	template<class S> Grid<T>& operator+=(const S& a);
@@ -219,7 +220,7 @@ protected: 	T* mData; public: PbArgs _args;}
 //! Special function for staggered grids
 class MACGrid : public Grid<Vec3> {public:
 	MACGrid(FluidSolver* parent, bool show=true) :Grid<Vec3>(parent,show){ 
-		mType = (GridType)(TypeMAC | TypeVec3); } static int _W_23 (PyObject* _self, PyObject* _linargs, PyObject* _kwds) { PbClass* obj = Pb::objFromPy(_self); if (obj) delete obj; try { PbArgs _args(_linargs, _kwds); pbPreparePlugin(0, "MACGrid::MACGrid" ); { ArgLocker _lock; FluidSolver* parent = _args.getPtr<FluidSolver >("parent",0,&_lock); bool show = _args.getOpt<bool >("show",1,true,&_lock);  obj = new MACGrid(parent,show); obj->registerObject(_self, &_args); _args.check(); } pbFinaliz [...]
+		mType = (GridType)(TypeMAC | TypeVec3); } static int _W_24 (PyObject* _self, PyObject* _linargs, PyObject* _kwds) { PbClass* obj = Pb::objFromPy(_self); if (obj) delete obj; try { PbArgs _args(_linargs, _kwds); pbPreparePlugin(0, "MACGrid::MACGrid" ); { ArgLocker _lock; FluidSolver* parent = _args.getPtr<FluidSolver >("parent",0,&_lock); bool show = _args.getOpt<bool >("show",1,true,&_lock);  obj = new MACGrid(parent,show); obj->registerObject(_self, &_args); _args.check(); } pbFinaliz [...]
 	
 	// specialized functions for interpolating MAC information
 	inline Vec3 getCentered(int i, int j, int k) const;
@@ -237,7 +238,7 @@ class MACGrid : public Grid<Vec3> {public:
 //! Special functions for FlagGrid
 class FlagGrid : public Grid<int> {public:
 	FlagGrid(FluidSolver* parent, int dim=3, bool show=true) :Grid<int>(parent,show){ 
-		mType = (GridType)(TypeFlags | TypeInt); } static int _W_24 (PyObject* _self, PyObject* _linargs, PyObject* _kwds) { PbClass* obj = Pb::objFromPy(_self); if (obj) delete obj; try { PbArgs _args(_linargs, _kwds); pbPreparePlugin(0, "FlagGrid::FlagGrid" ); { ArgLocker _lock; FluidSolver* parent = _args.getPtr<FluidSolver >("parent",0,&_lock); int dim = _args.getOpt<int >("dim",1,3,&_lock); bool show = _args.getOpt<bool >("show",2,true,&_lock);  obj = new FlagGrid(parent,dim,show); obj->r [...]
+		mType = (GridType)(TypeFlags | TypeInt); } static int _W_25 (PyObject* _self, PyObject* _linargs, PyObject* _kwds) { PbClass* obj = Pb::objFromPy(_self); if (obj) delete obj; try { PbArgs _args(_linargs, _kwds); pbPreparePlugin(0, "FlagGrid::FlagGrid" ); { ArgLocker _lock; FluidSolver* parent = _args.getPtr<FluidSolver >("parent",0,&_lock); int dim = _args.getOpt<int >("dim",1,3,&_lock); bool show = _args.getOpt<bool >("show",2,true,&_lock);  obj = new FlagGrid(parent,dim,show); obj->r [...]
 	
 	//! types of cells, in/outflow can be combined, e.g., TypeFluid|TypeInflow
 	enum CellType { 
@@ -282,9 +283,9 @@ class FlagGrid : public Grid<int> {public:
 	inline bool isStick(const Vec3& pos) const { return getAt(pos) & TypeStick; }
 	
 	// Python callables
-	void initDomain(int boundaryWidth=0); static PyObject* _W_25 (PyObject* _self, PyObject* _linargs, PyObject* _kwds) { try { PbArgs _args(_linargs, _kwds); FlagGrid* pbo = dynamic_cast<FlagGrid*>(Pb::objFromPy(_self)); pbPreparePlugin(pbo->getParent(), "FlagGrid::initDomain"); PyObject *_retval = 0; { ArgLocker _lock; int boundaryWidth = _args.getOpt<int >("boundaryWidth",0,0,&_lock);  pbo->_args.copy(_args);  _retval = getPyNone(); pbo->initDomain(boundaryWidth);  pbo->_args.check(); }  [...]
-	void initBoundarie

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list