Loading...
Searching...
No Matches
eval.h
1//
2// Copyright 2024 Pixar
3//
4// Licensed under the terms set forth in the LICENSE.txt file available at
5// https://openusd.org/license.
6//
7
8#ifndef PXR_BASE_TS_EVAL_H
9#define PXR_BASE_TS_EVAL_H
10
11#include "pxr/pxr.h"
12#include "pxr/base/ts/api.h"
13#include "pxr/base/ts/types.h"
14
15#include <optional>
16
17PXR_NAMESPACE_OPEN_SCOPE
18
19struct Ts_SplineData;
20
21
22enum Ts_EvalAspect
23{
24 Ts_EvalValue,
25 Ts_EvalHeldValue,
26 Ts_EvalDerivative
27};
28
29enum Ts_EvalLocation
30{
31 Ts_EvalPre,
32 Ts_EvalAtTime, // AtTime is implemented identically to Post,
33 // but the intent of Post is a limit, while AtTime is exact.
34 Ts_EvalPost
35};
36
37
38// Evaluates a spline's value or derivative at a given time. An empty return
39// value means there is no value or derivative at all.
40//
41TS_API
42std::optional<double>
43Ts_Eval(
44 const Ts_SplineData *data,
45 TsTime time,
46 Ts_EvalAspect aspect,
47 Ts_EvalLocation location);
48
49// Ts_Breakdown is used for both TsSpline::Breakdown and CanBreakdown. It
50// inserts (or reports whether it could insert) a knot at \c atTime while trying
51// to maintain the shape of the curve as much as possible.
52//
53// \param data is a pointer to the spline's internal, untyped Ts_SplineData
54// \param atTime is the time at which to insert a knot
55// \param testOnly is a flag to test for allowed breakdown without making
56// any changes.
57// \param affectedIntervalOut is a pointer to a GfInterval that receives the
58// time interval in the spline that was modified and, for example,
59// may need to be redrawn in a GUI.
60// \param reason is a pointer to a string into which a failure message will
61// be stored if the breakdown operation fails.
62//
63// \return true if the breakdown operation succeeded or for CanBreakdown if the
64// operation would succeed. Returns false if the operation did or would fail.
65TS_API
66bool
67Ts_Breakdown(
68 Ts_SplineData* const data,
69 TsTime atTime,
70 bool testOnly,
71 GfInterval *affectedIntervalOut,
72 std::string* reason);
73
74PXR_NAMESPACE_CLOSE_SCOPE
75
76#endif
A basic mathematical interval class.
Definition: interval.h:33