00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef BEZIER_HPP
00026 #define BEZIER_HPP
00027
00028 #include "../src/skin_common.hpp"
00029 #include "pointer.hpp"
00030 #include <vector>
00031
00032 #define MAX_BEZIER_POINT 1023
00033
00034
00036 class Bezier: public SkinObject
00037 {
00038 public:
00041 typedef enum
00042 {
00043 kCoordsBoth,
00044 kCoordsX,
00045 kCoordsY
00046 } Flag_t;
00047
00048 Bezier( intf_thread_t *p_intf,
00049 const vector<float> &pAbscissas,
00050 const vector<float> &pOrdinates,
00051 Flag_t flag = kCoordsBoth );
00052 ~Bezier() {}
00053
00055 int getNbCtrlPoints() const { return m_nbCtrlPt; }
00056
00059 float getNearestPercent( int x, int y ) const;
00060
00062 float getMinDist( int x, int y ) const;
00063
00066 void getPoint( float t, int &x, int &y ) const;
00067
00069 int getWidth() const;
00070
00072 int getHeight() const;
00073
00074 private:
00076 int m_nbCtrlPt;
00078 vector<float> m_ptx;
00079 vector<float> m_pty;
00081 vector<float> m_ft;
00082
00084 int m_nbPoints;
00086 vector<int> m_leftVect;
00087 vector<int> m_topVect;
00089 vector<float> m_percVect;
00090
00092 int findNearestPoint( int x, int y ) const;
00095 void computePoint( float t, int &x, int &y ) const;
00097 inline float computeCoeff( int i, int n, float t ) const;
00099 inline float power( float x, int n ) const;
00100 };
00101
00102
00103 typedef CountedPtr<Bezier> BezierPtr;
00104
00105 #endif