HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
TsSpline Class Reference

#include <spline.h>

Public Member Functions

template<>
TS_API bool _Eval (const TsTime time, VtValue *const valueOut, const Ts_EvalAspect aspect, const Ts_EvalLocation location) const
 
Construction and value semantics

This is a lightweight class that wraps a shared pointer. It is intended to be used as a value type, and copied freely. Move semantics are not implemented; there would be no benefit.

TS_API TsSpline ()
 
TS_API TsSpline (TfType valueType)
 Creates a spline with a specified value type. More...
 
TS_API TsSpline (const TsSpline &other)
 
TS_API TsSplineoperator= (const TsSpline &other)
 
TS_API bool operator== (const TsSpline &other) const
 
TS_API bool operator!= (const TsSpline &other) const
 
Curve types
TS_API void SetCurveType (TsCurveType curveType)
 
TS_API TsCurveType GetCurveType () const
 
Extrapolation
TS_API void SetPreExtrapolation (const TsExtrapolation &extrap)
 
TS_API TsExtrapolation GetPreExtrapolation () const
 
TS_API void SetPostExtrapolation (const TsExtrapolation &extrap)
 
TS_API TsExtrapolation GetPostExtrapolation () const
 
Inner loops

Loop params are only valid when all of the following are true:

  • protoEnd > protoStart.
  • At least one of numPreLoops or numPostLoops is nonzero and positive.
  • There is a knot at protoStart.

Any loop params may be set, and will be stored. Whenever the above conditions are not met, the stored params will be ignored.

To determine if loop params are currently valid, call HasInnerLoops.

To disable inner loops, call SetInnerLoopParams(TsLoopParams()).

TS_API void SetInnerLoopParams (const TsLoopParams &params)
 
TS_API TsLoopParams GetInnerLoopParams () const
 
Knots
TS_API void SetKnots (const TsKnotMap &knots)
 
TS_API bool CanSetKnot (const TsKnot &knot, std::string *reasonOut=nullptr) const
 
TS_API bool SetKnot (const TsKnot &knot, GfInterval *affectedIntervalOut=nullptr)
 
TS_API TsKnotMap GetKnots () const
 
TS_API bool GetKnot (TsTime time, TsKnot *knotOut) const
 
Removing knots
TS_API void ClearKnots ()
 
TS_API void RemoveKnot (TsTime time, GfInterval *affectedIntervalOut=nullptr)
 
TS_API bool ClearRedundantKnots (VtValue defaultValue=VtValue(), const GfInterval &interval=GfInterval::GetFullInterval())
 Not yet implemented. More...
 
Loop baking
TS_API bool BakeLoops (const GfInterval &interval)
 Not yet implemented. More...
 
TS_API const TsKnotMapGetKnotsWithInnerLoopsBaked () const
 Not yet implemented. More...
 
TS_API const TsKnotMapGetKnotsWithLoopsBaked (const GfInterval &interval) const
 Not yet implemented. More...
 
Splitting
TS_API bool Split (TsTime time, GfInterval *affectedIntervalOut=nullptr)
 
Evaluation

In all of these templated methods, the T parameter may be the value type of the spline (double/float/GfHalf), or VtValue.

template<typename T >
bool Eval (TsTime time, T *valueOut) const
 Evaluates the value of the TsSpline over the given time interval, typically for drawing. More...
 
template<typename T >
bool EvalPreValue (TsTime time, T *valueOut) const
 Evaluates the value of the TsSpline over the given time interval, typically for drawing. More...
 
template<typename T >
bool EvalDerivative (TsTime time, T *valueOut) const
 Evaluates the value of the TsSpline over the given time interval, typically for drawing. More...
 
template<typename T >
bool EvalPreDerivative (TsTime time, T *valueOut) const
 Evaluates the value of the TsSpline over the given time interval, typically for drawing. More...
 
template<typename T >
bool EvalHeld (TsTime time, T *valueOut) const
 Evaluates the value of the TsSpline over the given time interval, typically for drawing. More...
 
template<typename T >
bool EvalPreValueHeld (TsTime time, T *valueOut) const
 Evaluates the value of the TsSpline over the given time interval, typically for drawing. More...
 
TS_API bool DoSidesDiffer (TsTime time) const
 Evaluates the value of the TsSpline over the given time interval, typically for drawing. More...
 
template<typename Vertex >
bool Sample (const GfInterval &timeInterval, double timeScale, double valueScale, double tolerance, TsSplineSamples< Vertex > *splineSamples) const
 Evaluates the value of the TsSpline over the given time interval, typically for drawing. More...
 
template<typename Vertex >
bool Sample (const GfInterval &timeInterval, double timeScale, double valueScale, double tolerance, TsSplineSamplesWithSources< Vertex > *splineSamples) const
 
Whole-spline queries
TS_API bool IsEmpty () const
 Not yet implemented. More...
 
TS_API bool HasValueBlocks () const
 Not yet implemented. More...
 
TS_API bool IsVarying () const
 Not yet implemented. More...
 
TS_API bool HasLoops () const
 Convenience for HasInnerLoops() || HasExtrapolatingLoops(). More...
 
TS_API bool HasInnerLoops () const
 Not yet implemented. More...
 
TS_API bool HasExtrapolatingLoops () const
 Not yet implemented. More...
 
TS_API bool IsLinear () const
 Not yet implemented. More...
 
TS_API bool IsC0Continuous () const
 Not yet implemented. More...
 
TS_API bool IsG1Continuous () const
 Not yet implemented. More...
 
TS_API bool IsC1Continuous () const
 Not yet implemented. More...
 
TS_API bool GetValueRange (const GfInterval &timeSpan, std::pair< VtValue, VtValue > *rangeOut) const
 Not yet implemented. More...
 
template<typename T >
bool GetValueRange (const GfInterval &timeSpan, std::pair< T, T > *rangeOut) const
 Not yet implemented. More...
 
Within-spline queries
TS_API bool HasValueBlockAtTime (TsTime time) const
 Not yet implemented. More...
 
TS_API bool IsSegmentFlat (TsTime startTime) const
 Not yet implemented. More...
 
TS_API bool IsSegmentMonotonic (TsTime startTime) const
 Not yet implemented. More...
 
TS_API bool IsKnotRedundant (TsTime time, VtValue defaultValue=VtValue()) const
 Not yet implemented. More...
 

Friends

class TsRegressionPreventer
 
struct Ts_BinaryDataAccess
 
struct Ts_SplineOffsetAccess
 
template<typename HashState >
void TfHashAppend (HashState &h, const TsSpline &spline)
 
Ts_SplineDataTs_GetSplineData (TsSpline &spline)
 
const Ts_SplineDataTs_GetSplineData (const TsSpline &spline)
 

Value types

TS_API TfType GetValueType () const
 
template<typename T >
bool IsHolding () const
 
TS_API void SetTimeValued (bool timeValued)
 
TS_API bool IsTimeValued () const
 
static TS_API bool IsSupportedValueType (TfType valueType)
 

Anti-regression

See page_ts_regression for a general introduction to regression and anti-regression.

See Also
TsAntiRegressionAuthoringSelector
TsRegressionPreventer
TS_API bool HasRegressiveTangents () const
 
TS_API bool AdjustRegressiveTangents ()
 
static TS_API TsAntiRegressionMode GetAntiRegressionAuthoringMode ()
 

Detailed Description

A mathematical description of a curved function from time to value.

This class is STILL IN DEVELOPMENT.

Splines are are supported only for floating-point scalar value types. This class is non-templated, but can hold data for varying value types (double, float, and half). All knots in a spline must have the same value type.

Splines are defined by knots. The curve passes through each knot, and in between, the shape of the curve is controlled by tangents specified at the knots.

Splines typically have Bezier or Hermite curve segments with controllable tangents; linear and held (flat) interpolation are also supported. Outside of the time span of knots, the extrapolation of the curve can be specified.

The main service provided by splines is evaluation: determining the curve's value at a given time.

Splines are copy-on-write. Copying a spline object is cheap; the copy will point to the same data on the heap. Copying, and then modifying one of the copies, will incur the cost of duplicating the data, including all the knots.

Definition at line 58 of file spline.h.

Constructor & Destructor Documentation

TS_API TsSpline::TsSpline ( )

Default constructor creates a spline without a value type. The value type becomes established when the first knot is added.

TS_API TsSpline::TsSpline ( TfType  valueType)

Creates a spline with a specified value type.

TS_API TsSpline::TsSpline ( const TsSpline other)

Default constructor creates a spline without a value type. The value type becomes established when the first knot is added.

Member Function Documentation

template<>
TS_API bool TsSpline::_Eval ( const TsTime  time,
VtValue *const  valueOut,
const Ts_EvalAspect  aspect,
const Ts_EvalLocation  location 
) const
TS_API bool TsSpline::AdjustRegressiveTangents ( )

Shorten any regressive tangents; or, if the current authoring mode is Contain, any tangents that exceed their segment interval. Return whether anything was changed.

TS_API bool TsSpline::BakeLoops ( const GfInterval interval)

Not yet implemented.

TS_API bool TsSpline::CanSetKnot ( const TsKnot knot,
std::string *  reasonOut = nullptr 
) const

Incompletely implemented; affectedIntervalOut is not yet populated.

TS_API void TsSpline::ClearKnots ( )

Incompletely implemented; affectedIntervalOut is not yet populated.

TS_API bool TsSpline::ClearRedundantKnots ( VtValue  defaultValue = VtValue(),
const GfInterval interval = GfInterval::GetFullInterval() 
)

Not yet implemented.

TS_API bool TsSpline::DoSidesDiffer ( TsTime  time) const

Evaluates the value of the TsSpline over the given time interval, typically for drawing.

Sample creates a piecewise linear approximation of the spline curve. When the returned samples are scaled by timeScale and valueScale and linearly interpolated, the reconstructed curve will nowhere have an error greater than tolerance.

The values of timeScale and valueScale are typically chosen to scale the spline's units to pixels and then tolerance represents the allowed deviation in pixel space from a theoretical exact answer.

timeInterval must not be empty and timeScale, valueScale, and tolerance must all be greater than 0.0. If any of these conditions are not met, Sample returns false and *splineSamples is unchanged. Otherwise, true is returned and splineSamples is populated.

template<typename T >
bool TsSpline::Eval ( TsTime  time,
T valueOut 
) const

Evaluates the value of the TsSpline over the given time interval, typically for drawing.

Sample creates a piecewise linear approximation of the spline curve. When the returned samples are scaled by timeScale and valueScale and linearly interpolated, the reconstructed curve will nowhere have an error greater than tolerance.

The values of timeScale and valueScale are typically chosen to scale the spline's units to pixels and then tolerance represents the allowed deviation in pixel space from a theoretical exact answer.

timeInterval must not be empty and timeScale, valueScale, and tolerance must all be greater than 0.0. If any of these conditions are not met, Sample returns false and *splineSamples is unchanged. Otherwise, true is returned and splineSamples is populated.

Definition at line 572 of file spline.h.

template<typename T >
bool TsSpline::EvalDerivative ( TsTime  time,
T valueOut 
) const

Evaluates the value of the TsSpline over the given time interval, typically for drawing.

Sample creates a piecewise linear approximation of the spline curve. When the returned samples are scaled by timeScale and valueScale and linearly interpolated, the reconstructed curve will nowhere have an error greater than tolerance.

The values of timeScale and valueScale are typically chosen to scale the spline's units to pixels and then tolerance represents the allowed deviation in pixel space from a theoretical exact answer.

timeInterval must not be empty and timeScale, valueScale, and tolerance must all be greater than 0.0. If any of these conditions are not met, Sample returns false and *splineSamples is unchanged. Otherwise, true is returned and splineSamples is populated.

Definition at line 584 of file spline.h.

template<typename T >
bool TsSpline::EvalHeld ( TsTime  time,
T valueOut 
) const

Evaluates the value of the TsSpline over the given time interval, typically for drawing.

Sample creates a piecewise linear approximation of the spline curve. When the returned samples are scaled by timeScale and valueScale and linearly interpolated, the reconstructed curve will nowhere have an error greater than tolerance.

The values of timeScale and valueScale are typically chosen to scale the spline's units to pixels and then tolerance represents the allowed deviation in pixel space from a theoretical exact answer.

timeInterval must not be empty and timeScale, valueScale, and tolerance must all be greater than 0.0. If any of these conditions are not met, Sample returns false and *splineSamples is unchanged. Otherwise, true is returned and splineSamples is populated.

Definition at line 596 of file spline.h.

template<typename T >
bool TsSpline::EvalPreDerivative ( TsTime  time,
T valueOut 
) const

Evaluates the value of the TsSpline over the given time interval, typically for drawing.

Sample creates a piecewise linear approximation of the spline curve. When the returned samples are scaled by timeScale and valueScale and linearly interpolated, the reconstructed curve will nowhere have an error greater than tolerance.

The values of timeScale and valueScale are typically chosen to scale the spline's units to pixels and then tolerance represents the allowed deviation in pixel space from a theoretical exact answer.

timeInterval must not be empty and timeScale, valueScale, and tolerance must all be greater than 0.0. If any of these conditions are not met, Sample returns false and *splineSamples is unchanged. Otherwise, true is returned and splineSamples is populated.

Definition at line 590 of file spline.h.

template<typename T >
bool TsSpline::EvalPreValue ( TsTime  time,
T valueOut 
) const

Evaluates the value of the TsSpline over the given time interval, typically for drawing.

Sample creates a piecewise linear approximation of the spline curve. When the returned samples are scaled by timeScale and valueScale and linearly interpolated, the reconstructed curve will nowhere have an error greater than tolerance.

The values of timeScale and valueScale are typically chosen to scale the spline's units to pixels and then tolerance represents the allowed deviation in pixel space from a theoretical exact answer.

timeInterval must not be empty and timeScale, valueScale, and tolerance must all be greater than 0.0. If any of these conditions are not met, Sample returns false and *splineSamples is unchanged. Otherwise, true is returned and splineSamples is populated.

Definition at line 578 of file spline.h.

template<typename T >
bool TsSpline::EvalPreValueHeld ( TsTime  time,
T valueOut 
) const

Evaluates the value of the TsSpline over the given time interval, typically for drawing.

Sample creates a piecewise linear approximation of the spline curve. When the returned samples are scaled by timeScale and valueScale and linearly interpolated, the reconstructed curve will nowhere have an error greater than tolerance.

The values of timeScale and valueScale are typically chosen to scale the spline's units to pixels and then tolerance represents the allowed deviation in pixel space from a theoretical exact answer.

timeInterval must not be empty and timeScale, valueScale, and tolerance must all be greater than 0.0. If any of these conditions are not met, Sample returns false and *splineSamples is unchanged. Otherwise, true is returned and splineSamples is populated.

Definition at line 602 of file spline.h.

static TS_API TsAntiRegressionMode TsSpline::GetAntiRegressionAuthoringMode ( )
static

Returns the current effective anti-regression authoring mode. This may come from the overall default of Keep Ratio; the build-configured default defined by PXR_TS_DEFAULT_ANTI_REGRESSION_AUTHORING_MODE; or a TsAntiRegressionAuthoringSelector.

TS_API TsCurveType TsSpline::GetCurveType ( ) const
TS_API TsLoopParams TsSpline::GetInnerLoopParams ( ) const
TS_API bool TsSpline::GetKnot ( TsTime  time,
TsKnot knotOut 
) const

Retrieves a copy of the knot at the specified time, if one exists. This must be an original knot, not a knot that is echoed due to looping. Returns true on success, false if there is no such knot.

TS_API TsKnotMap TsSpline::GetKnots ( ) const

Returns the spline's knots. These are the original knots; if inner or extrapolating loops are present, this set of knots does not reflect that.

TS_API const TsKnotMap& TsSpline::GetKnotsWithInnerLoopsBaked ( ) const

Not yet implemented.

TS_API const TsKnotMap& TsSpline::GetKnotsWithLoopsBaked ( const GfInterval interval) const

Not yet implemented.

TS_API TsExtrapolation TsSpline::GetPostExtrapolation ( ) const
TS_API TsExtrapolation TsSpline::GetPreExtrapolation ( ) const
TS_API bool TsSpline::GetValueRange ( const GfInterval timeSpan,
std::pair< VtValue, VtValue > *  rangeOut 
) const

Not yet implemented.

template<typename T >
bool TsSpline::GetValueRange ( const GfInterval timeSpan,
std::pair< T, T > *  rangeOut 
) const

Not yet implemented.

TS_API TfType TsSpline::GetValueType ( ) const
TS_API bool TsSpline::HasExtrapolatingLoops ( ) const

Not yet implemented.

TS_API bool TsSpline::HasInnerLoops ( ) const

Not yet implemented.

TS_API bool TsSpline::HasLoops ( ) const
TS_API bool TsSpline::HasRegressiveTangents ( ) const

Returns whether this spline has any tangents long enough to cause regression; or, if the current authoring mode is Contain, whether this spline has any tangents that exceed their segment interval.

TS_API bool TsSpline::HasValueBlockAtTime ( TsTime  time) const

Not yet implemented.

TS_API bool TsSpline::HasValueBlocks ( ) const

Not yet implemented.

TS_API bool TsSpline::IsC0Continuous ( ) const

Not yet implemented.

TS_API bool TsSpline::IsC1Continuous ( ) const

Not yet implemented.

TS_API bool TsSpline::IsEmpty ( ) const

Not yet implemented.

TS_API bool TsSpline::IsG1Continuous ( ) const

Not yet implemented.

template<typename T >
bool TsSpline::IsHolding ( ) const

Definition at line 531 of file spline.h.

TS_API bool TsSpline::IsKnotRedundant ( TsTime  time,
VtValue  defaultValue = VtValue() 
) const

Not yet implemented.

TS_API bool TsSpline::IsLinear ( ) const

Not yet implemented.

TS_API bool TsSpline::IsSegmentFlat ( TsTime  startTime) const

Not yet implemented.

TS_API bool TsSpline::IsSegmentMonotonic ( TsTime  startTime) const

Not yet implemented.

static TS_API bool TsSpline::IsSupportedValueType ( TfType  valueType)
static
TS_API bool TsSpline::IsTimeValued ( ) const
TS_API bool TsSpline::IsVarying ( ) const

Not yet implemented.

TS_API bool TsSpline::operator!= ( const TsSpline other) const

Default constructor creates a spline without a value type. The value type becomes established when the first knot is added.

TS_API TsSpline& TsSpline::operator= ( const TsSpline other)

Default constructor creates a spline without a value type. The value type becomes established when the first knot is added.

TS_API bool TsSpline::operator== ( const TsSpline other) const

Default constructor creates a spline without a value type. The value type becomes established when the first knot is added.

TS_API void TsSpline::RemoveKnot ( TsTime  time,
GfInterval affectedIntervalOut = nullptr 
)

Incompletely implemented; affectedIntervalOut is not yet populated.

template<typename Vertex >
bool TsSpline::Sample ( const GfInterval timeInterval,
double  timeScale,
double  valueScale,
double  tolerance,
TsSplineSamples< Vertex > *  splineSamples 
) const
inline

Evaluates the value of the TsSpline over the given time interval, typically for drawing.

Sample creates a piecewise linear approximation of the spline curve. When the returned samples are scaled by timeScale and valueScale and linearly interpolated, the reconstructed curve will nowhere have an error greater than tolerance.

The values of timeScale and valueScale are typically chosen to scale the spline's units to pixels and then tolerance represents the allowed deviation in pixel space from a theoretical exact answer.

timeInterval must not be empty and timeScale, valueScale, and tolerance must all be greater than 0.0. If any of these conditions are not met, Sample returns false and *splineSamples is unchanged. Otherwise, true is returned and splineSamples is populated.

Definition at line 341 of file spline.h.

template<typename Vertex >
bool TsSpline::Sample ( const GfInterval timeInterval,
double  timeScale,
double  valueScale,
double  tolerance,
TsSplineSamplesWithSources< Vertex > *  splineSamples 
) const
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. When passed a TsSplineSamplesWithSources<Vertex> class, the returned information contains a TsSplineSampleSource value for each polyline. The TsSplineSampleSource indicates the source region (extrapolation, looping, normal interpolation, etc.) of the spline generated that polyline.

Definition at line 360 of file spline.h.

TS_API void TsSpline::SetCurveType ( TsCurveType  curveType)
TS_API void TsSpline::SetInnerLoopParams ( const TsLoopParams params)
TS_API bool TsSpline::SetKnot ( const TsKnot knot,
GfInterval affectedIntervalOut = nullptr 
)

Incompletely implemented; affectedIntervalOut is not yet populated.

TS_API void TsSpline::SetKnots ( const TsKnotMap knots)

Incompletely implemented; affectedIntervalOut is not yet populated.

TS_API void TsSpline::SetPostExtrapolation ( const TsExtrapolation extrap)
TS_API void TsSpline::SetPreExtrapolation ( const TsExtrapolation extrap)
TS_API void TsSpline::SetTimeValued ( bool  timeValued)
TS_API bool TsSpline::Split ( TsTime  time,
GfInterval affectedIntervalOut = nullptr 
)

Not yet implemented.

Adds a knot at the specified time. The new knot is arranged so that the shape of the curve is as unchanged as possible.

Friends And Related Function Documentation

template<typename HashState >
void TfHashAppend ( HashState &  h,
const TsSpline spline 
)
friend

Definition at line 454 of file spline.h.

friend struct Ts_BinaryDataAccess
friend

Definition at line 477 of file spline.h.

Ts_SplineData* Ts_GetSplineData ( TsSpline spline)
friend
const Ts_SplineData* Ts_GetSplineData ( const TsSpline spline)
friend
friend struct Ts_SplineOffsetAccess
friend

Definition at line 478 of file spline.h.

Definition at line 462 of file spline.h.


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