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. @@

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

Reply via email to