[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