diff options
Diffstat (limited to 'extern/mantaflow/preprocessed/levelset.h')
-rw-r--r-- | extern/mantaflow/preprocessed/levelset.h | 51 |
1 files changed, 41 insertions, 10 deletions
diff --git a/extern/mantaflow/preprocessed/levelset.h b/extern/mantaflow/preprocessed/levelset.h index ab36ac24903..db542bb1fe6 100644 --- a/extern/mantaflow/preprocessed/levelset.h +++ b/extern/mantaflow/preprocessed/levelset.h @@ -60,7 +60,7 @@ class LevelsetGrid : public Grid<Real> { void reinitMarching(const FlagGrid &flags, Real maxTime = 4.0, - MACGrid *velTransport = NULL, + MACGrid *velTransport = nullptr, bool ignoreWalls = false, bool correctOuterLayer = true, int obstacleType = FlagGrid::TypeObstacle); @@ -71,12 +71,12 @@ class LevelsetGrid : public Grid<Real> { LevelsetGrid *pbo = dynamic_cast<LevelsetGrid *>(Pb::objFromPy(_self)); bool noTiming = _args.getOpt<bool>("notiming", -1, 0); pbPreparePlugin(pbo->getParent(), "LevelsetGrid::reinitMarching", !noTiming); - PyObject *_retval = 0; + PyObject *_retval = nullptr; { ArgLocker _lock; const FlagGrid &flags = *_args.getPtr<FlagGrid>("flags", 0, &_lock); Real maxTime = _args.getOpt<Real>("maxTime", 1, 4.0, &_lock); - MACGrid *velTransport = _args.getPtrOpt<MACGrid>("velTransport", 2, NULL, &_lock); + MACGrid *velTransport = _args.getPtrOpt<MACGrid>("velTransport", 2, nullptr, &_lock); bool ignoreWalls = _args.getOpt<bool>("ignoreWalls", 3, false, &_lock); bool correctOuterLayer = _args.getOpt<bool>("correctOuterLayer", 4, true, &_lock); int obstacleType = _args.getOpt<int>("obstacleType", 5, FlagGrid::TypeObstacle, &_lock); @@ -104,7 +104,7 @@ class LevelsetGrid : public Grid<Real> { LevelsetGrid *pbo = dynamic_cast<LevelsetGrid *>(Pb::objFromPy(_self)); bool noTiming = _args.getOpt<bool>("notiming", -1, 0); pbPreparePlugin(pbo->getParent(), "LevelsetGrid::createMesh", !noTiming); - PyObject *_retval = 0; + PyObject *_retval = nullptr; { ArgLocker _lock; Mesh &mesh = *_args.getPtr<Mesh>("mesh", 0, &_lock); @@ -131,7 +131,7 @@ class LevelsetGrid : public Grid<Real> { LevelsetGrid *pbo = dynamic_cast<LevelsetGrid *>(Pb::objFromPy(_self)); bool noTiming = _args.getOpt<bool>("notiming", -1, 0); pbPreparePlugin(pbo->getParent(), "LevelsetGrid::join", !noTiming); - PyObject *_retval = 0; + PyObject *_retval = nullptr; { ArgLocker _lock; const LevelsetGrid &o = *_args.getPtr<LevelsetGrid>("o", 0, &_lock); @@ -149,7 +149,9 @@ class LevelsetGrid : public Grid<Real> { } } - void subtract(const LevelsetGrid &o, const FlagGrid *flags = NULL, const int subtractType = 0); + void subtract(const LevelsetGrid &o, + const FlagGrid *flags = nullptr, + const int subtractType = 0); static PyObject *_W_4(PyObject *_self, PyObject *_linargs, PyObject *_kwds) { try { @@ -157,11 +159,11 @@ class LevelsetGrid : public Grid<Real> { LevelsetGrid *pbo = dynamic_cast<LevelsetGrid *>(Pb::objFromPy(_self)); bool noTiming = _args.getOpt<bool>("notiming", -1, 0); pbPreparePlugin(pbo->getParent(), "LevelsetGrid::subtract", !noTiming); - PyObject *_retval = 0; + PyObject *_retval = nullptr; { ArgLocker _lock; const LevelsetGrid &o = *_args.getPtr<LevelsetGrid>("o", 0, &_lock); - const FlagGrid *flags = _args.getPtrOpt<FlagGrid>("flags", 1, NULL, &_lock); + const FlagGrid *flags = _args.getPtrOpt<FlagGrid>("flags", 1, nullptr, &_lock); const int subtractType = _args.getOpt<int>("subtractType", 2, 0, &_lock); pbo->_args.copy(_args); _retval = getPyNone(); @@ -186,7 +188,7 @@ class LevelsetGrid : public Grid<Real> { LevelsetGrid *pbo = dynamic_cast<LevelsetGrid *>(Pb::objFromPy(_self)); bool noTiming = _args.getOpt<bool>("notiming", -1, 0); pbPreparePlugin(pbo->getParent(), "LevelsetGrid::initFromFlags", !noTiming); - PyObject *_retval = 0; + PyObject *_retval = nullptr; { ArgLocker _lock; const FlagGrid &flags = *_args.getPtr<FlagGrid>("flags", 0, &_lock); @@ -215,7 +217,7 @@ class LevelsetGrid : public Grid<Real> { LevelsetGrid *pbo = dynamic_cast<LevelsetGrid *>(Pb::objFromPy(_self)); bool noTiming = _args.getOpt<bool>("notiming", -1, 0); pbPreparePlugin(pbo->getParent(), "LevelsetGrid::fillHoles", !noTiming); - PyObject *_retval = 0; + PyObject *_retval = nullptr; { ArgLocker _lock; int maxDepth = _args.getOpt<int>("maxDepth", 0, 10, &_lock); @@ -234,6 +236,35 @@ class LevelsetGrid : public Grid<Real> { } } + //! flood-fill the levelset to ensure that closed obstacles are filled inside + void floodFill(const Real value = -0.5, const bool outside = true, const int boundaryWidth = 1); + static PyObject *_W_7(PyObject *_self, PyObject *_linargs, PyObject *_kwds) + { + try { + PbArgs _args(_linargs, _kwds); + LevelsetGrid *pbo = dynamic_cast<LevelsetGrid *>(Pb::objFromPy(_self)); + bool noTiming = _args.getOpt<bool>("notiming", -1, 0); + pbPreparePlugin(pbo->getParent(), "LevelsetGrid::floodFill", !noTiming); + PyObject *_retval = nullptr; + { + ArgLocker _lock; + const Real value = _args.getOpt<Real>("value", 0, -0.5, &_lock); + const bool outside = _args.getOpt<bool>("outside", 1, true, &_lock); + const int boundaryWidth = _args.getOpt<int>("boundaryWidth", 2, 1, &_lock); + pbo->_args.copy(_args); + _retval = getPyNone(); + pbo->floodFill(value, outside, boundaryWidth); + pbo->_args.check(); + } + pbFinalizePlugin(pbo->getParent(), "LevelsetGrid::floodFill", !noTiming); + return _retval; + } + catch (std::exception &e) { + pbSetError("LevelsetGrid::floodFill", e.what()); + return 0; + } + } + static Real invalidTimeValue(); public: PbArgs _args; |