Loading...
Searching...
No Matches
TsKnot Class Reference

A knot belonging to a TsSpline. More...

#include <knot.h>

+ Inheritance diagram for TsKnot:

Public Member Functions

Construction and value semantics

Unlike splines, knots have a fixed value type from the time they are constructed.

Knots are fairly small, so copying them is not particularly expensive. Move construction and assignment are supported, but this is only beneficial when there is custom data.

TS_API TsKnot ()
 Default constructor creates a double-typed knot.
 
TS_API TsKnot (TfType valueType)
 Creates a knot with a specified value type.
 
TS_API TsKnot (TfType valueType, TsCurveType curveType)
 Creates a knot with a specified value type and curve type.
 
TS_API TsKnot (const TsKnot &other)
 
TS_API TsKnot (TsKnot &&other)
 
TS_API ~TsKnot ()
 
TS_API TsKnotoperator= (const TsKnot &other)
 
TS_API TsKnotoperator= (TsKnot &&other)
 
TS_API bool operator== (const TsKnot &other) const
 
TS_API bool operator!= (const TsKnot &other) const
 
Knot time
TS_API bool SetTime (TsTime time)
 
TS_API TsTime GetTime () const
 
Interpolation mode
TS_API bool SetNextInterpolation (TsInterpMode mode)
 Sets the interpolation mode of the spline segment following this knot.
 
TS_API TsInterpMode GetNextInterpolation () const
 
Knot value
TS_API TfType GetValueType () const
 
template<typename T >
bool IsHolding () const
 
TS_API bool SetValue (VtValue value)
 
template<typename T >
bool SetValue (const T value)
 
TS_API bool GetValue (VtValue *valueOut) const
 
template<typename T >
bool GetValue (T *valueOut) const
 
Dual values
TS_API bool IsDualValued () const
 
TS_API bool SetPreValue (VtValue value)
 
template<typename T >
bool SetPreValue (const T value)
 
TS_API bool GetPreValue (VtValue *valueOut) const
 
template<typename T >
bool GetPreValue (T *valueOut) const
 
TS_API bool ClearPreValue ()
 
Curve type
Deprecated:
Knots no longer need to have a curve type that matches the curve type of the spline. SetCurveType and GetCurveType no longer do anything useful and will be removed in a future release.
TS_API bool SetCurveType (TsCurveType curveType)
 
TS_API TsCurveType GetCurveType () const
 
Pre-tangent

Tangents are expressed as width and slope.

It is an error to read or write widths for Hermite knots.

Note
Note that Maya uses tangents in a different format. TsConvertFromStandardTangent is a utility function that can convert a standard width and slope to values expected by Maya.
TS_API bool SetPreTanWidth (TsTime width)
 
TS_API TsTime GetPreTanWidth () const
 
TS_API bool SetPreTanSlope (VtValue slope)
 
template<typename T >
bool SetPreTanSlope (T slope)
 
TS_API bool GetPreTanSlope (VtValue *slopeOut) const
 
template<typename T >
bool GetPreTanSlope (T *slopeOut) const
 
TS_API bool SetPreTanAlgorithm (TsTangentAlgorithm algorithm)
 Set the pre-tangent algorithm.
 
TS_API TsTangentAlgorithm GetPreTanAlgorithm () const
 Get the pre-tangent algorithm.
 
Post-tangent
TS_API bool SetPostTanWidth (TsTime width)
 
TS_API TsTime GetPostTanWidth () const
 
TS_API bool SetPostTanSlope (VtValue slope)
 
template<typename T >
bool SetPostTanSlope (T slope)
 
TS_API bool GetPostTanSlope (VtValue *slopeOut) const
 
template<typename T >
bool GetPostTanSlope (T *slopeOut) const
 
TS_API bool SetPostTanAlgorithm (TsTangentAlgorithm algorithm)
 Set the post-tangent algorithm.
 
TS_API TsTangentAlgorithm GetPostTanAlgorithm () const
 Get the post-tangent algorithm.
 
Computed Tangents
TS_API bool UpdateTangents (const std::optional< TsKnot > prevKnot, const std::optional< TsKnot > nextKnot, TsCurveType curveType=TsCurveTypeBezier)
 Update tangent values algorithmically.
 
Custom data

Knots may have custom data: an arbitrary VtDictionary of key/value pairs.

Custom data does not affect evaluation. It is only for clients' use.

When knots are edited, Ts does not automatically alter any custom data. This means that, if splines are written out, edited by other clients that do not recognize a particular kind of custom data, and read back in, then that custom data may become outdated.

TS_API bool SetCustomData (VtDictionary customData)
 
TS_API VtDictionary GetCustomData () const
 
TS_API bool SetCustomDataByKey (const std::string &keyPath, VtValue value)
 
TS_API VtValue GetCustomDataByKey (const std::string &keyPath) const
 
Continuity queries
TS_API bool IsC0Continuous () const
 Not yet implemented.
 
TS_API bool IsG1Continuous () const
 Not yet implemented.
 
TS_API bool IsC1Continuous () const
 Not yet implemented.
 

Protected Member Functions

 TsKnot (Ts_KnotData *data, TfType valueType, VtDictionary &&customData)
 
Ts_KnotData * _GetData ()
 
const Ts_KnotData * _GetData () const
 

Friends

class TsSpline
 
class TsKnotMap
 
class TsRegressionPreventer
 

Detailed Description

A knot belonging to a TsSpline.

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.

See also
TsTypedKnot

Definition at line 40 of file knot.h.

Constructor & Destructor Documentation

◆ TsKnot() [1/3]

TS_API TsKnot ( )

Default constructor creates a double-typed knot.

◆ TsKnot() [2/3]

TS_API TsKnot ( TfType  valueType)

Creates a knot with a specified value type.

◆ TsKnot() [3/3]

TS_API TsKnot ( TfType  valueType,
TsCurveType  curveType 
)

Creates a knot with a specified value type and curve type.

Deprecated:
The use of curveType for knots is deprecated, knots now work in splines of any curve type. This constructor will be removed in a future release.

Member Function Documentation

◆ _GetData() [1/2]

Ts_KnotData * _GetData ( )
inlineprotected

Definition at line 360 of file knot.h.

◆ _GetData() [2/2]

const Ts_KnotData * _GetData ( ) const
inlineprotected

Definition at line 361 of file knot.h.

◆ GetPostTanAlgorithm()

TS_API TsTangentAlgorithm GetPostTanAlgorithm ( ) const

Get the post-tangent algorithm.

◆ GetPostTanSlope()

bool GetPostTanSlope ( T *  slopeOut) const

Definition at line 639 of file knot.h.

◆ GetPreTanAlgorithm()

TS_API TsTangentAlgorithm GetPreTanAlgorithm ( ) const

Get the pre-tangent algorithm.

◆ GetPreTanSlope()

bool GetPreTanSlope ( T *  slopeOut) const

Definition at line 612 of file knot.h.

◆ GetPreValue()

bool GetPreValue ( T *  valueOut) const

Definition at line 577 of file knot.h.

◆ GetValue()

bool GetValue ( T *  valueOut) const

Definition at line 552 of file knot.h.

◆ IsC0Continuous()

TS_API bool IsC0Continuous ( ) const

Not yet implemented.

◆ IsC1Continuous()

TS_API bool IsC1Continuous ( ) const

Not yet implemented.

◆ IsG1Continuous()

TS_API bool IsG1Continuous ( ) const

Not yet implemented.

◆ IsHolding()

bool IsHolding

Definition at line 534 of file knot.h.

◆ SetNextInterpolation()

TS_API bool SetNextInterpolation ( TsInterpMode  mode)

Sets the interpolation mode of the spline segment following this knot.

◆ SetPostTanAlgorithm()

TS_API bool SetPostTanAlgorithm ( TsTangentAlgorithm  algorithm)

Set the post-tangent algorithm.

When this knot is part of a spline, the tangent algorithm will be used to compute updated tangent values, potentially overriding explicit values set by SetPostTanWidth and SetPostTanSlope. The algorithm TsTangentAlgorithmNone is used by default meaning the explicitly set values will be used unless a different algorithm is set.

◆ SetPostTanSlope()

bool SetPostTanSlope ( slope)

Definition at line 627 of file knot.h.

◆ SetPreTanAlgorithm()

TS_API bool SetPreTanAlgorithm ( TsTangentAlgorithm  algorithm)

Set the pre-tangent algorithm.

When this knot is part of a spline, the tangent algorithm will be used to compute updated tangent values, potentially overriding explicit values set by SetPreTanWidth and SetPreTanSlope. The algorithm TsTangentAlgorithmNone is used by default meaning the explicitly set values will be used unless a different algorithm is set.

◆ SetPreTanSlope()

bool SetPreTanSlope ( slope)

Definition at line 600 of file knot.h.

◆ SetPreValue()

bool SetPreValue ( const T  value)

Definition at line 564 of file knot.h.

◆ SetValue()

bool SetValue ( const T  value)

Definition at line 540 of file knot.h.

◆ UpdateTangents()

TS_API bool UpdateTangents ( const std::optional< TsKnot prevKnot,
const std::optional< TsKnot nextKnot,
TsCurveType  curveType = TsCurveTypeBezier 
)

Update tangent values algorithmically.

Update the pre- and post-tangent values exactly the way a TsSpline would update them if this knot were added to the spline between prevKnot and nextKnot. If there is no previous and/or next knot, you can pass std::nullopt to indicate that the optional value is empty.

If prevKnot is not empty, its time must be before this knot. Similarly if nextKnot is not empty, its time must be after this knot. If either condition is not met, a coding error will be emitted and no changes to the tangent values will be made.

The curveType argument should be TsCurveTypeHermite if the knot is intended to be added to a Hermite spline. The curve type may affect the tangent calculations. Specifically, tangent widths in Hermite splines are always 1/3 of the width of the segment they are in, even if the tangent algorithm is TsTangentAlgorithmNone.

True will be returned if either of the algorithms in this knot run successfully, even if no values change. False will be returned otherwise.

Friends And Related Function Documentation

◆ TsKnotMap

friend class TsKnotMap
friend

Definition at line 349 of file knot.h.

◆ TsRegressionPreventer

friend class TsRegressionPreventer
friend

Definition at line 350 of file knot.h.

◆ TsSpline

friend class TsSpline
friend

Definition at line 348 of file knot.h.


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