X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fbezier.hh;h=c7317be581aa39dc1003e1b3dcd482a43c8bd9c3;hb=4a964b10c411827584eb720c63cd0d6fc5b65d72;hp=5f5c59d7b43864ff3b18faa5386babbc1c19ff02;hpb=234697355e387e3349018823d259c35f4ee49713;p=lilypond.git diff --git a/lily/include/bezier.hh b/lily/include/bezier.hh index 5f5c59d7b4..c7317be581 100644 --- a/lily/include/bezier.hh +++ b/lily/include/bezier.hh @@ -1,14 +1,19 @@ /* bezier.hh -- declare Bezier and Bezier_bow - (c) 1998 Jan Nieuwenhuizen + (c) 1998--2004 Jan Nieuwenhuizen */ #ifndef BEZIER_HH #define BEZIER_HH -#include "lily-proto.hh" + #include "real.hh" +#include "drul-array.hh" +#include "interval.hh" +#include "offset.hh" +#include "array.hh" +#include "polynomial.hh" /** Simple bezier curve @@ -16,37 +21,40 @@ class Bezier { public: - Bezier (int steps_i); - virtual ~Bezier (); - - /** - Calculate bezier curve into Offset (x,y) array. - */ - void calc (Offset control[4]); - - /** - Return y that goes with x by interpolation. - */ - Real y (Real x); - - int steps_i_; - Offset* curve_; + void assert_sanity () const; + void scale (Real x,Real y); + void reverse (); + void rotate (Real); + void translate (Offset); + + Real get_other_coordinate (Axis a, Real x) const; + Array solve_point (Axis, Real coordinate) const; + Array solve_derivative (Offset) const; + Interval extent (Axis)const; + Polynomial polynomial (Axis)const; + Offset curve_point (Real t) const; + + static const int CONTROL_COUNT = 4; + + /* + Bezier curves always have 4 control points. Making this into an + Array<> gives unnecessary overhead, and makes debugging a royal + pain. */ + + + Offset control_[4]; }; -/** - Implement bow specific bezier curve - */ -class Bezier_bow : public Bezier -{ -public: - Bezier_bow (Paper_def* paper_l); +void scale (Array* array, Real xscale, Real yscale); +void rotate (Array* array, Real phi); +void translate (Array* array, Offset o); - /** - Calculate bezier curve for bow from bow parameters. - */ - void calc (Real dx, Real dy, Real h, Real d); - Paper_def* paper_l_; -}; +Bezier slur_shape (Real width, Real height_limit, + Real height_proportion); +Real slur_height (Real width, Real height_limit, Real height_proportion); +void get_slur_indent_height (Real * indent, Real *height, Real width, Real h_inf, Real r_0); + #endif // BEZIER_HH +