EBGeometry
Compact, header-only C++ library for fast evaluation of signed distance functions
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
EBGeometry::DCEL::FaceT< T > Class Template Reference

Face class for navigating a DCEL mesh. More...

#include <EBGeometry_DCEL_Face.hpp>

Public Types

using Vec3 = Vec3T< T >
 Alias for vector type.
 
using Vertex = VertexT< T >
 Alias for vertex type.
 
using Edge = EdgeT< T >
 Alias for edge type.
 
using Face = FaceT< T >
 Alias for face type.
 
using Mesh = MeshT< T >
 Alias for mesh type.
 
using EdgeIterator = EdgeIteratorT< T >
 Alias for edge iterator.
 

Public Member Functions

 FaceT ()=default
 Default constructor. Sets the half-edge index to the unset sentinel and the inside/outside algorithm to crossing number algorithm.
 
 FaceT (const uint32_t a_edgeIndex)
 Partial constructor. Calls default constructor but associates a half-edge.
 
 FaceT (const Face &a_otherFace)=default
 Copy constructor.
 
 FaceT (Face &&a_otherFace)=default
 Move constructor.
 
 ~FaceT ()=default
 Destructor (does nothing)
 
Face & operator= (const Face &a_otherFace)=default
 Copy assignment operator.
 
Face & operator= (Face &&a_otherFace)=default
 Move assignment operator.
 
void define (const Vec3 &a_normal, const uint32_t a_edgeIndex) noexcept
 Define function which sets the normal vector and half-edge index.
 
void reconcile (const Mesh &a_mesh)
 Reconcile face. This will compute the normal vector, area, centroid, and the 2D embedding of the polygon.
 
void computeProjectionDirections () noexcept
 Compute the 2D embedding of this polygon from the current normal vector and topology, without touching the normal vector, centroid, or area.
 
void flipNormal () noexcept
 Flip the normal vector.
 
void setHalfEdge (const uint32_t a_halfEdgeIndex) noexcept
 Set the half edge index.
 
void setInsideOutsideAlgorithm (InsideOutsideAlgorithm a_algorithm) noexcept
 Set the inside/outside algorithm when determining if a point projects to the inside or outside of the polygon.
 
uint32_t getHalfEdgeIndex () const noexcept
 Get the index of the starting half-edge.
 
Vec3T< T > & getCentroid () noexcept
 Get modifiable centroid.
 
const Vec3T< T > & getCentroid () const noexcept
 Get immutable centroid.
 
T & getCentroid (const size_t a_dir) noexcept
 Get modifiable centroid position in specified coordinate direction.
 
const T & getCentroid (const size_t a_dir) const noexcept
 Get immutable centroid position in specified coordinate direction.
 
Vec3T< T > & getNormal () noexcept
 Get modifiable normal vector.
 
const Vec3T< T > & getNormal () const noexcept
 Get immutable normal vector.
 
T & getArea () noexcept
 Get modifiable polygon area (computed during reconcile()).
 
const T & getArea () const noexcept
 Get immutable polygon area (computed during reconcile()).
 
T signedDistance (const Vec3 &a_x0, const Mesh &a_mesh) const noexcept
 Compute the signed distance to a point.
 
T rayCrossing (const Vec3 &a_origin, const Vec3 &a_direction, T a_tMin, T a_tMax, const Mesh &a_mesh) const noexcept
 Where a ray crosses the face, from either side.
 
T unsignedDistance2 (const Vec3 &a_x0, const Mesh &a_mesh) const noexcept
 Compute the unsigned squared distance to a point.
 
std::vector< Vec3T< T > > getAllVertexCoordinates (const Mesh &a_mesh) const
 Return the coordinates of all the vertices on this polygon.
 
std::vector< uint32_t > gatherVertexIndices (const Mesh &a_mesh) const
 Return the indices of all the vertices on this polygon.
 
std::vector< uint32_t > gatherEdgeIndices (const Mesh &a_mesh) const
 Return the indices of all the half-edges on this polygon.
 
Vec3T< T > getSmallestCoordinate (const Mesh &a_mesh) const noexcept
 Get the lower-left-most coordinate of this polygon face.
 
Vec3T< T > getHighestCoordinate (const Mesh &a_mesh) const noexcept
 Get the upper-right-most coordinate of this polygon face.
 

Protected Member Functions

void computeCentroid (const Mesh &a_mesh)
 Compute the centroid position of this polygon.
 
void computeNormal (const Mesh &a_mesh)
 Compute the unit normal vector of this polygon (Newell's method).
 
void computeArea (const Mesh &a_mesh)
 Compute the area of this polygon and cache it in m_area.
 
void normalizeNormalVector () noexcept
 Normalize the normal vector, ensuring it has a length of 1.
 
Vec3T< T > projectPointIntoFacePlane (const Vec3 &a_p) const noexcept
 Compute the projection of a point onto the polygon face plane.
 
bool isPointInsideFace (const Vec3 &a_p, const Mesh &a_mesh) const noexcept
 Check if a point projects to inside or outside the polygon face.
 
Vec2T< T > projectPoint (const Vec3 &a_point) const noexcept
 Project a 3D point to this face's 2D embedding by dropping one coordinate.
 
int computeWindingNumber (const Vec2T< T > &a_point, const Mesh &a_mesh) const noexcept
 Compute the winding number of this polygon's boundary around a projected 2D point.
 
size_t computeCrossingNumber (const Vec2T< T > &a_point, const Mesh &a_mesh) const noexcept
 Compute the crossing number of a +x ray from a projected 2D point with this polygon.
 
T computeSubtendedAngle (const Vec2T< T > &a_point, const Mesh &a_mesh) const noexcept
 Compute the total subtended angle of this polygon's edges around a projected 2D point.
 

Protected Attributes

uint32_t m_halfEdge = UINT32_MAX
 This polygon's half-edge index. A valid face will always have this set.
 
Vec3 m_normal = Vec3::zeros()
 Polygon face normal vector.
 
Vec3 m_centroid = Vec3::zeros()
 Polygon face centroid position.
 
T m_area {T(0)}
 Cached polygon face area (stored by reconcile()).
 
uint32_t m_xDir = UINT32_MAX
 Cartesian axis used as the 2D x-direction of this polygon's 2D embedding (stored by reconcile()). The inside/outside test projects points to 2D by keeping (m_xDir, m_yDir) and dropping the coordinate of the largest normal component.
 
uint32_t m_yDir = UINT32_MAX
 Cartesian axis used as the 2D y-direction of this polygon's 2D embedding (stored by reconcile()).
 
InsideOutsideAlgorithm m_insideOutsideAlgorithm = InsideOutsideAlgorithm::CrossingNumber
 Algorithm for inside/outside tests.
 

Detailed Description

template<class T>
class EBGeometry::DCEL::FaceT< T >

Face class for navigating a DCEL mesh.

Class which represents a polygon face in a doubly-connected edge list (DCEL).

Template Parameters
TFloating-point precision type.

This class is a polygon face in a DCEL mesh. It stores the index of one of the half-edges that circulate the inside of the polygon face, as well as having a normal vector, a centroid, and an area. This class supports signed distance computations. These computations require algorithms that compute e.g. the winding number of the polygon, or the number of times a ray cast passes through it. Thus, one of its central features is that it can be embedded in 2D by projecting it along the cardinal direction of its normal vector.

Note
To compute the distance from a point to the face one must determine if the point projects "inside" or "outside" the polygon. There are several algorithms for this, and by default this class uses a crossing number algorithm.
m_halfEdge is an index into the owning DCEL::MeshT's own edge array, resolved by passing that mesh to the accessors below (see EdgeT for why indices rather than pointers are used). Every other member is a plain value (Vec3, T, uint32_t, an enum), so FaceT itself is trivially copyable – it can be memcpy'd or mirrored to a different address space with no pointer patching, as long as it is interpreted against the same mesh's arrays on the other side.
A face's id is its index in the owning mesh's face array; the mesh SDFs report it from getClosestFace(). Per-face data such as a material lives in the caller's own array, indexed by it.
Methods that stream through the half-edge loop via EdgeIterator with no allocation (define, reconcile's helpers other than computeCentroid/computeNormal/computeArea, computeProjectionDirections, flipNormal, setHalfEdge/setInsideOutsideAlgorithm, normalizeNormalVector, the getters, projectPointIntoFacePlane/projectPoint, computeWindingNumber/computeCrossingNumber/computeSubtendedAngle, isPointInsideFace, signedDistance, rayCrossing, unsignedDistance2, getSmallestCoordinate/getHighestCoordinate) are annotated EBGEOMETRY_HOST_DEVICE. computeCentroid/computeNormal/computeArea (and therefore reconcile, which calls all three) and gatherVertexIndices/gatherEdgeIndices/getAllVertexCoordinates all materialize a std::vector, so they remain EBGEOMETRY_HOST.
Template Parameters
TFloating-point precision type.

Constructor & Destructor Documentation

◆ FaceT() [1/3]

template<class T >
EBGeometry::DCEL::FaceT< T >::FaceT ( const uint32_t  a_edgeIndex)

Partial constructor. Calls default constructor but associates a half-edge.

Parameters
[in]a_edgeIndexIndex of the half-edge in the owning mesh's edge array.

◆ FaceT() [2/3]

template<class T >
EBGeometry::DCEL::FaceT< T >::FaceT ( const Face &  a_otherFace)
default

Copy constructor.

Defaulted memberwise copy: every member is a plain value (see the class-level note), so the copy is immediately usable for a point-in-face test against the same mesh the source face belonged to.

Parameters
[in]a_otherFaceOther face to copy from.

◆ FaceT() [3/3]

template<class T >
EBGeometry::DCEL::FaceT< T >::FaceT ( Face &&  a_otherFace)
default

Move constructor.

Defaulted memberwise move; equivalent to the copy constructor since every member is a plain value.

Parameters
[in,out]a_otherFaceOther face.

Member Function Documentation

◆ computeArea()

template<class T >
void EBGeometry::DCEL::FaceT< T >::computeArea ( const Mesh &  a_mesh)
inlineprotected

Compute the area of this polygon and cache it in m_area.

Parameters
[in]a_meshOwning mesh, used to resolve the half-edge loop.

◆ computeCentroid()

template<class T >
void EBGeometry::DCEL::FaceT< T >::computeCentroid ( const Mesh &  a_mesh)
inlineprotected

Compute the centroid position of this polygon.

Parameters
[in]a_meshOwning mesh, used to resolve the half-edge loop.

◆ computeCrossingNumber()

template<class T >
size_t EBGeometry::DCEL::FaceT< T >::computeCrossingNumber ( const Vec2T< T > &  a_point,
const Mesh &  a_mesh 
) const
inlineprotectednoexcept

Compute the crossing number of a +x ray from a projected 2D point with this polygon.

Walks the face's half-edge loop, projecting each vertex on the fly.

Parameters
[in]a_pointProjected 2D query point.
[in]a_meshOwning mesh, used to resolve the half-edge loop.
Returns
The crossing number.

◆ computeNormal()

template<class T >
void EBGeometry::DCEL::FaceT< T >::computeNormal ( const Mesh &  a_mesh)
inlineprotected

Compute the unit normal vector of this polygon (Newell's method).

A zero-area face (collinear or coincident vertices) gets a zero normal rather than a NaN. A face with fewer than 3 vertices aborts with a message in every build.

Parameters
[in]a_meshOwning mesh, used to resolve the half-edge loop.

◆ computeProjectionDirections()

template<class T >
void EBGeometry::DCEL::FaceT< T >::computeProjectionDirections ( )
inlinenoexcept

Compute the 2D embedding of this polygon from the current normal vector and topology, without touching the normal vector, centroid, or area.

Unlike reconcile(), this does not recompute the normal vector, so it is safe to call after manually restoring a normal vector (e.g. when deep-copying a face and preserving whatever normal it had, including one set via flipNormal()) without having that normal silently overwritten by a geometrically-derived one.

◆ computeSubtendedAngle()

template<class T >
T EBGeometry::DCEL::FaceT< T >::computeSubtendedAngle ( const Vec2T< T > &  a_point,
const Mesh &  a_mesh 
) const
inlineprotectednoexcept

Compute the total subtended angle of this polygon's edges around a projected 2D point.

Walks the face's half-edge loop, projecting each vertex on the fly.

Parameters
[in]a_pointProjected 2D query point.
[in]a_meshOwning mesh, used to resolve the half-edge loop.
Returns
The subtended angle (+-2*pi for an interior point, 0 for an exterior one).

◆ computeWindingNumber()

template<class T >
int EBGeometry::DCEL::FaceT< T >::computeWindingNumber ( const Vec2T< T > &  a_point,
const Mesh &  a_mesh 
) const
inlineprotectednoexcept

Compute the winding number of this polygon's boundary around a projected 2D point.

Walks the face's half-edge loop, projecting each vertex on the fly.

Parameters
[in]a_pointProjected 2D query point.
[in]a_meshOwning mesh, used to resolve the half-edge loop.
Returns
The winding number.

◆ define()

template<class T >
void EBGeometry::DCEL::FaceT< T >::define ( const Vec3 &  a_normal,
const uint32_t  a_edgeIndex 
)
inlinenoexcept

Define function which sets the normal vector and half-edge index.

Parameters
[in]a_normalNormal vector
[in]a_edgeIndexIndex of the half-edge in the owning mesh's edge array.

◆ gatherEdgeIndices()

template<class T >
std::vector< uint32_t > EBGeometry::DCEL::FaceT< T >::gatherEdgeIndices ( const Mesh &  a_mesh) const
inline

Return the indices of all the half-edges on this polygon.

Parameters
[in]a_meshOwning mesh, used to resolve the half-edge loop.

This builds a list of all the edge indices and returns it.

Returns
Vector of indices, into the owning mesh's edge array, of all half-edges on this polygon.

◆ gatherVertexIndices()

template<class T >
std::vector< uint32_t > EBGeometry::DCEL::FaceT< T >::gatherVertexIndices ( const Mesh &  a_mesh) const
inline

Return the indices of all the vertices on this polygon.

Parameters
[in]a_meshOwning mesh, used to resolve the half-edge loop.

This builds a list of all the vertex indices and returns it.

Returns
Vector of indices, into the owning mesh's vertex array, of all vertices on this polygon.

◆ getAllVertexCoordinates()

template<class T >
std::vector< Vec3T< T > > EBGeometry::DCEL::FaceT< T >::getAllVertexCoordinates ( const Mesh &  a_mesh) const
inline

Return the coordinates of all the vertices on this polygon.

Parameters
[in]a_meshOwning mesh, used to resolve the half-edge loop.

This builds a list of all the vertex coordinates and returns it.

Returns
Vector of 3D coordinates of all vertices on this polygon.

◆ getArea() [1/2]

template<class T >
const T & EBGeometry::DCEL::FaceT< T >::getArea ( ) const
inlinenoexcept

Get immutable polygon area (computed during reconcile()).

Returns
Const reference to m_area.

◆ getArea() [2/2]

template<class T >
T & EBGeometry::DCEL::FaceT< T >::getArea ( )
inlinenoexcept

Get modifiable polygon area (computed during reconcile()).

Returns
Reference to m_area.

◆ getCentroid() [1/4]

template<class T >
const Vec3T< T > & EBGeometry::DCEL::FaceT< T >::getCentroid ( ) const
inlinenoexcept

Get immutable centroid.

Returns
Const reference to the centroid vector.

◆ getCentroid() [2/4]

template<class T >
Vec3T< T > & EBGeometry::DCEL::FaceT< T >::getCentroid ( )
inlinenoexcept

Get modifiable centroid.

Returns
Reference to the centroid vector.

◆ getCentroid() [3/4]

template<class T >
const T & EBGeometry::DCEL::FaceT< T >::getCentroid ( const size_t  a_dir) const
inlinenoexcept

Get immutable centroid position in specified coordinate direction.

Parameters
[in]a_dirCoordinate direction
Returns
Const reference to the a_dir-th coordinate of the centroid.

◆ getCentroid() [4/4]

template<class T >
T & EBGeometry::DCEL::FaceT< T >::getCentroid ( const size_t  a_dir)
inlinenoexcept

Get modifiable centroid position in specified coordinate direction.

Parameters
[in]a_dirCoordinate direction
Returns
Reference to the a_dir-th coordinate of the centroid.

◆ getHalfEdgeIndex()

template<class T >
uint32_t EBGeometry::DCEL::FaceT< T >::getHalfEdgeIndex ( ) const
inlinenoexcept

Get the index of the starting half-edge.

Returns
Index of the half-edge in the owning mesh's edge array, or UINT32_MAX if unset.

◆ getHighestCoordinate()

template<class T >
Vec3T< T > EBGeometry::DCEL::FaceT< T >::getHighestCoordinate ( const Mesh &  a_mesh) const
inlinenoexcept

Get the upper-right-most coordinate of this polygon face.

Streams the half-edge loop and reduces componentwise, rather than going through getAllVertexCoordinates(), so that no std::vector is materialized and the function stays callable from device code.

Parameters
[in]a_meshOwning mesh, used to resolve the half-edge loop.
Returns
Upper-right-most coordinate of this polygon face.

◆ getNormal() [1/2]

template<class T >
const Vec3T< T > & EBGeometry::DCEL::FaceT< T >::getNormal ( ) const
inlinenoexcept

Get immutable normal vector.

Returns
Const reference to the normal vector.

◆ getNormal() [2/2]

template<class T >
Vec3T< T > & EBGeometry::DCEL::FaceT< T >::getNormal ( )
inlinenoexcept

Get modifiable normal vector.

Returns
Reference to the normal vector.

◆ getSmallestCoordinate()

template<class T >
Vec3T< T > EBGeometry::DCEL::FaceT< T >::getSmallestCoordinate ( const Mesh &  a_mesh) const
inlinenoexcept

Get the lower-left-most coordinate of this polygon face.

Streams the half-edge loop and reduces componentwise, rather than going through getAllVertexCoordinates(), so that no std::vector is materialized and the function stays callable from device code.

Parameters
[in]a_meshOwning mesh, used to resolve the half-edge loop.
Returns
Lower-left-most coordinate of this polygon face.

◆ isPointInsideFace()

template<class T >
bool EBGeometry::DCEL::FaceT< T >::isPointInsideFace ( const Vec3 &  a_p,
const Mesh &  a_mesh 
) const
inlineprotectednoexcept

Check if a point projects to inside or outside the polygon face.

Parameters
[in]a_pPoint in space
[in]a_meshOwning mesh, used to resolve the half-edge loop.
Returns
Returns true if a_p projects to inside the polygon and false otherwise.

◆ normalizeNormalVector()

template<class T >
void EBGeometry::DCEL::FaceT< T >::normalizeNormalVector ( )
inlineprotectednoexcept

Normalize the normal vector, ensuring it has a length of 1.

A zero normal (a zero-area face) is left zero.

◆ operator=() [1/2]

template<class T >
Face & EBGeometry::DCEL::FaceT< T >::operator= ( const Face &  a_otherFace)
default

Copy assignment operator.

Defaulted memberwise copy; see the copy constructor's documentation.

Parameters
[in]a_otherFaceOther face.
Returns
Reference to (*this).

◆ operator=() [2/2]

template<class T >
Face & EBGeometry::DCEL::FaceT< T >::operator= ( Face &&  a_otherFace)
default

Move assignment operator.

Defaulted memberwise move; equivalent to copy assignment since every member is a plain value.

Parameters
[in,out]a_otherFaceOther face.
Returns
Reference to (*this).

◆ projectPoint()

template<class T >
Vec2T< T > EBGeometry::DCEL::FaceT< T >::projectPoint ( const Vec3 &  a_point) const
inlineprotectednoexcept

Project a 3D point to this face's 2D embedding by dropping one coordinate.

Parameters
[in]a_point3D point.
Returns
The 2D point (a_point[m_xDir], a_point[m_yDir]).

◆ projectPointIntoFacePlane()

template<class T >
Vec3T< T > EBGeometry::DCEL::FaceT< T >::projectPointIntoFacePlane ( const Vec3 &  a_p) const
inlineprotectednoexcept

Compute the projection of a point onto the polygon face plane.

Parameters
[in]a_pPoint in space
Returns
Projected point in the face plane.

◆ rayCrossing()

template<class T >
T EBGeometry::DCEL::FaceT< T >::rayCrossing ( const Vec3 &  a_origin,
const Vec3 &  a_direction,
T  a_tMin,
T  a_tMax,
const Mesh &  a_mesh 
) const
inlinenoexcept

Where a ray crosses the face, from either side.

The ray is a_origin + t * a_direction. The face is taken to be planar and convex, as the mesh SDFs require: the ray meets the face's plane at one t, and that point is inside the face if it is on the inner side of every edge (which side that is, the loop's orientation about the normal says). The edge tests are widened by the rounding error of that point, a distance of a few ulps of the coordinates and of t, so that a ray through an edge or vertex shared by two faces crosses at least one of them however far it comes from; a point counted that way must also be that close to the edge's extent, so that a sliver is not crossed far beyond its corners. A ray in the face's plane, or a face of zero area, crosses nothing. The plane is the one through the face's centroid with its normal: for a face that is not quite planar, a ray nearly in it can cross at a t that differs from the vertices' by the face's deviation from planarity.

Parameters
[in]a_originRay origin.
[in]a_directionRay direction.
[in]a_tMinStart of the interval.
[in]a_tMaxEnd of the interval.
[in]a_meshOwning mesh, used to resolve the half-edge loop.
Returns
The distance along the ray of the crossing in [a_tMin, a_tMax], or +infinity if there is none.

◆ reconcile()

template<class T >
void EBGeometry::DCEL::FaceT< T >::reconcile ( const Mesh &  a_mesh)
inline

Reconcile face. This will compute the normal vector, area, centroid, and the 2D embedding of the polygon.

Parameters
[in]a_meshOwning mesh, used to resolve the half-edge loop.
Note
"Everything" must be set before doing this, i.e. the face must be complete with half edges and there can be no dangling edges. A face with fewer than 3 vertices aborts with a message in every build; a zero-area face gets a zero normal.

◆ setHalfEdge()

template<class T >
void EBGeometry::DCEL::FaceT< T >::setHalfEdge ( const uint32_t  a_halfEdgeIndex)
inlinenoexcept

Set the half edge index.

Parameters
[in]a_halfEdgeIndexIndex of the half-edge in the owning mesh's edge array, or UINT32_MAX to mark it unset.

◆ setInsideOutsideAlgorithm()

template<class T >
void EBGeometry::DCEL::FaceT< T >::setInsideOutsideAlgorithm ( InsideOutsideAlgorithm  a_algorithm)
inlinenoexcept

Set the inside/outside algorithm when determining if a point projects to the inside or outside of the polygon.

Parameters
[in]a_algorithmDesired algorithm

◆ signedDistance()

template<class T >
T EBGeometry::DCEL::FaceT< T >::signedDistance ( const Vec3 &  a_x0,
const Mesh &  a_mesh 
) const
inlinenoexcept

Compute the signed distance to a point.

Parameters
[in]a_x0Point in space
[in]a_meshOwning mesh, used to resolve the half-edge loop.

This algorithm operates by checking if the input point projects to the inside of the polygon. If it does then the distance is just the projected distance onto the polygon plane and the sign is well-defined. Otherwise, we check the distance to the edges of the polygon.

Returns
Signed distance to the face; sign determined by normal direction.

◆ unsignedDistance2()

template<class T >
T EBGeometry::DCEL::FaceT< T >::unsignedDistance2 ( const Vec3 &  a_x0,
const Mesh &  a_mesh 
) const
inlinenoexcept

Compute the unsigned squared distance to a point.

Parameters
[in]a_x0Point in space
[in]a_meshOwning mesh, used to resolve the half-edge loop.

This algorithm operates by checking if the input point projects to the inside of the polygon. If it does then the distance is just the projected distance onto the polygon plane. Otherwise, we check the distance to the edges of the polygon.

Returns
Squared unsigned distance to the face.

Member Data Documentation

◆ m_halfEdge

template<class T >
uint32_t EBGeometry::DCEL::FaceT< T >::m_halfEdge = UINT32_MAX
protected

This polygon's half-edge index. A valid face will always have this set.

Index into the owning DCEL::MeshT's edge array, or UINT32_MAX if unset.

◆ m_xDir

template<class T >
uint32_t EBGeometry::DCEL::FaceT< T >::m_xDir = UINT32_MAX
protected

Cartesian axis used as the 2D x-direction of this polygon's 2D embedding (stored by reconcile()). The inside/outside test projects points to 2D by keeping (m_xDir, m_yDir) and dropping the coordinate of the largest normal component.

Defaults to the out-of-range sentinel UINT32_MAX rather than a valid axis (0-2) so that a face used before reconcile()/computeProjectionDirections() has run trips the m_xDir < 3 assertions in projectPoint() and isPointInsideFace() instead of silently projecting onto axis 0.

◆ m_yDir

template<class T >
uint32_t EBGeometry::DCEL::FaceT< T >::m_yDir = UINT32_MAX
protected

Cartesian axis used as the 2D y-direction of this polygon's 2D embedding (stored by reconcile()).

Defaults to the out-of-range sentinel UINT32_MAX for the same reason as m_xDir.


The documentation for this class was generated from the following files: