Changeset View
Changeset View
Standalone View
Standalone View
extern/mantaflow/preprocessed/shapes.h
- This file was added.
| // DO NOT EDIT ! | |||||
| // This file is generated using the MantaFlow preprocessor (prep generate). | |||||
| /****************************************************************************** | |||||
| * | |||||
| * MantaFlow fluid solver framework | |||||
| * Copyright 2011 Tobias Pfaff, Nils Thuerey | |||||
| * | |||||
| * This program is free software, distributed under the terms of the | |||||
| * Apache License, Version 2.0 | |||||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * shapes classes | |||||
| * | |||||
| ******************************************************************************/ | |||||
| #ifndef _SHAPES_H | |||||
| #define _SHAPES_H | |||||
| #include "manta.h" | |||||
| #include "vectorbase.h" | |||||
| #include "levelset.h" | |||||
| namespace Manta { | |||||
| // forward declaration | |||||
| class Mesh; | |||||
| //! Base class for all shapes | |||||
| class Shape : public PbClass { | |||||
| public: | |||||
| enum GridType { TypeNone = 0, TypeBox = 1, TypeSphere = 2, TypeCylinder = 3, TypeSlope = 4 }; | |||||
| Shape(FluidSolver *parent); | |||||
| static int _W_0(PyObject *_self, PyObject *_linargs, PyObject *_kwds) | |||||
| { | |||||
| PbClass *obj = Pb::objFromPy(_self); | |||||
| if (obj) | |||||
| delete obj; | |||||
| try { | |||||
| PbArgs _args(_linargs, _kwds); | |||||
| bool noTiming = _args.getOpt<bool>("notiming", -1, 0); | |||||
| pbPreparePlugin(0, "Shape::Shape", !noTiming); | |||||
| { | |||||
| ArgLocker _lock; | |||||
| FluidSolver *parent = _args.getPtr<FluidSolver>("parent", 0, &_lock); | |||||
| obj = new Shape(parent); | |||||
| obj->registerObject(_self, &_args); | |||||
| _args.check(); | |||||
| } | |||||
| pbFinalizePlugin(obj->getParent(), "Shape::Shape", !noTiming); | |||||
| return 0; | |||||
| } | |||||
| catch (std::exception &e) { | |||||
| pbSetError("Shape::Shape", e.what()); | |||||
| return -1; | |||||
| } | |||||
| } | |||||
| //! Get the type of grid | |||||
| inline GridType getType() const | |||||
| { | |||||
| return mType; | |||||
| } | |||||
| //! Apply shape to flag grid, set inside cells to <value> | |||||
| void applyToGrid(GridBase *grid, FlagGrid *respectFlags = 0); | |||||
| static PyObject *_W_1(PyObject *_self, PyObject *_linargs, PyObject *_kwds) | |||||
| { | |||||
| try { | |||||
| PbArgs _args(_linargs, _kwds); | |||||
| Shape *pbo = dynamic_cast<Shape *>(Pb::objFromPy(_self)); | |||||
| bool noTiming = _args.getOpt<bool>("notiming", -1, 0); | |||||
| pbPreparePlugin(pbo->getParent(), "Shape::applyToGrid", !noTiming); | |||||
| 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(_args); | |||||
| _retval = getPyNone(); | |||||
| pbo->applyToGrid(grid, respectFlags); | |||||
| pbo->_args.check(); | |||||
| } | |||||
| pbFinalizePlugin(pbo->getParent(), "Shape::applyToGrid", !noTiming); | |||||
| return _retval; | |||||
| } | |||||
| catch (std::exception &e) { | |||||
| pbSetError("Shape::applyToGrid", e.what()); | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| void applyToGridSmooth(GridBase *grid, | |||||
| Real sigma = 1.0, | |||||
| Real shift = 0, | |||||
| FlagGrid *respectFlags = 0); | |||||
| static PyObject *_W_2(PyObject *_self, PyObject *_linargs, PyObject *_kwds) | |||||
| { | |||||
| try { | |||||
| PbArgs _args(_linargs, _kwds); | |||||
| Shape *pbo = dynamic_cast<Shape *>(Pb::objFromPy(_self)); | |||||
| bool noTiming = _args.getOpt<bool>("notiming", -1, 0); | |||||
| pbPreparePlugin(pbo->getParent(), "Shape::applyToGridSmooth", !noTiming); | |||||
| PyObject *_retval = 0; | |||||
| { | |||||
| ArgLocker _lock; | |||||
| GridBase *grid = _args.getPtr<GridBase>("grid", 0, &_lock); | |||||
| Real sigma = _args.getOpt<Real>("sigma", 1, 1.0, &_lock); | |||||
| Real shift = _args.getOpt<Real>("shift", 2, 0, &_lock); | |||||
| FlagGrid *respectFlags = _args.getPtrOpt<FlagGrid>("respectFlags", 3, 0, &_lock); | |||||
| pbo->_args.copy(_args); | |||||
| _retval = getPyNone(); | |||||
| pbo->applyToGridSmooth(grid, sigma, shift, respectFlags); | |||||
| pbo->_args.check(); | |||||
| } | |||||
| pbFinalizePlugin(pbo->getParent(), "Shape::applyToGridSmooth", !noTiming); | |||||
| return _retval; | |||||
| } | |||||
| catch (std::exception &e) { | |||||
| pbSetError("Shape::applyToGridSmooth", e.what()); | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| LevelsetGrid computeLevelset(); | |||||
| static PyObject *_W_3(PyObject *_self, PyObject *_linargs, PyObject *_kwds) | |||||
| { | |||||
| try { | |||||
| PbArgs _args(_linargs, _kwds); | |||||
| Shape *pbo = dynamic_cast<Shape *>(Pb::objFromPy(_self)); | |||||
| bool noTiming = _args.getOpt<bool>("notiming", -1, 0); | |||||
| pbPreparePlugin(pbo->getParent(), "Shape::computeLevelset", !noTiming); | |||||
| PyObject *_retval = 0; | |||||
| { | |||||
| ArgLocker _lock; | |||||
| pbo->_args.copy(_args); | |||||
| _retval = toPy(pbo->computeLevelset()); | |||||
| pbo->_args.check(); | |||||
| } | |||||
| pbFinalizePlugin(pbo->getParent(), "Shape::computeLevelset", !noTiming); | |||||
| return _retval; | |||||
| } | |||||
| catch (std::exception &e) { | |||||
| pbSetError("Shape::computeLevelset", e.what()); | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| void collideMesh(Mesh &mesh); | |||||
| static PyObject *_W_4(PyObject *_self, PyObject *_linargs, PyObject *_kwds) | |||||
| { | |||||
| try { | |||||
| PbArgs _args(_linargs, _kwds); | |||||
| Shape *pbo = dynamic_cast<Shape *>(Pb::objFromPy(_self)); | |||||
| bool noTiming = _args.getOpt<bool>("notiming", -1, 0); | |||||
| pbPreparePlugin(pbo->getParent(), "Shape::collideMesh", !noTiming); | |||||
| PyObject *_retval = 0; | |||||
| { | |||||
| ArgLocker _lock; | |||||
| Mesh &mesh = *_args.getPtr<Mesh>("mesh", 0, &_lock); | |||||
| pbo->_args.copy(_args); | |||||
| _retval = getPyNone(); | |||||
| pbo->collideMesh(mesh); | |||||
| pbo->_args.check(); | |||||
| } | |||||
| pbFinalizePlugin(pbo->getParent(), "Shape::collideMesh", !noTiming); | |||||
| return _retval; | |||||
| } | |||||
| catch (std::exception &e) { | |||||
| pbSetError("Shape::collideMesh", e.what()); | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| virtual Vec3 getCenter() const | |||||
| { | |||||
| return Vec3::Zero; | |||||
| } | |||||
| static PyObject *_W_5(PyObject *_self, PyObject *_linargs, PyObject *_kwds) | |||||
| { | |||||
| try { | |||||
| PbArgs _args(_linargs, _kwds); | |||||
| Shape *pbo = dynamic_cast<Shape *>(Pb::objFromPy(_self)); | |||||
| bool noTiming = _args.getOpt<bool>("notiming", -1, 0); | |||||
| pbPreparePlugin(pbo->getParent(), "Shape::getCenter", !noTiming); | |||||
| PyObject *_retval = 0; | |||||
| { | |||||
| ArgLocker _lock; | |||||
| pbo->_args.copy(_args); | |||||
| _retval = toPy(pbo->getCenter()); | |||||
| pbo->_args.check(); | |||||
| } | |||||
| pbFinalizePlugin(pbo->getParent(), "Shape::getCenter", !noTiming); | |||||
| return _retval; | |||||
| } | |||||
| catch (std::exception &e) { | |||||
| pbSetError("Shape::getCenter", e.what()); | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| virtual void setCenter(const Vec3 ¢er) | |||||
| { | |||||
| } | |||||
| static PyObject *_W_6(PyObject *_self, PyObject *_linargs, PyObject *_kwds) | |||||
| { | |||||
| try { | |||||
| PbArgs _args(_linargs, _kwds); | |||||
| Shape *pbo = dynamic_cast<Shape *>(Pb::objFromPy(_self)); | |||||
| bool noTiming = _args.getOpt<bool>("notiming", -1, 0); | |||||
| pbPreparePlugin(pbo->getParent(), "Shape::setCenter", !noTiming); | |||||
| PyObject *_retval = 0; | |||||
| { | |||||
| ArgLocker _lock; | |||||
| const Vec3 ¢er = _args.get<Vec3>("center", 0, &_lock); | |||||
| pbo->_args.copy(_args); | |||||
| _retval = getPyNone(); | |||||
| pbo->setCenter(center); | |||||
| pbo->_args.check(); | |||||
| } | |||||
| pbFinalizePlugin(pbo->getParent(), "Shape::setCenter", !noTiming); | |||||
| return _retval; | |||||
| } | |||||
| catch (std::exception &e) { | |||||
| pbSetError("Shape::setCenter", e.what()); | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| virtual Vec3 getExtent() const | |||||
| { | |||||
| return Vec3::Zero; | |||||
| } | |||||
| static PyObject *_W_7(PyObject *_self, PyObject *_linargs, PyObject *_kwds) | |||||
| { | |||||
| try { | |||||
| PbArgs _args(_linargs, _kwds); | |||||
| Shape *pbo = dynamic_cast<Shape *>(Pb::objFromPy(_self)); | |||||
| bool noTiming = _args.getOpt<bool>("notiming", -1, 0); | |||||
| pbPreparePlugin(pbo->getParent(), "Shape::getExtent", !noTiming); | |||||
| PyObject *_retval = 0; | |||||
| { | |||||
| ArgLocker _lock; | |||||
| pbo->_args.copy(_args); | |||||
| _retval = toPy(pbo->getExtent()); | |||||
| pbo->_args.check(); | |||||
| } | |||||
| pbFinalizePlugin(pbo->getParent(), "Shape::getExtent", !noTiming); | |||||
| return _retval; | |||||
| } | |||||
| catch (std::exception &e) { | |||||
| pbSetError("Shape::getExtent", e.what()); | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| //! Inside test of the shape | |||||
| virtual bool isInside(const Vec3 &pos) const; | |||||
| inline bool isInsideGrid(int i, int j, int k) const | |||||
| { | |||||
| return isInside(Vec3(i + 0.5, j + 0.5, k + 0.5)); | |||||
| }; | |||||
| virtual void generateMesh(Mesh *mesh){}; | |||||
| virtual void generateLevelset(Grid<Real> &phi){}; | |||||
| protected: | |||||
| GridType mType; | |||||
| public: | |||||
| PbArgs _args; | |||||
| } | |||||
| #define _C_Shape | |||||
| ; | |||||
| //! Dummy shape | |||||
| class NullShape : public Shape { | |||||
| public: | |||||
| NullShape(FluidSolver *parent) : Shape(parent) | |||||
| { | |||||
| } | |||||
| static int _W_8(PyObject *_self, PyObject *_linargs, PyObject *_kwds) | |||||
| { | |||||
| PbClass *obj = Pb::objFromPy(_self); | |||||
| if (obj) | |||||
| delete obj; | |||||
| try { | |||||
| PbArgs _args(_linargs, _kwds); | |||||
| bool noTiming = _args.getOpt<bool>("notiming", -1, 0); | |||||
| pbPreparePlugin(0, "NullShape::NullShape", !noTiming); | |||||
| { | |||||
| ArgLocker _lock; | |||||
| FluidSolver *parent = _args.getPtr<FluidSolver>("parent", 0, &_lock); | |||||
| obj = new NullShape(parent); | |||||
| obj->registerObject(_self, &_args); | |||||
| _args.check(); | |||||
| } | |||||
| pbFinalizePlugin(obj->getParent(), "NullShape::NullShape", !noTiming); | |||||
| return 0; | |||||
| } | |||||
| catch (std::exception &e) { | |||||
| pbSetError("NullShape::NullShape", e.what()); | |||||
| return -1; | |||||
| } | |||||
| } | |||||
| virtual bool isInside(const Vec3 &pos) const | |||||
| { | |||||
| return false; | |||||
| } | |||||
| virtual void generateMesh(Mesh *mesh) | |||||
| { | |||||
| } | |||||
| protected: | |||||
| virtual void generateLevelset(Grid<Real> &phi) | |||||
| { | |||||
| gridSetConst<Real>(phi, 1000.0f); | |||||
| } | |||||
| public: | |||||
| PbArgs _args; | |||||
| } | |||||
| #define _C_NullShape | |||||
| ; | |||||
| //! Box shape | |||||
| class Box : public Shape { | |||||
| public: | |||||
| Box(FluidSolver *parent, | |||||
| Vec3 center = Vec3::Invalid, | |||||
| Vec3 p0 = Vec3::Invalid, | |||||
| Vec3 p1 = Vec3::Invalid, | |||||
| Vec3 size = Vec3::Invalid); | |||||
| static int _W_9(PyObject *_self, PyObject *_linargs, PyObject *_kwds) | |||||
| { | |||||
| PbClass *obj = Pb::objFromPy(_self); | |||||
| if (obj) | |||||
| delete obj; | |||||
| try { | |||||
| PbArgs _args(_linargs, _kwds); | |||||
| bool noTiming = _args.getOpt<bool>("notiming", -1, 0); | |||||
| pbPreparePlugin(0, "Box::Box", !noTiming); | |||||
| { | |||||
| ArgLocker _lock; | |||||
| FluidSolver *parent = _args.getPtr<FluidSolver>("parent", 0, &_lock); | |||||
| Vec3 center = _args.getOpt<Vec3>("center", 1, Vec3::Invalid, &_lock); | |||||
| Vec3 p0 = _args.getOpt<Vec3>("p0", 2, Vec3::Invalid, &_lock); | |||||
| Vec3 p1 = _args.getOpt<Vec3>("p1", 3, Vec3::Invalid, &_lock); | |||||
| Vec3 size = _args.getOpt<Vec3>("size", 4, Vec3::Invalid, &_lock); | |||||
| obj = new Box(parent, center, p0, p1, size); | |||||
| obj->registerObject(_self, &_args); | |||||
| _args.check(); | |||||
| } | |||||
| pbFinalizePlugin(obj->getParent(), "Box::Box", !noTiming); | |||||
| return 0; | |||||
| } | |||||
| catch (std::exception &e) { | |||||
| pbSetError("Box::Box", e.what()); | |||||
| return -1; | |||||
| } | |||||
| } | |||||
| inline Vec3 getSize() const | |||||
| { | |||||
| return mP1 - mP0; | |||||
| } | |||||
| inline Vec3 getP0() const | |||||
| { | |||||
| return mP0; | |||||
| } | |||||
| inline Vec3 getP1() const | |||||
| { | |||||
| return mP1; | |||||
| } | |||||
| virtual void setCenter(const Vec3 ¢er) | |||||
| { | |||||
| Vec3 dh = 0.5 * (mP1 - mP0); | |||||
| mP0 = center - dh; | |||||
| mP1 = center + dh; | |||||
| } | |||||
| virtual Vec3 getCenter() const | |||||
| { | |||||
| return 0.5 * (mP1 + mP0); | |||||
| } | |||||
| virtual Vec3 getExtent() const | |||||
| { | |||||
| return getSize(); | |||||
| } | |||||
| virtual bool isInside(const Vec3 &pos) const; | |||||
| virtual void generateMesh(Mesh *mesh); | |||||
| virtual void generateLevelset(Grid<Real> &phi); | |||||
| protected: | |||||
| Vec3 mP0, mP1; | |||||
| public: | |||||
| PbArgs _args; | |||||
| } | |||||
| #define _C_Box | |||||
| ; | |||||
| //! Spherical shape | |||||
| class Sphere : public Shape { | |||||
| public: | |||||
| Sphere(FluidSolver *parent, Vec3 center, Real radius, Vec3 scale = Vec3(1, 1, 1)); | |||||
| static int _W_10(PyObject *_self, PyObject *_linargs, PyObject *_kwds) | |||||
| { | |||||
| PbClass *obj = Pb::objFromPy(_self); | |||||
| if (obj) | |||||
| delete obj; | |||||
| try { | |||||
| PbArgs _args(_linargs, _kwds); | |||||
| bool noTiming = _args.getOpt<bool>("notiming", -1, 0); | |||||
| pbPreparePlugin(0, "Sphere::Sphere", !noTiming); | |||||
| { | |||||
| ArgLocker _lock; | |||||
| FluidSolver *parent = _args.getPtr<FluidSolver>("parent", 0, &_lock); | |||||
| Vec3 center = _args.get<Vec3>("center", 1, &_lock); | |||||
| Real radius = _args.get<Real>("radius", 2, &_lock); | |||||
| Vec3 scale = _args.getOpt<Vec3>("scale", 3, Vec3(1, 1, 1), &_lock); | |||||
| obj = new Sphere(parent, center, radius, scale); | |||||
| obj->registerObject(_self, &_args); | |||||
| _args.check(); | |||||
| } | |||||
| pbFinalizePlugin(obj->getParent(), "Sphere::Sphere", !noTiming); | |||||
| return 0; | |||||
| } | |||||
| catch (std::exception &e) { | |||||
| pbSetError("Sphere::Sphere", e.what()); | |||||
| return -1; | |||||
| } | |||||
| } | |||||
| virtual void setCenter(const Vec3 ¢er) | |||||
| { | |||||
| mCenter = center; | |||||
| } | |||||
| virtual Vec3 getCenter() const | |||||
| { | |||||
| return mCenter; | |||||
| } | |||||
| inline Real getRadius() const | |||||
| { | |||||
| return mRadius; | |||||
| } | |||||
| virtual Vec3 getExtent() const | |||||
| { | |||||
| return Vec3(2.0 * mRadius); | |||||
| } | |||||
| virtual bool isInside(const Vec3 &pos) const; | |||||
| virtual void generateMesh(Mesh *mesh); | |||||
| virtual void generateLevelset(Grid<Real> &phi); | |||||
| protected: | |||||
| Vec3 mCenter, mScale; | |||||
| Real mRadius; | |||||
| public: | |||||
| PbArgs _args; | |||||
| } | |||||
| #define _C_Sphere | |||||
| ; | |||||
| //! Cylindrical shape | |||||
| class Cylinder : public Shape { | |||||
| public: | |||||
| Cylinder(FluidSolver *parent, Vec3 center, Real radius, Vec3 z); | |||||
| static int _W_11(PyObject *_self, PyObject *_linargs, PyObject *_kwds) | |||||
| { | |||||
| PbClass *obj = Pb::objFromPy(_self); | |||||
| if (obj) | |||||
| delete obj; | |||||
| try { | |||||
| PbArgs _args(_linargs, _kwds); | |||||
| bool noTiming = _args.getOpt<bool>("notiming", -1, 0); | |||||
| pbPreparePlugin(0, "Cylinder::Cylinder", !noTiming); | |||||
| { | |||||
| ArgLocker _lock; | |||||
| FluidSolver *parent = _args.getPtr<FluidSolver>("parent", 0, &_lock); | |||||
| Vec3 center = _args.get<Vec3>("center", 1, &_lock); | |||||
| Real radius = _args.get<Real>("radius", 2, &_lock); | |||||
| Vec3 z = _args.get<Vec3>("z", 3, &_lock); | |||||
| obj = new Cylinder(parent, center, radius, z); | |||||
| obj->registerObject(_self, &_args); | |||||
| _args.check(); | |||||
| } | |||||
| pbFinalizePlugin(obj->getParent(), "Cylinder::Cylinder", !noTiming); | |||||
| return 0; | |||||
| } | |||||
| catch (std::exception &e) { | |||||
| pbSetError("Cylinder::Cylinder", e.what()); | |||||
| return -1; | |||||
| } | |||||
| } | |||||
| void setRadius(Real r) | |||||
| { | |||||
| mRadius = r; | |||||
| } | |||||
| static PyObject *_W_12(PyObject *_self, PyObject *_linargs, PyObject *_kwds) | |||||
| { | |||||
| try { | |||||
| PbArgs _args(_linargs, _kwds); | |||||
| Cylinder *pbo = dynamic_cast<Cylinder *>(Pb::objFromPy(_self)); | |||||
| bool noTiming = _args.getOpt<bool>("notiming", -1, 0); | |||||
| pbPreparePlugin(pbo->getParent(), "Cylinder::setRadius", !noTiming); | |||||
| PyObject *_retval = 0; | |||||
| { | |||||
| ArgLocker _lock; | |||||
| Real r = _args.get<Real>("r", 0, &_lock); | |||||
| pbo->_args.copy(_args); | |||||
| _retval = getPyNone(); | |||||
| pbo->setRadius(r); | |||||
| pbo->_args.check(); | |||||
| } | |||||
| pbFinalizePlugin(pbo->getParent(), "Cylinder::setRadius", !noTiming); | |||||
| return _retval; | |||||
| } | |||||
| catch (std::exception &e) { | |||||
| pbSetError("Cylinder::setRadius", e.what()); | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| void setZ(Vec3 z) | |||||
| { | |||||
| mZDir = z; | |||||
| mZ = normalize(mZDir); | |||||
| } | |||||
| static PyObject *_W_13(PyObject *_self, PyObject *_linargs, PyObject *_kwds) | |||||
| { | |||||
| try { | |||||
| PbArgs _args(_linargs, _kwds); | |||||
| Cylinder *pbo = dynamic_cast<Cylinder *>(Pb::objFromPy(_self)); | |||||
| bool noTiming = _args.getOpt<bool>("notiming", -1, 0); | |||||
| pbPreparePlugin(pbo->getParent(), "Cylinder::setZ", !noTiming); | |||||
| PyObject *_retval = 0; | |||||
| { | |||||
| ArgLocker _lock; | |||||
| Vec3 z = _args.get<Vec3>("z", 0, &_lock); | |||||
| pbo->_args.copy(_args); | |||||
| _retval = getPyNone(); | |||||
| pbo->setZ(z); | |||||
| pbo->_args.check(); | |||||
| } | |||||
| pbFinalizePlugin(pbo->getParent(), "Cylinder::setZ", !noTiming); | |||||
| return _retval; | |||||
| } | |||||
| catch (std::exception &e) { | |||||
| pbSetError("Cylinder::setZ", e.what()); | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| virtual void setCenter(const Vec3 ¢er) | |||||
| { | |||||
| mCenter = center; | |||||
| } | |||||
| virtual Vec3 getCenter() const | |||||
| { | |||||
| return mCenter; | |||||
| } | |||||
| inline Real getRadius() const | |||||
| { | |||||
| return mRadius; | |||||
| } | |||||
| inline Vec3 getZ() const | |||||
| { | |||||
| return mZ * mZDir; | |||||
| } | |||||
| virtual Vec3 getExtent() const | |||||
| { | |||||
| return Vec3(2.0 * sqrt(square(mZ) + square(mRadius))); | |||||
| } | |||||
| virtual bool isInside(const Vec3 &pos) const; | |||||
| virtual void generateMesh(Mesh *mesh); | |||||
| virtual void generateLevelset(Grid<Real> &phi); | |||||
| protected: | |||||
| Vec3 mCenter, mZDir; | |||||
| Real mRadius, mZ; | |||||
| public: | |||||
| PbArgs _args; | |||||
| } | |||||
| #define _C_Cylinder | |||||
| ; | |||||
| //! Slope shape | |||||
| // generates a levelset based on a plane | |||||
| // plane is specified by two angles and an offset on the y axis in (offset vector would be ( 0, | |||||
| // offset, 0) ) the two angles are specified in degrees, between: y-axis and x-axis | |||||
| // y-axis and z-axis | |||||
| class Slope : public Shape { | |||||
| public: | |||||
| Slope(FluidSolver *parent, Real anglexy, Real angleyz, Real origin, Vec3 gs); | |||||
| static int _W_14(PyObject *_self, PyObject *_linargs, PyObject *_kwds) | |||||
| { | |||||
| PbClass *obj = Pb::objFromPy(_self); | |||||
| if (obj) | |||||
| delete obj; | |||||
| try { | |||||
| PbArgs _args(_linargs, _kwds); | |||||
| bool noTiming = _args.getOpt<bool>("notiming", -1, 0); | |||||
| pbPreparePlugin(0, "Slope::Slope", !noTiming); | |||||
| { | |||||
| ArgLocker _lock; | |||||
| FluidSolver *parent = _args.getPtr<FluidSolver>("parent", 0, &_lock); | |||||
| Real anglexy = _args.get<Real>("anglexy", 1, &_lock); | |||||
| Real angleyz = _args.get<Real>("angleyz", 2, &_lock); | |||||
| Real origin = _args.get<Real>("origin", 3, &_lock); | |||||
| Vec3 gs = _args.get<Vec3>("gs", 4, &_lock); | |||||
| obj = new Slope(parent, anglexy, angleyz, origin, gs); | |||||
| obj->registerObject(_self, &_args); | |||||
| _args.check(); | |||||
| } | |||||
| pbFinalizePlugin(obj->getParent(), "Slope::Slope", !noTiming); | |||||
| return 0; | |||||
| } | |||||
| catch (std::exception &e) { | |||||
| pbSetError("Slope::Slope", e.what()); | |||||
| return -1; | |||||
| } | |||||
| } | |||||
| virtual void setOrigin(const Real &origin) | |||||
| { | |||||
| mOrigin = origin; | |||||
| } | |||||
| virtual void setAnglexy(const Real &anglexy) | |||||
| { | |||||
| mAnglexy = anglexy; | |||||
| } | |||||
| virtual void setAngleyz(const Real &angleyz) | |||||
| { | |||||
| mAnglexy = angleyz; | |||||
| } | |||||
| inline Real getOrigin() const | |||||
| { | |||||
| return mOrigin; | |||||
| } | |||||
| inline Real getmAnglexy() const | |||||
| { | |||||
| return mAnglexy; | |||||
| } | |||||
| inline Real getmAngleyz() const | |||||
| { | |||||
| return mAngleyz; | |||||
| } | |||||
| virtual bool isInside(const Vec3 &pos) const; | |||||
| virtual void generateMesh(Mesh *mesh); | |||||
| virtual void generateLevelset(Grid<Real> &phi); | |||||
| protected: | |||||
| Real mAnglexy, mAngleyz; | |||||
| Real mOrigin; | |||||
| Vec3 mGs; | |||||
| public: | |||||
| PbArgs _args; | |||||
| } | |||||
| #define _C_Slope | |||||
| ; | |||||
| } // namespace Manta | |||||
| #endif | |||||