#ifndef __FTContour__ #define __FTContour__ #include "FTPoint.h" #include "FTVector.h" #include "FTGL.h" /** * FTContour class is a container of points that describe a vector font * outline. It is used as a container for the output of the bezier curve * evaluator in FTVectoriser. * * @see FTOutlineGlyph * @see FTPolyGlyph * @see FTPoint */ class FTGL_EXPORT FTContour { public: /** * Constructor * * @param contour * @param pointTags * @param numberOfPoints */ FTContour( FT_Vector* contour, char* pointTags, unsigned int numberOfPoints); /** * Destructor */ ~FTContour() { pointList.clear(); } /** * Return a point at index. * * @param index of the point in the curve. * @return const point reference */ const FTPoint& Point( unsigned int index) const { return pointList[index];} /** * How many points define this contour * * @return the number of points in this contour */ size_t PointCount() const { return pointList.size();} private: /** * Add a point to this contour. This function tests for duplicate * points. * * @param point The point to be added to the contour. */ inline void AddPoint( FTPoint point); inline void AddPoint( float x, float y); /** * De Casteljau (bezier) algorithm contributed by Jed Soane * Evaluates a quadratic or conic (second degree) curve */ inline void evaluateQuadraticCurve(); /** * De Casteljau (bezier) algorithm contributed by Jed Soane * Evaluates a cubic (third degree) curve */ inline void evaluateCubicCurve(); /** * The list of points in this contour */ typedef FTVector PointVector; PointVector pointList; /** * 2D array storing values of de Casteljau algorithm. */ float controlPoints[4][2]; }; #endif // __FTContour__