12#ifndef EBGEOMETRY_DCEL_FACE_HPP
13#define EBGEOMETRY_DCEL_FACE_HPP
52template <
class T,
class Meta>
55 static_assert(std::is_floating_point_v<T>,
"FaceT requires a floating-point T");
408 std::shared_ptr<Polygon2D<T>>
m_poly2 =
nullptr;
460#include "EBGeometry_DCEL_FaceImplem.hpp"
Declaration of a half-edge class for use in DCEL descriptions of polygon tessellations.
Declaration of a vertex class for use in DCEL descriptions of polygon tessellations.
Declaration of a two-dimensional polygon class for embedding 3D polygon faces.
Declaration of 2D and 3D point/vector classes with templated precision. Used with DCEL tools.
Face class for navigating a DCEL mesh.
Definition EBGeometry_DCEL_Face.hpp:54
Vec3 m_centroid
Polygon face centroid position.
Definition EBGeometry_DCEL_Face.hpp:389
void computeCentroid()
Compute the centroid position of this polygon.
std::shared_ptr< Polygon2D< T > > m_poly2
2D embedding of this polygon. This is the 2D view of the current object projected along its normal ve...
Definition EBGeometry_DCEL_Face.hpp:408
T signedDistance(const Vec3 &a_x0) const noexcept
Compute the signed distance to a point.
Vec3T< T > getSmallestCoordinate() const
Get the lower-left-most coordinate of this polygon face.
FaceT(Face &&a_otherFace)=default
Move constructor.
Vec3T< T > getHighestCoordinate() const
Get the upper-right-most coordinate of this polygon face.
std::shared_ptr< Face > FacePtr
Alias for face pointer type.
Definition EBGeometry_DCEL_Face.hpp:91
void flipNormal() noexcept
Flip the normal vector.
void setHalfEdge(const EdgePtr &a_halfEdge) noexcept
Set the half edge.
std::vector< Vec3T< T > > getAllVertexCoordinates() const
Return the coordinates of all the vertices on this polygon.
Meta m_metaData
Meta-data attached to this face.
Definition EBGeometry_DCEL_Face.hpp:397
void computePolygon2D()
Compute the 2D embedding of this polygon from the current normal vector and topology,...
std::shared_ptr< Edge > EdgePtr
Alias for edge pointer type.
Definition EBGeometry_DCEL_Face.hpp:86
Face & operator=(Face &&a_otherFace)=default
Move assignment operator.
void setInsideOutsideAlgorithm(typename Polygon2D< T >::InsideOutsideAlgorithm &a_algorithm) noexcept
Set the inside/outside algorithm when determining if a point projects to the inside or outside of the...
void normalizeNormalVector() noexcept
Normalize the normal vector, ensuring it has a length of 1.
Polygon2D< T >::InsideOutsideAlgorithm m_poly2Algorithm
Algorithm for inside/outside tests.
Definition EBGeometry_DCEL_Face.hpp:413
void reconcile()
Reconcile face. This will compute the normal vector, area, centroid, and the 2D embedding of the poly...
std::weak_ptr< Edge > m_halfEdge
This polygon's half-edge. A valid face will always have this set.
Definition EBGeometry_DCEL_Face.hpp:379
bool isPointInsideFace(const Vec3 &a_p) const noexcept
Check if a point projects to inside or outside the polygon face.
void computeNormal()
Compute the normal position of this polygon.
Face & operator=(const Face &a_otherFace) noexcept
Copy assignment operator.
Vec3T< T > & getCentroid() noexcept
Get modifiable centroid.
T m_area
Cached polygon face area (stored by reconcile()).
Definition EBGeometry_DCEL_Face.hpp:402
FaceT(const EdgePtr &a_edge)
Partial constructor. Calls default constructor but associates a half-edge.
std::shared_ptr< Vertex > VertexPtr
Alias for vertex pointer type.
Definition EBGeometry_DCEL_Face.hpp:81
void setMetaData(const Meta &a_metaData) noexcept
Set the meta-data.
T unsignedDistance2(const Vec3 &a_x0) const noexcept
Compute the unsigned squared distance to a point.
std::vector< EdgePtr > gatherEdges() const
Return all the half-edges on this polygon.
void define(const Vec3 &a_normal, const EdgePtr &a_edge) noexcept
Define function which sets the normal vector and half-edge.
FaceT(const Face &a_otherFace)
Copy constructor.
EdgePtr getHalfEdge() noexcept
Get the starting half-edge.
Meta & getMetaData() noexcept
Get meta-data.
Vec3 m_normal
Polygon face normal vector.
Definition EBGeometry_DCEL_Face.hpp:384
~FaceT()=default
Destructor (does nothing)
T & getArea() noexcept
Get modifiable polygon area (computed during reconcile()).
Vec3T< T > & getNormal() noexcept
Get modifiable normal vector.
void computeArea()
Compute the area of this polygon and cache it in m_area.
Vec3T< T > projectPointIntoFacePlane(const Vec3 &a_p) const noexcept
Compute the projection of a point onto the polygon face plane.
std::vector< VertexPtr > gatherVertices() const
Return all the vertices on this polygon.
FaceT()=default
Default constructor. Sets the half-edge to zero and the inside/outside algorithm to crossing number a...
Class for embedding a polygon face into 2D.
Definition EBGeometry_Polygon2D.hpp:46
InsideOutsideAlgorithm
Supported algorithms for performing inside/outside tests when checking if a point projects to the ins...
Definition EBGeometry_Polygon2D.hpp:55
Three-dimensional vector class with arithmetic operators.
Definition EBGeometry_Vec.hpp:225
Namespace containing all of EBGeometry's functionality.
Definition EBGeometry_AnalyticDistanceFunctions.hpp:31