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

Signed distance field for a torus. More...

#include <EBGeometry_AnalyticDistanceFunctions.hpp>

Public Member Functions

 TorusSDF ()=default
 Default constructor. Constructs a torus centered at the origin with major radius 1 and minor radius 0.5.
 
 TorusSDF (const Vec3T< T > &a_center, const T &a_majorRadius, const T &a_minorRadius) noexcept
 Full constructor.
 
 TorusSDF (const TorusSDF &)=default
 Copy constructor.
 
 TorusSDF (TorusSDF &&)=default
 Move constructor.
 
TorusSDF & operator= (const TorusSDF &)=default
 Copy assignment.
 
TorusSDF & operator= (TorusSDF &&)=default
 Move assignment.
 
const Vec3T< T > & getCenter () const noexcept
 Get torus center.
 
Vec3T< T > & getCenter () noexcept
 Get torus center.
 
const T & getMajorRadius () const noexcept
 Get major radius.
 
T & getMajorRadius () noexcept
 Get major radius.
 
const T & getMinorRadius () const noexcept
 Get minor radius.
 
T & getMinorRadius () noexcept
 Get minor radius.
 
T signedDistance (const Vec3T< T > &a_point) const noexcept
 Signed distance function for the torus.
 
BoundingVolumes::AABBT< T > computeBoundingVolume () const noexcept
 The shape's axis-aligned bounding box.
 

Static Public Attributes

static constexpr DistanceQuality distanceQuality = DistanceQuality::Exact
 How far signedDistance() can be trusted as a distance: the Euclidean distance to the surface.
 

Protected Attributes

Vec3T< T > m_center = Vec3T<T>::zeros()
 Torus center.
 
T m_majorRadius = T(1)
 Major (ring) radius.
 
T m_minorRadius = T(0.5)
 Minor (tube) radius.
 

Detailed Description

template<class T>
class EBGeometry::TorusSDF< T >

Signed distance field for a torus.

The torus ring lies in the xz-plane, around an axis along y, and is centered at m_center. The major radius m_majorRadius is the distance from the torus center to the center-line of the tube; the minor radius m_minorRadius is the tube radius. The bounding box spans [center ± (majorRadius + minorRadius)] in x and z, and [center ± minorRadius] in y. The SDF is negative inside the tube and positive outside. The minor radius must be strictly less than the major radius; otherwise the tube would self-intersect at the torus center. By default the torus is centered at the origin with major radius 1 and minor radius 0.5.

Template Parameters
TFloating-point precision.

Constructor & Destructor Documentation

◆ TorusSDF()

template<class T >
EBGeometry::TorusSDF< T >::TorusSDF ( const Vec3T< T > &  a_center,
const T &  a_majorRadius,
const T &  a_minorRadius 
)
inlinenoexcept

Full constructor.

Parameters
[in]a_centerTorus center.
[in]a_majorRadiusMajor (ring) radius.
[in]a_minorRadiusMinor (tube) radius.

Member Function Documentation

◆ computeBoundingVolume()

template<class T >
BoundingVolumes::AABBT< T > EBGeometry::TorusSDF< T >::computeBoundingVolume ( ) const
inlinenoexcept

The shape's axis-aligned bounding box.

The ring plus the tube radius in x and z, the tube radius alone in y.

Returns
The bounding box.

◆ getCenter() [1/2]

template<class T >
const Vec3T< T > & EBGeometry::TorusSDF< T >::getCenter ( ) const
inlinenoexcept

Get torus center.

Returns
m_center

◆ getCenter() [2/2]

template<class T >
Vec3T< T > & EBGeometry::TorusSDF< T >::getCenter ( )
inlinenoexcept

Get torus center.

Returns
m_center

◆ getMajorRadius() [1/2]

template<class T >
const T & EBGeometry::TorusSDF< T >::getMajorRadius ( ) const
inlinenoexcept

Get major radius.

Returns
m_majorRadius

◆ getMajorRadius() [2/2]

template<class T >
T & EBGeometry::TorusSDF< T >::getMajorRadius ( )
inlinenoexcept

Get major radius.

Returns
m_majorRadius

◆ getMinorRadius() [1/2]

template<class T >
const T & EBGeometry::TorusSDF< T >::getMinorRadius ( ) const
inlinenoexcept

Get minor radius.

Returns
m_minorRadius

◆ getMinorRadius() [2/2]

template<class T >
T & EBGeometry::TorusSDF< T >::getMinorRadius ( )
inlinenoexcept

Get minor radius.

Returns
m_minorRadius

◆ operator=() [1/2]

template<class T >
TorusSDF & EBGeometry::TorusSDF< T >::operator= ( const TorusSDF< T > &  )
default

Copy assignment.

Returns
Reference to (*this).

◆ operator=() [2/2]

template<class T >
TorusSDF & EBGeometry::TorusSDF< T >::operator= ( TorusSDF< T > &&  )
default

Move assignment.

Returns
Reference to (*this).

◆ signedDistance()

template<class T >
T EBGeometry::TorusSDF< T >::signedDistance ( const Vec3T< T > &  a_point) const
inlinenoexcept

Signed distance function for the torus.

Parameters
[in]a_pointPosition.
Returns
Signed distance from a_point to the torus surface; negative inside the torus tube.

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