forked from bartvdbraak/blender
89 lines
2.2 KiB
C
89 lines
2.2 KiB
C
|
#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<FTPoint> PointVector;
|
||
|
PointVector pointList;
|
||
|
|
||
|
/**
|
||
|
* 2D array storing values of de Casteljau algorithm.
|
||
|
*/
|
||
|
float controlPoints[4][2];
|
||
|
};
|
||
|
|
||
|
#endif // __FTContour__
|