blob: 71573a93a699c194205e79cd4139cf631afdb8f4 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#ifndef CatmullRomSpline_h__
#define CatmullRomSpline_h__
#include <QtCore/QPoint>
#include <vector>
#include "Spline.h"
namespace nvidia {
namespace CurveEditor {
class CatmullRomSpline : public Spline
{
public:
static float splineInterpolate(float v0, float v1, float v2, float v3, float u);
static QPointF splineInterpolate(const QPointF& p0, const QPointF& p1, const QPointF& p2, const QPointF& p3, float u);
static std::vector<QPointF> sample(const std::vector<QPointF>& inControlPoints, int numSegments = 100);
private:
static void _computeSplineBasis(float u, float* basis);
public:
CatmullRomSpline(long segmentCount = 100);
CatmullRomSpline(int numControlPoints, long segmentCount = 100);
virtual ~CatmullRomSpline(void);
int getControlPointCount() { return (int)_controlPoints.size(); }
// add a spline point to last
void appendControlPoint(QPointF point) { _controlPoints.push_back(point); }
void setControlPoint(int index, const QPointF& point);
QPointF getControlPoint(int index);
std::vector<QPointF> getControlPoints();
void reset(void);
void insertControlPointAt(int index);
void removeControlPoints(std::vector<int>& points);
private:
virtual void _doSample();
private:
std::vector<QPointF> _controlPoints;
};
} // namespace CurveEditor
} // namespace nvidia
#endif // CatmullRomSpline_h__
|