geomc 1.0
A c++ linear algebra template library
Public Types | Public Member Functions | Public Attributes | Static Public Attributes | Related Functions | List of all members
Extrusion< Shape > Class Template Reference

An axis-aligned extrusion of an arbitrary N-1 dimensional Convex shape. More...

#include <geomc/shape/Extrusion.h>

Inheritance diagram for Extrusion< Shape >:
Convex< Shape::elem_t, Shape::N+1, Extrusion< Shape > > RayIntersectable< Shape::elem_t, Shape::N+1, Extrusion< Shape > > Projectable< Shape::elem_t, Shape::N+1, Extrusion< Shape > > Bounded< T, _N, Derived > SdfEvaluable< T, N, Derived >

Public Types

typedef Shape::elem_t T
 The coordinate type of this Shape.
 
typedef PointType< Shape::elem_t, N >::point_t point_t
 
typedef T elem_t
 The coordinate type of this shape.
 

Public Member Functions

 Extrusion ()
 Construct a new extrusion with unit height.
 
 Extrusion (const Shape &base)
 Construct a new extrusion with cross section base and unit height.
 
 Extrusion (const Shape &base, const Rect< T, 1 > &height)
 Construct an extrusion with cross section base and height range height.
 
 Extrusion (const Shape &base, T h0, T h1)
 Construct an extrusion with cross section base, and height ranging between h0 and h1.
 
bool contains (Vec< T, N > p) const
 
T sdf (Vec< T, N > p) const
 
Vec< T, Nproject (Vec< T, N > p) const
 
Vec< T, Nconvex_support (Vec< T, N > d) const
 
Rect< T, Nbounds () const
 
Rect< T, 1 > intersect (const Ray< T, N > &r) const
 Ray/shape intersection.
 
point_t convex_support (point_t d) const
 Geometric convex support function. More...
 
bool intersects (const Convex< Shape::elem_t, N, Shape > &other) const
 Convex shape overlap test. More...
 
T sdf (Vec< T, N > p) const
 Signed distance function. More...
 
Vec< Shape::elem_t, Nnormal (Vec< Shape::elem_t, N > p) const
 Unit-length outward-facing direction. More...
 
Vec< Shape::elem_t, Nclip (Vec< Shape::elem_t, N > p) const
 Nearest point on the interior of the shape. More...
 
bool contains (Vec< T, N > p) const
 Shape-point overlap test. More...
 

Public Attributes

Shape base
 Cross-section of this extrusion at the h = 0 plane.
 
Rect< T, 1 > height
 Height range of this extrusion.
 

Static Public Attributes

static constexpr size_t N = Shape::N + 1
 The dimension of this Shape.
 

Related Functions

(Note that these are not member functions.)

template<typename Shape >
Extrusion< Shape > extrude (const Shape &s, typename Shape::elem_t h0, typename Shape::elem_t h1)
 Convenience function to extrude the shape s between heights h0 and h1 by wrapping s in the Extrusion template.
 

Detailed Description

template<typename Shape>
class geom::Extrusion< Shape >

An axis-aligned extrusion of an arbitrary N-1 dimensional Convex shape.

The first N-1 dimensions have cross-sections which are Shapes (e.g., Rect, Sphere, Frustum...). The shape is lofted "vertically" into the last dimension.

Example:

// initialize a cylinder of length and radius 1:
auto cylinder = Extrusion<Sphere<double,2>>(Sphere<double,2>(), Rect<double,1>(0,1));

Member Function Documentation

◆ clip()

Vec< Shape::elem_t , N > clip ( Vec< Shape::elem_t , N >  p) const
inlineinherited

Nearest point on the interior of the shape.

If p is on the interior of the shape, return p unaltered; otherwise orthogonally project p to the shape's surface.

◆ contains()

bool contains ( Vec< T, N >  p) const
inlineinherited

Shape-point overlap test.

Return true if the point p is on the surface or interior of the shape, false otherwise.

◆ convex_support()

point_t convex_support ( point_t  d) const
inlineinherited

Geometric convex support function.

Returns the point on the surface of this convex shape that is furthest along direction d (i.e., has the highest dot product with d).

All shapes which implement this function automatically support geometrical intersection tests with any other Convex object.

Parameters
dDirection along which to find a support plane.
Returns
A point on the surface of this convex shape.

◆ intersects()

bool intersects ( const Convex< Shape::elem_t , N, Shape > &  other) const
inlineinherited

Convex shape overlap test.

Returns
True if and only if this convex shape overlaps other; false otherwise.

◆ normal()

Vec< Shape::elem_t , N > normal ( Vec< Shape::elem_t , N >  p) const
inlineinherited

Unit-length outward-facing direction.

For any point, return the direction which points directly away from the nearest point on the shape, away from its interior.

This should be the same as the gradient of the sdf().

◆ project()

Vec< T, N > project ( Vec< T, N p) const
inline

Return the point p orthogonally projected onto the surface of the shape.

◆ sdf()

T sdf ( Vec< T, N >  p) const
inlineinherited

Signed distance function.

Compute a signed distance to the nearest surface point on the shape. Points on the exterior have positive value; points on the interior have negative value; surface points have sdf value 0.


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