125 lines
3.0 KiB
C++
125 lines
3.0 KiB
C++
#ifndef __FTBBox__
|
|
#define __FTBBox__
|
|
|
|
#include <ft2build.h>
|
|
#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. <code>FT_Glyph_Get_CBox()</code>
|
|
*
|
|
* @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<float>( bbox.xMin) / 64.0f;
|
|
lowerY = static_cast<float>( bbox.yMin) / 64.0f;
|
|
lowerZ = 0.0f;
|
|
upperX = static_cast<float>( bbox.xMax) / 64.0f;
|
|
upperY = static_cast<float>( 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__
|
|
|