AGX Dynamics 2.42.1.1
Loading...
Searching...
No Matches
agxUtil::PointCurve< T > Class Template Reference

Utility class curve defined by a set of points. More...

#include <PointCurve.h>

Classes

struct  Segment
 Segment data with begin and end point. More...
 
struct  SegmentationResult
 Result data of segmentation, PointCurve::findSegmentLength. More...
 
struct  SegmentPoint
 Segment point with current curve segment and a point on that segment with local and global time. More...
 

Public Types

using container_type = agx::Vector< value_type >
 
using SegmentationErrorCallback = std::function< agx::Real(const PointCurve &, const SegmentPoint &, const SegmentPoint &, SegmentType)>
 
using SegmentCallback = std::function< void(const Segment &, SegmentType)>
 
using SegmentPointCallback = std::function< void(const SegmentPoint &, const SegmentPoint &, SegmentType)>
 
using TransformCallback = std::function< void(value_type &)>
 
using value_type = T
 

Public Member Functions

 PointCurve ()
 Default constructor.
 
template<typename ContainerT >
 PointCurve (const ContainerT &container)
 Construct given any container.
 
template<typename ContainerT , typename TransformFunc >
 PointCurve (const ContainerT &container, TransformFunc func)
 Construct given any container and a transform function.
 
template<typename T2 >
void add (const T2 &point)
 Add new point to this curve.
 
agx::Real calculateLength () const
 
SegmentPoint evaluate (agx::Real time) const
 Evaluate at given time.
 
agx::Bool finalize ()
 When all points has been added this method has to be called to collect curve data for efficient manipulation/evaluation.
 
SegmentationResult findSegmentLength (agx::UInt numSegments, SegmentationErrorCallback errorFunction, agx::Real maxError, agx::Real segmentLengthTolerance=agx::Real(1.0E-6), agx::UInt maxNumIterations=100ul) const
 Uses Newton Raphson to minimize the error while dividing this curve into segments.
 
const container_typegetPoints () const
 
void reserve (size_t capacity)
 Reserves containers to given capacity.
 
void transform (TransformCallback callback)
 Transform points in this curve.
 
void traverse (SegmentCallback callback) const
 Traverse all segments.
 
void traverse (SegmentPointCallback callback, agx::Real segmentLength, agx::Real tolerance=agx::Real(1.0E-6)) const
 Traverses this curve and invokes callback with a segment of a given segment length.
 

Detailed Description

template<typename T>
class agxUtil::PointCurve< T >

Utility class curve defined by a set of points.

It's possible to iterate this curve point and segment wise. Main purpose is to be able to traverse this curve with a given segment length. It's also possible to find optimal segment length given desired number of segments.

Definition at line 41 of file PointCurve.h.

Member Typedef Documentation

◆ container_type

template<typename T >
using agxUtil::PointCurve< T >::container_type = agx::Vector<value_type>

Definition at line 45 of file PointCurve.h.

◆ SegmentationErrorCallback

template<typename T >
using agxUtil::PointCurve< T >::SegmentationErrorCallback = std::function<agx::Real( const PointCurve&, const SegmentPoint&, const SegmentPoint&, SegmentType )>

Definition at line 103 of file PointCurve.h.

◆ SegmentCallback

template<typename T >
using agxUtil::PointCurve< T >::SegmentCallback = std::function<void( const Segment&, SegmentType )>

Definition at line 101 of file PointCurve.h.

◆ SegmentPointCallback

template<typename T >
using agxUtil::PointCurve< T >::SegmentPointCallback = std::function<void( const SegmentPoint&, const SegmentPoint&, SegmentType )>

Definition at line 102 of file PointCurve.h.

◆ TransformCallback

template<typename T >
using agxUtil::PointCurve< T >::TransformCallback = std::function<void( value_type& )>

Definition at line 100 of file PointCurve.h.

◆ value_type

template<typename T >
using agxUtil::PointCurve< T >::value_type = T

Definition at line 44 of file PointCurve.h.

Constructor & Destructor Documentation

◆ PointCurve() [1/3]

template<typename T >
agxUtil::PointCurve< T >::PointCurve

Default constructor.

Definition at line 221 of file PointCurve.h.

◆ PointCurve() [2/3]

template<typename T >
template<typename ContainerT >
agxUtil::PointCurve< T >::PointCurve ( const ContainerT &  container)

Construct given any container.

The ContainerT::value_type must support cast to agx::Vec3.

Parameters
container- container with points

Definition at line 227 of file PointCurve.h.

◆ PointCurve() [3/3]

template<typename T >
template<typename ContainerT , typename TransformFunc >
agxUtil::PointCurve< T >::PointCurve ( const ContainerT &  container,
TransformFunc  func 
)

Construct given any container and a transform function.

The transform function transforms each ContainerT::value_type to this::value_type.

Parameters
container- container with points
func- transform function

Definition at line 236 of file PointCurve.h.

Member Function Documentation

◆ add()

template<typename T >
template<typename T2 >
void agxUtil::PointCurve< T >::add ( const T2 &  point)

Add new point to this curve.

Note
PointCurve::finalize has to be called when all additional points has been added.
Parameters
point- point to add

Definition at line 256 of file PointCurve.h.

◆ calculateLength()

template<typename T >
agx::Real agxUtil::PointCurve< T >::calculateLength
Returns
the total length of this curve

Definition at line 296 of file PointCurve.h.

◆ evaluate()

template<typename T >
PointCurve< T >::SegmentPoint agxUtil::PointCurve< T >::evaluate ( agx::Real  time) const

Evaluate at given time.

Time = 0 is the first point and time = 1 the last. If time < 0 or time > 1 the point is interpolated from the first or the last segment.

Parameters
time- time along this curve
Returns
segment point data

Definition at line 265 of file PointCurve.h.

References LOGGER_ENDL, and LOGGER_WARNING.

◆ finalize()

template<typename T >
agx::Bool agxUtil::PointCurve< T >::finalize

When all points has been added this method has to be called to collect curve data for efficient manipulation/evaluation.

Returns
true if successfully initialized

Definition at line 306 of file PointCurve.h.

References agx::RealEpsilon.

◆ findSegmentLength()

template<typename T >
PointCurve< T >::SegmentationResult agxUtil::PointCurve< T >::findSegmentLength ( agx::UInt  numSegments,
SegmentationErrorCallback  errorFunction,
agx::Real  maxError,
agx::Real  segmentLengthTolerance = agx::Real( 1.0E-6 ),
agx::UInt  maxNumIterations = 100ul 
) const

Uses Newton Raphson to minimize the error while dividing this curve into segments.

Parameters
numSegments- number of segments to divide this curve into
errorFunction- function which returns the error of each segment
maxError- algorithm is successful when the absolute value of the sum over errorFunction of all segments is less than this value
segmentLengthTolerance- segment length tolerance
maxNumIterations- maximum number of iterations before exiting
Returns
the resulting segment length with minimum error

Definition at line 391 of file PointCurve.h.

References agxUtil::PointCurve< T >::SegmentationResult::error, agxUtil::PointCurve< T >::SegmentationResult::numIterations, agxUtil::PointCurve< T >::SegmentationResult::numSegments, agx::REAL_SQRT_EPSILON, agx::RealEpsilon, and agxUtil::PointCurve< T >::SegmentationResult::segmentLength.

◆ getPoints()

template<typename T >
const PointCurve< T >::container_type & agxUtil::PointCurve< T >::getPoints
Returns
the points container

Definition at line 249 of file PointCurve.h.

◆ reserve()

template<typename T >
void agxUtil::PointCurve< T >::reserve ( size_t  capacity)

Reserves containers to given capacity.

Parameters
capacity- new capacity of the internal containers

Definition at line 243 of file PointCurve.h.

◆ transform()

template<typename T >
void agxUtil::PointCurve< T >::transform ( TransformCallback  callback)

Transform points in this curve.

Finalize will be executed after all points has been transformed.

Definition at line 326 of file PointCurve.h.

◆ traverse() [1/2]

template<typename T >
void agxUtil::PointCurve< T >::traverse ( SegmentCallback  callback) const

Traverse all segments.

Parameters
callback- function to call for each segment

◆ traverse() [2/2]

template<typename T >
void agxUtil::PointCurve< T >::traverse ( SegmentPointCallback  callback,
agx::Real  segmentLength,
agx::Real  tolerance = agx::Real(1.0E-6) 
) const

Traverses this curve and invokes callback with a segment of a given segment length.

Note that the curve might be longer or shorter at the end.

Parameters
callback- callback with two SegmentPoint defining a segment of length segmentLength
segmentLength- Length of the segment
tolerance- segment length tolerance

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