|
#include <TriangleMeshWall.h>
Classes | |
struct | Triangle |
struct | Vertex |
Public Member Functions | |
TriangleMeshWall ()=default | |
Default constructor. More... | |
TriangleMeshWall (const TriangleMeshWall &other) | |
Copy constructor. More... | |
TriangleMeshWall (const std::vector< Vec3D > &points, const std::vector< std::array< unsigned, 3 >> &cells, const ParticleSpecies *species=nullptr) | |
Constructor creating triangles. More... | |
TriangleMeshWall (const Vec3D &P0, const Vec3D &P1, const Vec3D &P, Mdouble resolutionU, Mdouble resolutionV, const ParticleSpecies *species=nullptr, bool periodicInU=false, bool periodicInV=false) | |
Constructor creating parallelogram shaped mesh with a given resolution in u- and v-direction. More... | |
~TriangleMeshWall () override=default | |
Destructor. More... | |
TriangleMeshWall & | operator= (const TriangleMeshWall &other) |
Copy assignment operator. More... | |
TriangleMeshWall * | copy () const override |
Wall copy method. More... | |
void | read (std::istream &is) override |
Reads a TriangleMeshWall from an input stream, for example a restart file. More... | |
void | write (std::ostream &os) const override |
Writes a TriangleMeshWall to an output stream, for example a restart file. More... | |
std::string | getName () const override |
Returns the name of the object. More... | |
void | set (const std::vector< Vec3D > &points, const std::vector< std::array< unsigned, 3 >> &cells) |
Set function creating triangles. More... | |
bool | getDistanceAndNormal (const BaseParticle &p, Mdouble &distance, Vec3D &normal_return) const override |
Checks if a collision is happening with any of the TriangleWalls. NOTE: this does not handle actual interactions, but can only be used to know IF one (of possible many) interaction occurs. More... | |
BaseInteraction * | getInteractionWith (BaseParticle *p, unsigned timeStamp, InteractionHandler *interactionHandler) override |
Gets the interaction between a given BaseParticle and all TriangleWalls in this mesh at a given time. In case of multiple contacts, chooses the one with greatest overlap. More... | |
void | resetForceTorque (int numberOfOMPthreads) override |
void | writeVTK (VTKContainer &vtk) const override |
void | setSpecies (const ParticleSpecies *species) |
void | moveVertex (unsigned index, const Vec3D &dP) |
Updates a vertex by a given change in position. More... | |
void | removeTriangle (unsigned index, bool removeFreeVertex=true) |
Removes a single triangle from the mesh. More... | |
void | refineTriangle (unsigned index, unsigned numberOfTimes=1) |
Makes a really basic refinement by adding a vertex in the middle of the triangle to create 3 new ones. Note: Multiple refinements will definitely NOT create a nice mesh. More... | |
void | setPeriodicCompanions (const std::vector< std::pair< unsigned, unsigned >> &periodicCompanions) |
Sets the vector with pairs of indices of vertices which lie on a periodic boundary and are each others 'companion'. E.g. when moving one vertex, the other is also moved the same amount. A vertex can have multiple companions (when lying on multiple periodic boundaries) and those should be in the vector as multiple pairs. More... | |
void | moveVerticesToMatchVolume (std::vector< Vec3D > displacements, Mdouble targetVolume, int maxNumRecursiveCalls=15) |
Moves all vertices by given displacements and corrects to match the change in volume with the target volume. The final displacements will be proportional to the initial ones, but their actual values will have change. More... | |
Mdouble | getVolumeTetrahedron (const Vec3D &a, const Vec3D &b, const Vec3D &c, const Vec3D &d) |
Calculates the volume of a tetrahedron formed by 4 vertices. More... | |
void | addToMesh (TriangleMeshWall mesh) |
Adds a mesh to this mesh. When vertices share a position, only the one in the current mesh is kept and both meshes are then "connected" at that point. More... | |
void | createParallelogramMesh (const Vec3D &P0, const Vec3D &P1, const Vec3D &P2, Mdouble resolutionU, Mdouble resolutionV, bool periodicInU=false, bool periodicInV=false) |
Creates a parallelogram shaped mesh with a given resolution in u- and v-direction. More... | |
void | createFourPointMesh (const Vec3D &P0, const Vec3D &P1, const Vec3D &P2, const Vec3D &P3, int numSegmentsU, int numSegmentsV) |
Creates mesh consisting of four points, with linearly interpolated segments. The points therefore don't necessarily have to lie in plane. More... | |
bool | isLocal (Vec3D &min, Vec3D &max) const override |
void | setPosition (const Vec3D &position) override |
Sets the position of this BaseInteractable. More... | |
void | setOrientation (const Quaternion &orientation) override |
Sets the orientation of this BaseInteractable. More... | |
void | move (const Vec3D &move) override |
Moves this BaseInteractable by adding an amount to the position. More... | |
void | rotate (const Vec3D &angularVelocity) override |
Rotates this BaseInteractable. More... | |
Public Member Functions inherited from BaseWall | |
BaseWall () | |
Default constructor. More... | |
BaseWall (const BaseWall &w) | |
Copy constructor. More... | |
~BaseWall () override | |
Default destructor. More... | |
virtual bool | getDistanceNormalOverlap (const BaseParticle &P, Mdouble &distance, Vec3D &normal_return, Mdouble &overlap) const |
virtual bool | getDistanceNormalOverlapSuperquadric (const SuperQuadricParticle &p, Mdouble &distance, Vec3D &normal_return, Mdouble &overlap) const |
virtual Vec3D | getFurthestPointSuperQuadric (const Vec3D &normalBodyFixed, const Vec3D &axes, Mdouble eps1, Mdouble eps2) const |
virtual void | setHandler (WallHandler *handler) |
A function which sets the WallHandler for this BaseWall. More... | |
WallHandler * | getHandler () const |
A function which returns the WallHandler that handles this BaseWall. More... | |
void | setIndSpecies (unsigned int indSpecies) override |
Define the species of this wall using the index of the species in the SpeciesHandler in this DPMBase. More... | |
void | setSpecies (const ParticleSpecies *species) |
Defines the species of the current wall. More... | |
bool | isFixed () const override |
void | setForceControl (Vec3D forceGoal, Vec3D gainFactor, Vec3D baseVelocity={0, 0, 0}) |
Slowly adjusts the force on a wall towards a specified goal, by adjusting (prescribing) the velocity of the wall. More... | |
bool | getLinePlaneIntersect (Vec3D &intersect, const Vec3D &p0, const Vec3D &p1, const Vec3D &n, const Vec3D &p) |
bool | isInsideWallVTK (const Vec3D &point, const Vec3D &normal, const Vec3D &position) const |
void | projectOntoWallVTK (Vec3D &point0, const Vec3D &point1, const Vec3D &normal, const Vec3D &position) const |
void | intersectVTK (std::vector< Vec3D > &points, Vec3D normal, Vec3D position) const |
virtual BaseInteraction * | getInteractionWithSuperQuad (SuperQuadricParticle *p, unsigned timeStamp, InteractionHandler *interactionHandler) |
void | getVTK (std::vector< Vec3D > &points, std::vector< std::vector< double >> &triangleStrips) |
const Vec3D | getAxis () const |
virtual void | actionsOnRestart () |
No implementation but can be overidden in its derived classes. More... | |
virtual void | actionsAfterParticleGhostUpdate () |
No implementation but can be overidden in its derived classes. More... | |
virtual void | handleParticleAddition (unsigned int id, BaseParticle *p) |
Handles the addition of particles to the particleHandler. More... | |
virtual void | handleParticleRemoval (unsigned int id) |
Handles the addition of particles to the particleHandler. More... | |
virtual void | checkInteractions (InteractionHandler *interactionHandler, unsigned int timeStamp) |
Check if all interactions are valid. More... | |
bool | getVTKVisibility () const |
void | setVTKVisibility (bool vtkVisibility) |
void | addRenderedWall (BaseWall *w) |
BaseWall * | getRenderedWall (size_t i) const |
std::vector< BaseWall * > | getRenderedWalls () const |
void | removeRenderedWalls () |
void | renderWall (VTKContainer &vtk) |
void | addParticlesAtWall (unsigned numElements=50) |
void | setVelocityControl (Vec3D forceGoal, Vec3D gainFactor, Vec3D baseVelocity) |
virtual void | writeWallDetailsVTK (VTKData &data) const |
virtual void | computeWear () |
Public Member Functions inherited from BaseInteractable | |
BaseInteractable () | |
Default BaseInteractable constructor. More... | |
BaseInteractable (const BaseInteractable &p) | |
Copy constructor. More... | |
~BaseInteractable () override | |
Destructor, it simply destructs the BaseInteractable and all the objects it contains. More... | |
unsigned int | getIndSpecies () const |
Returns the index of the species associated with the interactable object. More... | |
const ParticleSpecies * | getSpecies () const |
Returns a pointer to the species of this BaseInteractable. More... | |
void | setSpecies (const ParticleSpecies *species) |
Sets the species of this BaseInteractable. More... | |
const Vec3D & | getForce () const |
Returns the force on this BaseInteractable. More... | |
const Vec3D & | getTorque () const |
Returns the torque on this BaseInteractable. More... | |
void | setForce (const Vec3D &force) |
Sets the force on this BaseInteractable. More... | |
void | setTorque (const Vec3D &torque) |
Sets the torque on this BaseInteractable. More... | |
void | addForce (const Vec3D &addForce) |
Adds an amount to the force on this BaseInteractable. More... | |
void | addTorque (const Vec3D &addTorque) |
Adds an amount to the torque on this BaseInteractable. More... | |
void | sumForceTorqueOMP () |
const Vec3D & | getPosition () const |
Returns the position of this BaseInteractable. More... | |
const Quaternion & | getOrientation () const |
Returns the orientation of this BaseInteractable. More... | |
void | setOrientationViaNormal (Vec3D normal) |
Sets the orientation of this BaseInteractable by defining the vector that results from the rotation of the (1,0,0) vector. More... | |
void | setOrientationViaEuler (Vec3D eulerAngle) |
Sets the orientation of this BaseInteractable by defining the euler angles. More... | |
const std::vector< BaseInteraction * > & | getInteractions () const |
Returns a list of interactions which belong to this interactable. More... | |
void | addInteraction (BaseInteraction *I) |
Adds an interaction to this BaseInteractable. More... | |
bool | removeInteraction (BaseInteraction *I) |
Removes an interaction from this BaseInteractable. More... | |
void | copyInteractionsForPeriodicParticles (const BaseInteractable &p) |
Copies interactions to this BaseInteractable whenever a periodic copy made. More... | |
void | setVelocity (const Vec3D &velocity) |
set the velocity of the BaseInteractable. More... | |
void | setAngularVelocity (const Vec3D &angularVelocity) |
set the angular velocity of the BaseInteractble. More... | |
void | addVelocity (const Vec3D &velocity) |
adds an increment to the velocity. More... | |
void | addAngularVelocity (const Vec3D &angularVelocity) |
add an increment to the angular velocity. More... | |
virtual const Vec3D & | getVelocity () const |
Returns the velocity of this interactable. More... | |
virtual const Vec3D & | getAngularVelocity () const |
Returns the angular velocity of this interactable. More... | |
void | setPrescribedPosition (const std::function< Vec3D(double)> &prescribedPosition) |
Allows the position of an infinite mass interactable to be prescribed. More... | |
void | applyPrescribedPosition (double time) |
Computes the position from the user defined prescribed position function. More... | |
void | setPrescribedVelocity (const std::function< Vec3D(double)> &prescribedVelocity) |
Allows the velocity of an infinite mass interactable to be prescribed. More... | |
void | applyPrescribedVelocity (double time) |
Computes the velocity from the user defined prescribed velocity function. More... | |
void | setPrescribedOrientation (const std::function< Quaternion(double)> &prescribedOrientation) |
Allows the orientation of the infinite mass interactbale to be prescribed. More... | |
void | applyPrescribedOrientation (double time) |
Computes the orientation from the user defined prescribed orientation function. More... | |
void | setPrescribedAngularVelocity (const std::function< Vec3D(double)> &prescribedAngularVelocity) |
Allows the angular velocity of the infinite mass interactable to be prescribed. More... | |
void | applyPrescribedAngularVelocity (double time) |
Computes the angular velocity from the user defined prescribed angular velocity. More... | |
virtual const Vec3D | getVelocityAtContact (const Vec3D &contact) const |
Returns the velocity at the contact point, use by many force laws. More... | |
void | integrateBeforeForceComputation (double time, double timeStep) |
This is part of integrate routine for objects with infinite mass. More... | |
void | integrateAfterForceComputation (double time, double timeStep) |
This is part of the integration routine for objects with infinite mass. More... | |
virtual Mdouble | getInvMass () const |
virtual Mdouble | getCurvature (const Vec3D &labFixedCoordinates) const |
virtual bool | isFaceContact (const Vec3D &normal) const |
Public Member Functions inherited from BaseObject | |
BaseObject ()=default | |
Default constructor. More... | |
BaseObject (const BaseObject &p)=default | |
Copy constructor, copies all the objects BaseObject contains. More... | |
virtual | ~BaseObject ()=default |
virtual destructor More... | |
virtual void | moveInHandler (unsigned int index) |
Except that it is virtual, it does the same thing as setIndex() does. More... | |
void | setIndex (unsigned int index) |
Allows one to assign an index to an object in the handler/container. More... | |
void | setId (unsigned long id) |
Assigns a unique identifier to each object in the handler (container) which remains constant even after the object is deleted from the container/handler. More... | |
unsigned int | getIndex () const |
Returns the index of the object in the handler. More... | |
unsigned int | getId () const |
Returns the unique identifier of any particular object. More... | |
void | setGroupId (unsigned groupId) |
unsigned | getGroupId () const |
Protected Attributes | |
std::vector< Triangle > | triangles_ |
std::vector< Vertex > | vertices_ |
Private Member Functions | |
std::vector< unsigned > | getPeriodicCompanions (unsigned index) |
Looks up the companions belonging to a vertex index, if it has any. More... | |
bool | isWithinBoundingBox (const Vec3D &position, Mdouble radius) const |
Checks whether or not a part of the particle is within the bounding box. More... | |
void | updateBoundingBox () |
Sets the local and global bounding boxes. This method should be called any time a vertex is updated in lab frame. More... | |
void | updateBoundingBoxGlobal () |
Sets the global bounding box, using the bounding box in lab frame. This method should be called when there are changes in global frame, but not in lab frame. E.g. when calling setPosition(). More... | |
int | getNumberOfSegmentsAndResolution (Mdouble length, Mdouble &resolution) |
Finds the number of segments and the resolution needed to perfectly fit a length. More... | |
void | addZigZagDiagonalCells (std::vector< std::array< unsigned, 3 >> &cells, int numU, int numV, int i, int j) |
Helper function that adds two cells (triangles) to the provided cells vector. Used by createParallelogramMesh and createFourPointMesh. More... | |
Private Attributes | |
std::vector< std::pair< unsigned, unsigned > > | periodicCompanions_ |
Vec3D | boundingBoxMin_ |
Bounding box corners in lab frame and global frame. Used to speed up contact detection. HGrid uses the global frame min max. More... | |
Vec3D | boundingBoxMax_ |
Vec3D | boundingBoxMinGlobal_ |
Vec3D | boundingBoxMaxGlobal_ |
Additional Inherited Members | |
Static Public Member Functions inherited from BaseWall | |
static void | addToVTK (const std::vector< Vec3D > &points, VTKContainer &vtk) |
Takes the points provided and adds a triangle strip connecting these points to the vtk container. More... | |
|
default |
Default constructor.
Referenced by copy().
TriangleMeshWall::TriangleMeshWall | ( | const TriangleMeshWall & | other | ) |
Copy constructor.
other | The TriangleMeshWall that must be copied. |
References boundingBoxMax_, boundingBoxMaxGlobal_, boundingBoxMin_, boundingBoxMinGlobal_, periodicCompanions_, triangles_, and vertices_.
TriangleMeshWall::TriangleMeshWall | ( | const std::vector< Vec3D > & | points, |
const std::vector< std::array< unsigned, 3 >> & | cells, | ||
const ParticleSpecies * | species = nullptr |
||
) |
Constructor creating triangles.
points | Vector of vertices |
cells | Vector of cells, each cell holds three indices to the points vector |
species |
References set(), and setSpecies().
TriangleMeshWall::TriangleMeshWall | ( | const Vec3D & | P0, |
const Vec3D & | P1, | ||
const Vec3D & | P, | ||
Mdouble | resolutionU, | ||
Mdouble | resolutionV, | ||
const ParticleSpecies * | species = nullptr , |
||
bool | periodicInU = false , |
||
bool | periodicInV = false |
||
) |
Constructor creating parallelogram shaped mesh with a given resolution in u- and v-direction.
P0,P1,P2 | The three points, in clockwise order, forming the parallelogram (fourth point is implied). |
resolutionU | Maximum length of a segment in u-direction. |
resolutionV | Maximum length of a segment in v-direction. |
species | |
periodicInU | Whether or not the first and last column of vertices lie in a periodic boundary and should be set as periodic companions. |
periodicInV | Whether or not the first and last row of vertices lie in a periodic boundary and should be set as periodic companions. |
References createParallelogramMesh(), and setSpecies().
|
overridedefault |
Destructor.
void TriangleMeshWall::addToMesh | ( | TriangleMeshWall | mesh | ) |
Adds a mesh to this mesh. When vertices share a position, only the one in the current mesh is kept and both meshes are then "connected" at that point.
mesh | Mesh to be added. |
References constants::i, Vec3D::isEqualTo(), TriangleMeshWall::Vertex::position, TriangleMeshWall::Vertex::triangleIndices, triangles_, updateBoundingBox(), TriangleMeshWall::Triangle::vertexIndices, and vertices_.
|
private |
Helper function that adds two cells (triangles) to the provided cells vector. Used by createParallelogramMesh and createFourPointMesh.
cells | The vector to which the cells are added. |
numU | The number of segments in u-direction. |
numV | The number of segments in v-direction. |
i | The cell index in u-direction. |
j | The cell index in v-direction. |
References constants::i.
Referenced by createFourPointMesh(), and createParallelogramMesh().
|
overridevirtual |
Wall copy method.
Implements BaseWall.
Reimplemented in WearableTriangleMeshWall.
References TriangleMeshWall().
Referenced by operator=().
void TriangleMeshWall::createFourPointMesh | ( | const Vec3D & | P0, |
const Vec3D & | P1, | ||
const Vec3D & | P2, | ||
const Vec3D & | P3, | ||
int | numSegmentsU, | ||
int | numSegmentsV | ||
) |
Creates mesh consisting of four points, with linearly interpolated segments. The points therefore don't necessarily have to lie in plane.
P0,P1,P2,P3 | The four points, in clock-wise order. |
numSegmentsU | Number of segments in u-direction. |
numSegmentsV | Number of segments in v-direction. |
References addZigZagDiagonalCells(), constants::i, and set().
void TriangleMeshWall::createParallelogramMesh | ( | const Vec3D & | P0, |
const Vec3D & | P1, | ||
const Vec3D & | P2, | ||
Mdouble | resolutionU, | ||
Mdouble | resolutionV, | ||
bool | periodicInU = false , |
||
bool | periodicInV = false |
||
) |
Creates a parallelogram shaped mesh with a given resolution in u- and v-direction.
P0,P1,P2 | The three points, in clockwise order, forming the parallelogram (fourth point is implied). |
resolutionU | Maximum length of a segment in u-direction. |
resolutionV | Maximum length of a segment in v-direction. |
periodicInU | Whether or not the first and last column of vertices lie in a periodic boundary and should be set as periodic companions. |
periodicInV | Whether or not the first and last row of vertices lie in a periodic boundary and should be set as periodic companions. |
References addZigZagDiagonalCells(), getNumberOfSegmentsAndResolution(), constants::i, set(), and setPeriodicCompanions().
Referenced by TriangleMeshWall().
|
overridevirtual |
Checks if a collision is happening with any of the TriangleWalls. NOTE: this does not handle actual interactions, but can only be used to know IF one (of possible many) interaction occurs.
p | |
distance | |
normal_return |
Implements BaseWall.
References BaseInteractable::getOrientation(), BaseInteractable::getPosition(), BaseParticle::getRadius(), BaseInteractable::getSpecies(), BaseParticle::getWallInteractionRadius(), isWithinBoundingBox(), BaseInteractable::setPosition(), BaseParticle::setRadius(), BaseParticle::setSpecies(), and triangles_.
|
overridevirtual |
Gets the interaction between a given BaseParticle and all TriangleWalls in this mesh at a given time. In case of multiple contacts, chooses the one with greatest overlap.
p | |
timeStamp | |
interactionHandler |
Reimplemented from BaseWall.
References BaseInteractable::addAngularVelocity(), BaseInteractable::addForce(), BaseInteractable::addTorque(), BaseInteractable::addVelocity(), Vec3D::cross(), BaseInteractable::getAngularVelocity(), BaseWall::getHandler(), BaseObject::getIndex(), InteractionHandler::getInteraction(), BaseInteractable::getOrientation(), BaseInteractable::getPosition(), BaseInteractable::getVelocity(), BaseParticle::getWallInteractionRadius(), constants::i, isWithinBoundingBox(), BaseHandler< T >::removeObject(), rotate(), BaseInteractable::setPosition(), and triangles_.
|
overridevirtual |
Returns the name of the object.
Implements BaseObject.
Reimplemented in WearableTriangleMeshWall.
|
private |
Finds the number of segments and the resolution needed to perfectly fit a length.
length | Total length |
resolution | Maximum length of a segment, will be made smaller when needed. |
Referenced by createParallelogramMesh().
|
private |
Looks up the companions belonging to a vertex index, if it has any.
index | Index of the vertex to lookup the companions for. |
References periodicCompanions_.
Referenced by moveVertex().
Mdouble TriangleMeshWall::getVolumeTetrahedron | ( | const Vec3D & | a, |
const Vec3D & | b, | ||
const Vec3D & | c, | ||
const Vec3D & | d | ||
) |
Calculates the volume of a tetrahedron formed by 4 vertices.
References Vec3D::cross(), and Vec3D::dot().
Referenced by moveVerticesToMatchVolume().
if isLocal returns true and the DPM class derived from MercuryBase, the hGrid will be used to find wall-particle contacts, using min/max.
Reimplemented from BaseWall.
References boundingBoxMaxGlobal_, and boundingBoxMinGlobal_.
Checks whether or not a part of the particle is within the bounding box.
position | Position of the particle |
radius | Interaction radius of the particle |
References boundingBoxMax_, and boundingBoxMin_.
Referenced by getDistanceAndNormal(), and getInteractionWith().
|
overridevirtual |
Moves this BaseInteractable by adding an amount to the position.
Moves (displaces) the interacable a given distance. Note, this just updates the position by the move.
[in] | move | Reference to Vec3D which is the distance to move the interactable. |
Reimplemented from BaseInteractable.
References BaseInteractable::move(), and updateBoundingBoxGlobal().
void TriangleMeshWall::moveVertex | ( | unsigned | index, |
const Vec3D & | dP | ||
) |
Updates a vertex by a given change in position.
index | Index of vertex to move. |
dP | Change in position. |
References getPeriodicCompanions(), triangles_, updateBoundingBox(), and vertices_.
void TriangleMeshWall::moveVerticesToMatchVolume | ( | std::vector< Vec3D > | displacements, |
Mdouble | targetVolume, | ||
int | maxNumRecursiveCalls = 15 |
||
) |
Moves all vertices by given displacements and corrects to match the change in volume with the target volume. The final displacements will be proportional to the initial ones, but their actual values will have change.
displacements | Initial change in position for each vertex. |
targetVolume | Volume that the change in volume must match. |
maxNumRecursiveCalls | Maximum number of recursive calls allowed, in case certain tolerances are set too tight and infinite recursion occurs. |
References BaseObject::getId(), getVolumeTetrahedron(), constants::i, mathsFunc::isEqual(), logger, periodicCompanions_, triangles_, updateBoundingBox(), TriangleMeshWall::Triangle::vertexIndices, vertices_, and WARN.
Referenced by WearableTriangleMeshWall::computeWear().
TriangleMeshWall & TriangleMeshWall::operator= | ( | const TriangleMeshWall & | other | ) |
Copy assignment operator.
other | The TriangleMeshWall that must be copied. |
References copy().
|
overridevirtual |
Reads a TriangleMeshWall from an input stream, for example a restart file.
Reimplemented from BaseWall.
Reimplemented in WearableTriangleMeshWall.
References constants::i, BaseWall::read(), set(), setPeriodicCompanions(), and updateBoundingBox().
Referenced by WearableTriangleMeshWall::read().
void TriangleMeshWall::refineTriangle | ( | unsigned | index, |
unsigned | numberOfTimes = 1 |
||
) |
Makes a really basic refinement by adding a vertex in the middle of the triangle to create 3 new ones. Note: Multiple refinements will definitely NOT create a nice mesh.
index | Index of triangle to refine. |
numberOfTimes | How many times to refine. |
References BaseInteractable::getSpecies(), TriangleMeshWall::Vertex::position, BaseWall::setSpecies(), TriangleWall::setVertices(), TriangleMeshWall::Vertex::triangleIndices, triangles_, TriangleMeshWall::Triangle::vertexIndices, vertices_, and TriangleMeshWall::Triangle::wall.
void TriangleMeshWall::removeTriangle | ( | unsigned | index, |
bool | removeFreeVertex = true |
||
) |
Removes a single triangle from the mesh.
index | Index of triangle to remove. |
removeFreeVertex | Removes a vertex when it has no more triangles attached to it. |
References constants::i, periodicCompanions_, triangles_, updateBoundingBox(), TriangleMeshWall::Triangle::vertexIndices, and vertices_.
|
overridevirtual |
Reimplemented from BaseInteractable.
References BaseInteractable::resetForceTorque(), and triangles_.
|
overridevirtual |
Rotates this BaseInteractable.
Rotates the interacable a given solid angle. Note, this just updates the orientation by the angle.
This function has been declared virtual, so it can be overridden for IntersectionOfWalls.
[in] | angularVelocityDt | Reference to Vec3D which is the solid angle through which the interactable is rotated. |
Reimplemented from BaseInteractable.
References BaseInteractable::rotate(), and updateBoundingBoxGlobal().
Referenced by getInteractionWith(), and writeVTK().
void TriangleMeshWall::set | ( | const std::vector< Vec3D > & | points, |
const std::vector< std::array< unsigned, 3 >> & | cells | ||
) |
Set function creating triangles.
points | Vector of vertices |
cells | Vector of cells, each cell holds three indices to the points vector |
References BaseInteractable::getSpecies(), BaseWall::setSpecies(), TriangleWall::setVertices(), triangles_, updateBoundingBox(), and vertices_.
Referenced by createFourPointMesh(), createParallelogramMesh(), read(), and TriangleMeshWall().
|
overridevirtual |
Sets the orientation of this BaseInteractable.
Interpretation depends on which interactable is being considered See also BaseInteractable::getOrientation.
[in] | orientation | Reference to Vec3D storing the orientation of the particle. |
Reimplemented from BaseInteractable.
References BaseInteractable::setOrientation(), and updateBoundingBoxGlobal().
void TriangleMeshWall::setPeriodicCompanions | ( | const std::vector< std::pair< unsigned, unsigned >> & | periodicCompanions | ) |
Sets the vector with pairs of indices of vertices which lie on a periodic boundary and are each others 'companion'. E.g. when moving one vertex, the other is also moved the same amount. A vertex can have multiple companions (when lying on multiple periodic boundaries) and those should be in the vector as multiple pairs.
periodicCompanions | Vector of pairs containing the companions. |
References periodicCompanions_.
Referenced by createParallelogramMesh(), and read().
|
overridevirtual |
Sets the position of this BaseInteractable.
Interpretation depends on which interactable is being considered See also BaseInteractable::getPosistion.
[in] | position | Reference to Vec3D storing the position of the particle. |
Reimplemented from BaseInteractable.
References BaseInteractable::setPosition(), and updateBoundingBoxGlobal().
void TriangleMeshWall::setSpecies | ( | const ParticleSpecies * | species | ) |
|
private |
Sets the local and global bounding boxes. This method should be called any time a vertex is updated in lab frame.
References boundingBoxMax_, boundingBoxMin_, constants::inf, Vec3D::max(), Vec3D::min(), updateBoundingBoxGlobal(), and vertices_.
Referenced by addToMesh(), moveVertex(), moveVerticesToMatchVolume(), read(), removeTriangle(), and set().
|
private |
Sets the global bounding box, using the bounding box in lab frame. This method should be called when there are changes in global frame, but not in lab frame. E.g. when calling setPosition().
References boundingBoxMax_, boundingBoxMaxGlobal_, boundingBoxMin_, boundingBoxMinGlobal_, BaseInteractable::getOrientation(), BaseInteractable::getPosition(), constants::inf, Vec3D::max(), Vec3D::min(), Quaternion::rotate(), Vec3D::X, Vec3D::Y, and Vec3D::Z.
Referenced by move(), rotate(), setOrientation(), setPosition(), and updateBoundingBox().
|
overridevirtual |
Writes a TriangleMeshWall to an output stream, for example a restart file.
Reimplemented from BaseWall.
Reimplemented in WearableTriangleMeshWall.
References periodicCompanions_, triangles_, vertices_, and BaseWall::write().
Referenced by WearableTriangleMeshWall::write().
|
overridevirtual |
adds extra information to the points and triangleStrips vectors needed to plot the wall in vtk format
points | Coordinates of the vertices of the triangulated surfaces (in the VTK file this is called POINTS) |
triangleStrips | Indices of three vertices forming one triangulated surface (in the VTK file this is called CELL) |
Reimplemented from BaseWall.
References BaseInteractable::getOrientation(), BaseInteractable::getPosition(), VTKContainer::points, rotate(), triangles_, VTKContainer::triangleStrips, and vertices_.
|
private |
Referenced by isWithinBoundingBox(), TriangleMeshWall(), updateBoundingBox(), and updateBoundingBoxGlobal().
|
private |
Referenced by isLocal(), TriangleMeshWall(), and updateBoundingBoxGlobal().
|
private |
Bounding box corners in lab frame and global frame. Used to speed up contact detection. HGrid uses the global frame min max.
Referenced by isWithinBoundingBox(), TriangleMeshWall(), updateBoundingBox(), and updateBoundingBoxGlobal().
|
private |
Referenced by isLocal(), TriangleMeshWall(), and updateBoundingBoxGlobal().
|
private |
Referenced by getPeriodicCompanions(), moveVerticesToMatchVolume(), removeTriangle(), setPeriodicCompanions(), TriangleMeshWall(), and write().
|
protected |
|
protected |