// 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("notiming", -1, 0); pbPreparePlugin(0, "Shape::Shape", !noTiming); { ArgLocker _lock; FluidSolver *parent = _args.getPtr("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 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(Pb::objFromPy(_self)); bool noTiming = _args.getOpt("notiming", -1, 0); pbPreparePlugin(pbo->getParent(), "Shape::applyToGrid", !noTiming); PyObject *_retval = nullptr; { ArgLocker _lock; GridBase *grid = _args.getPtr("grid", 0, &_lock); FlagGrid *respectFlags = _args.getPtrOpt("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(Pb::objFromPy(_self)); bool noTiming = _args.getOpt("notiming", -1, 0); pbPreparePlugin(pbo->getParent(), "Shape::applyToGridSmooth", !noTiming); PyObject *_retval = nullptr; { ArgLocker _lock; GridBase *grid = _args.getPtr("grid", 0, &_lock); Real sigma = _args.getOpt("sigma", 1, 1.0, &_lock); Real shift = _args.getOpt("shift", 2, 0, &_lock); FlagGrid *respectFlags = _args.getPtrOpt("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(Pb::objFromPy(_self)); bool noTiming = _args.getOpt("notiming", -1, 0); pbPreparePlugin(pbo->getParent(), "Shape::computeLevelset", !noTiming); PyObject *_retval = nullptr; { 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(Pb::objFromPy(_self)); bool noTiming = _args.getOpt("notiming", -1, 0); pbPreparePlugin(pbo->getParent(), "Shape::collideMesh", !noTiming); PyObject *_retval = nullptr; { ArgLocker _lock; Mesh &mesh = *_args.getPtr("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(Pb::objFromPy(_self)); bool noTiming = _args.getOpt("notiming", -1, 0); pbPreparePlugin(pbo->getParent(), "Shape::getCenter", !noTiming); PyObject *_retval = nullptr; { 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(Pb::objFromPy(_self)); bool noTiming = _args.getOpt("notiming", -1, 0); pbPreparePlugin(pbo->getParent(), "Shape::setCenter", !noTiming); PyObject *_retval = nullptr; { ArgLocker _lock; const Vec3 ¢er = _args.get("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(Pb::objFromPy(_self)); bool noTiming = _args.getOpt("notiming", -1, 0); pbPreparePlugin(pbo->getParent(), "Shape::getExtent", !noTiming); PyObject *_retval = nullptr; { 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 &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("notiming", -1, 0); pbPreparePlugin(0, "NullShape::NullShape", !noTiming); { ArgLocker _lock; FluidSolver *parent = _args.getPtr("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 &phi) { gridSetConst(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("notiming", -1, 0); pbPreparePlugin(0, "Box::Box", !noTiming); { ArgLocker _lock; FluidSolver *parent = _args.getPtr("parent", 0, &_lock); Vec3 center = _args.getOpt("center", 1, Vec3::Invalid, &_lock); Vec3 p0 = _args.getOpt("p0", 2, Vec3::Invalid, &_lock); Vec3 p1 = _args.getOpt("p1", 3, Vec3::Invalid, &_lock); Vec3 size = _args.getOpt("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 &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("notiming", -1, 0); pbPreparePlugin(0, "Sphere::Sphere", !noTiming); { ArgLocker _lock; FluidSolver *parent = _args.getPtr("parent", 0, &_lock); Vec3 center = _args.get("center", 1, &_lock); Real radius = _args.get("radius", 2, &_lock); Vec3 scale = _args.getOpt("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 &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("notiming", -1, 0); pbPreparePlugin(0, "Cylinder::Cylinder", !noTiming); { ArgLocker _lock; FluidSolver *parent = _args.getPtr("parent", 0, &_lock); Vec3 center = _args.get("center", 1, &_lock); Real radius = _args.get("radius", 2, &_lock); Vec3 z = _args.get("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(Pb::objFromPy(_self)); bool noTiming = _args.getOpt("notiming", -1, 0); pbPreparePlugin(pbo->getParent(), "Cylinder::setRadius", !noTiming); PyObject *_retval = nullptr; { ArgLocker _lock; Real r = _args.get("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(Pb::objFromPy(_self)); bool noTiming = _args.getOpt("notiming", -1, 0); pbPreparePlugin(pbo->getParent(), "Cylinder::setZ", !noTiming); PyObject *_retval = nullptr; { ArgLocker _lock; Vec3 z = _args.get("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 &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("notiming", -1, 0); pbPreparePlugin(0, "Slope::Slope", !noTiming); { ArgLocker _lock; FluidSolver *parent = _args.getPtr("parent", 0, &_lock); Real anglexy = _args.get("anglexy", 1, &_lock); Real angleyz = _args.get("angleyz", 2, &_lock); Real origin = _args.get("origin", 3, &_lock); Vec3 gs = _args.get("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 &phi); protected: Real mAnglexy, mAngleyz; Real mOrigin; Vec3 mGs; public: PbArgs _args; } #define _C_Slope ; } // namespace Manta #endif