VisuTwin Canvas
C++ 3D Engine — Metal Backend
Loading...
Searching...
No Matches
curve.h
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2025-2026 Arnis Lektauers
3#pragma once
4
5#include <algorithm>
6#include <cstddef>
7#include <cstdint>
8#include <memory>
9#include <utility>
10#include <vector>
11
12namespace visutwin::canvas
13{
14 class CurveEvaluator;
15
16 enum CurveType : uint8_t
17 {
22 };
23
24 class Curve
25 {
26 public:
27 std::vector<std::pair<float, float>> keys;
29 float tension = 0.5f;
30
31 Curve();
32 explicit Curve(const std::vector<float>& data);
33 Curve(const Curve& other);
34 Curve& operator=(const Curve& other);
35 Curve(Curve&& other) noexcept;
36 Curve& operator=(Curve&& other) noexcept;
38
39 [[nodiscard]] size_t length() const { return keys.size(); }
40
41 std::pair<float, float> add(float time, float value);
42
43 std::pair<float, float> get(size_t index) const;
44
45 void sort();
46
47 [[nodiscard]] float value(float time);
48
49 [[nodiscard]] std::pair<float, float> closest(float time) const;
50
51 [[nodiscard]] Curve clone() const;
52
53 [[nodiscard]] std::vector<float> quantize(size_t precision);
54
55 [[nodiscard]] std::vector<float> quantizeClamped(size_t precision, float min, float max);
56
57 private:
58 std::unique_ptr<CurveEvaluator> _eval;
59 };
60}
std::vector< float > quantizeClamped(size_t precision, float min, float max)
Definition curve.cpp:144
std::pair< float, float > add(float time, float value)
Definition curve.cpp:64
std::vector< std::pair< float, float > > keys
Definition curve.h:27
float value(float time)
Definition curve.cpp:92
Curve & operator=(const Curve &other)
Definition curve.cpp:31
std::pair< float, float > get(size_t index) const
Definition curve.cpp:80
Curve clone() const
Definition curve.cpp:120
size_t length() const
Definition curve.h:39
std::vector< float > quantize(size_t precision)
Definition curve.cpp:129
std::pair< float, float > closest(float time) const
Definition curve.cpp:97