Infinity Engine v0.6.20
C++ API Documentation
Loading...
Searching...
No Matches
Spline.hpp
1#pragma once
2
3#include <Infinity/api.h>
4#include <Infinity/Types/Core/Data.hpp>
5#include <Infinity/Types/Core/Value.hpp>
6#include <Infinity/Types/Containers/Array.hpp>
7#include <Infinity/Types/Math/Vector2.hpp>
8#include <Infinity/Types/Math/Vector3.hpp>
9#include <Infinity/Types/Math/Vector4.hpp>
10
12{
21 enum class INFINITY_API_TEMPLATE SplineKind : uint32_t
22 {
31 Bezier = 0,
32
42
52
61 };
62
63 template<typename T>
65
113 class INFINITY_API_PUBLIC Spline2D : public Core::Data
114 {
115 public:
117
130
137
143 explicit Spline2D(SplineKind kind);
144
152 Spline2D(const Spline2D& other);
153
157 virtual ~Spline2D();
158
159 std::unique_ptr<Core::Base> clone() const override;
160
168
181 Vec evaluate(float t) const;
182
198 Vec tangent(float t) const;
199
210 void setCurveKind(SplineKind kind);
211
218
224 const Infinity::Types::TypeID& typeId() const override;
225
226 private:
227 std::unique_ptr<SplineImplBase<Vec>> _impl;
228 };
229
282 class INFINITY_API_PUBLIC Spline3D : public Core::Data
283 {
284 public:
286
294
301
307 explicit Spline3D(SplineKind kind);
308
316 Spline3D(const Spline3D& other);
317
321 virtual ~Spline3D();
322
323 std::unique_ptr<Core::Base> clone() const override;
324
332
341 Vec evaluate(float t) const;
342
353 Vec tangent(float t) const;
354
360 void setCurveKind(SplineKind kind);
361
368
374 const Infinity::Types::TypeID& typeId() const override;
375
376 private:
377 std::unique_ptr<SplineImplBase<Vec>> _impl;
378 };
379
416 class INFINITY_API_PUBLIC Spline4D : public Core::Data
417 {
418 public:
420
428
435
441 explicit Spline4D(SplineKind kind);
442
450 Spline4D(const Spline4D& other);
451
456
464
473 Vec evaluate(float t) const;
474
485 Vec tangent(float t) const;
486
492 void setCurveKind(SplineKind kind);
493
500
506 const Infinity::Types::TypeID& typeId() const override;
507
508 private:
509 std::unique_ptr<SplineImplBase<Vec>> _impl;
510 };
511
512}
513
517
Dynamic contiguous container for homogeneous elements in the Infinity type system.
Definition Array.hpp:77
Base class for complex data types with memory wrapping and property support.
Definition Data.hpp:49
Two-dimensional spline curve for procedural path and shape generation.
Definition Spline.hpp:114
Spline2D(const Spline2D &other)
Copy constructor.
Spline2D()
Default constructor.
Containers::Array< Vec > points
Control points defining the spline curve.
Definition Spline.hpp:129
Spline2D(SplineKind kind)
Constructs a spline with specified interpolation type.
virtual ~Spline2D()
Destructor.
SplineKind type() const
Gets the current spline interpolation type.
const Infinity::Types::TypeID & typeId() const override
Gets the TypeID for Spline2D.
Vec evaluate(float t) const
Evaluates the spline position at parameter t.
void setCurveKind(SplineKind kind)
Changes the spline interpolation type.
Vec tangent(float t) const
Computes the tangent vector at parameter t.
std::unique_ptr< Core::Base > clone() const override
Spline2D & operator=(const Spline2D &other)
Copy assignment operator.
Three-dimensional spline curve for procedural 3D path generation.
Definition Spline.hpp:283
Containers::Array< Vec > points
Control points defining the spline curve.
Definition Spline.hpp:293
Spline3D & operator=(const Spline3D &other)
Copy assignment operator.
Spline3D(SplineKind kind)
Constructs a spline with specified interpolation type.
Spline3D()
Default constructor.
const Infinity::Types::TypeID & typeId() const override
Gets the TypeID for Spline3D.
virtual ~Spline3D()
Destructor.
Vec evaluate(float t) const
Evaluates the spline position at parameter t.
SplineKind type() const
Gets the current spline interpolation type.
Spline3D(const Spline3D &other)
Copy constructor.
void setCurveKind(SplineKind kind)
Changes the spline interpolation type.
Vec tangent(float t) const
Computes the tangent vector at parameter t.
std::unique_ptr< Core::Base > clone() const override
Four-dimensional spline curve for extended parameter space interpolation.
Definition Spline.hpp:417
void setCurveKind(SplineKind kind)
Changes the spline interpolation type.
Spline4D & operator=(const Spline4D &other)
Copy assignment operator.
Spline4D(const Spline4D &other)
Copy constructor.
const Infinity::Types::TypeID & typeId() const override
Gets the TypeID for Spline4D.
Containers::Array< Vec > points
Control points defining the spline curve.
Definition Spline.hpp:427
Spline4D(SplineKind kind)
Constructs a spline with specified interpolation type.
Spline4D()
Default constructor.
SplineKind type() const
Gets the current spline interpolation type.
Vec evaluate(float t) const
Evaluates the spline position at parameter t.
Vec tangent(float t) const
Computes the tangent vector at parameter t.
Definition Point.hpp:11
enum INFINITY_API_TEMPLATE SplineKind
Definition Spline.hpp:21
enum INFINITY_API_TEMPLATE Linear
Linear interpolation.
Definition Spline.hpp:60
enum INFINITY_API_TEMPLATE CatmullRom
Catmull-Rom spline interpolation.
Definition Spline.hpp:41
enum INFINITY_API_TEMPLATE BSpline
B-Spline (Basis spline) interpolation.
Definition Spline.hpp:51
Template structure representing a 2-component vector.
Definition Vector2.hpp:75
Template structure representing a 3-component vector.
Definition Vector3.hpp:82
Template structure representing a 4-component vector.
Definition Vector4.hpp:85
Runtime type identifier for the Infinity type system.
Definition TypeID.hpp:71