#ifndef __FTBBox__ #define __FTBBox__ #include #include FT_FREETYPE_H //#include FT_GLYPH_H #include FT_OUTLINE_H #include "FTGL.h" #include "FTPoint.h" /** * FTBBox is a convenience class for handling bounding boxes. */ class FTGL_EXPORT FTBBox { public: /** * Default constructor. Bounding box is set to zero. */ FTBBox() : lowerX(0.0f), lowerY(0.0f), lowerZ(0.0f), upperX(0.0f), upperY(0.0f), upperZ(0.0f) {} /** * Constructor. */ FTBBox( float lx, float ly, float lz, float ux, float uy, float uz) : lowerX(lx), lowerY(ly), lowerZ(lz), upperX(ux), upperY(uy), upperZ(uz) {} /** * Constructor. Extracts a bounding box from a freetype glyph. Uses * the control box for the glyph. FT_Glyph_Get_CBox() * * @param glyph A freetype glyph */ FTBBox( FT_GlyphSlot glyph) : lowerX(0.0f), lowerY(0.0f), lowerZ(0.0f), upperX(0.0f), upperY(0.0f), upperZ(0.0f) { FT_BBox bbox; FT_Outline_Get_CBox( &(glyph->outline), &bbox); lowerX = static_cast( bbox.xMin) / 64.0f; lowerY = static_cast( bbox.yMin) / 64.0f; lowerZ = 0.0f; upperX = static_cast( bbox.xMax) / 64.0f; upperY = static_cast( bbox.yMax) / 64.0f; upperZ = 0.0f; } /** * Destructor */ ~FTBBox() {} /** * Move the Bounding Box by a vector. * * @param distance The distance to move the bbox in 3D space. */ FTBBox& Move( FTPoint distance) { lowerX += distance.X(); lowerY += distance.Y(); lowerZ += distance.Z(); upperX += distance.X(); upperY += distance.Y(); upperZ += distance.Z(); return *this; } FTBBox& operator += ( const FTBBox& bbox) { lowerX = bbox.lowerX < lowerX? bbox.lowerX: lowerX; lowerY = bbox.lowerY < lowerY? bbox.lowerY: lowerY; lowerZ = bbox.lowerZ < lowerZ? bbox.lowerZ: lowerZ; upperX = bbox.upperX > upperX? bbox.upperX: upperX; upperY = bbox.upperY > upperY? bbox.upperY: upperY; upperZ = bbox.upperZ > upperZ? bbox.upperZ: upperZ; return *this; } void SetDepth( float depth) { upperZ = lowerZ + depth; } /** * The bounds of the box */ // Make these ftPoints & private float lowerX, lowerY, lowerZ, upperX, upperY, upperZ; protected: private: }; #endif // __FTBBox__