curvedraw

annotate src/curve.h @ 2:ce7aa9a0594c

improved curve editing
author John Tsiombikas <nuclear@member.fsf.org>
date Thu, 17 Dec 2015 05:13:25 +0200
parents 8e524989c904
children 9f75208b81cd
rev   line source
nuclear@0 1 #ifndef CURVE_H_
nuclear@0 2 #define CURVE_H_
nuclear@0 3
nuclear@0 4 #include <vector>
nuclear@0 5 #include <vmath/vmath.h>
nuclear@0 6
nuclear@0 7 enum CurveType {
nuclear@0 8 CURVE_LINEAR,
nuclear@0 9 CURVE_HERMITE,
nuclear@0 10 CURVE_BSPLINE
nuclear@0 11 };
nuclear@0 12
nuclear@0 13 class Curve {
nuclear@0 14 private:
nuclear@0 15 std::vector<Vector3> cp;
nuclear@0 16 CurveType type;
nuclear@0 17
nuclear@0 18 public:
nuclear@0 19 Curve(CurveType type = CURVE_HERMITE);
nuclear@0 20
nuclear@0 21 void set_type(CurveType type);
nuclear@0 22 CurveType get_type() const;
nuclear@0 23
nuclear@0 24 void add_point(const Vector2 &p, float weight = 1.0f);
nuclear@0 25 bool remove_point(int idx);
nuclear@0 26
nuclear@0 27 int nearest_point(const Vector2 &p);
nuclear@0 28
nuclear@2 29 bool empty() const;
nuclear@2 30 int size() const;
nuclear@2 31 Vector3 &operator [](int idx);
nuclear@2 32 const Vector3 &operator [](int idx) const;
nuclear@2 33
nuclear@0 34 const Vector3 &get_homo_point(int idx) const; // homogeneous point
nuclear@0 35 Vector2 get_point(int idx) const;
nuclear@0 36 float get_weight(int idx) const;
nuclear@0 37
nuclear@0 38 bool set_point(int idx, const Vector2 &p, float weight = 1.0f);
nuclear@0 39 bool set_weight(int idx, float weight);
nuclear@2 40 // move point without changing its weight
nuclear@2 41 bool move_point(int idx, const Vector2 &p);
nuclear@0 42
nuclear@0 43 Vector2 interpolate(float t, CurveType type) const;
nuclear@0 44 Vector2 interpolate(float t) const;
nuclear@0 45 Vector2 operator ()(float t) const;
nuclear@2 46
nuclear@2 47 void draw(int res = -1) const;
nuclear@2 48 void draw_cp(float sz = -1.0f) const;
nuclear@0 49 };
nuclear@0 50
nuclear@0 51 #endif // CURVE_H_