00001 #ifndef __FTBBox__
00002 #define __FTBBox__
00003
00004 #include <ft2build.h>
00005 #include FT_FREETYPE_H
00006
00007 #include FT_OUTLINE_H
00008
00009 #include "FTGL.h"
00010 #include "FTPoint.h"
00011
00012
00016 class FTGL_EXPORT FTBBox
00017 {
00018 public:
00022 FTBBox()
00023 : lowerX(0.0f),
00024 lowerY(0.0f),
00025 lowerZ(0.0f),
00026 upperX(0.0f),
00027 upperY(0.0f),
00028 upperZ(0.0f)
00029 {}
00030
00034 FTBBox( float lx, float ly, float lz, float ux, float uy, float uz)
00035 : lowerX(lx),
00036 lowerY(ly),
00037 lowerZ(lz),
00038 upperX(ux),
00039 upperY(uy),
00040 upperZ(uz)
00041 {}
00042
00049 FTBBox( FT_GlyphSlot glyph)
00050 : lowerX(0.0f),
00051 lowerY(0.0f),
00052 lowerZ(0.0f),
00053 upperX(0.0f),
00054 upperY(0.0f),
00055 upperZ(0.0f)
00056 {
00057 FT_BBox bbox;
00058 FT_Outline_Get_CBox( &(glyph->outline), &bbox);
00059
00060 lowerX = static_cast<float>( bbox.xMin) / 64.0f;
00061 lowerY = static_cast<float>( bbox.yMin) / 64.0f;
00062 lowerZ = 0.0f;
00063 upperX = static_cast<float>( bbox.xMax) / 64.0f;
00064 upperY = static_cast<float>( bbox.yMax) / 64.0f;
00065 upperZ = 0.0f;
00066
00067 }
00068
00072 ~FTBBox()
00073 {}
00074
00075
00081 FTBBox& Move( FTPoint distance)
00082 {
00083 lowerX += distance.X();
00084 lowerY += distance.Y();
00085 lowerZ += distance.Z();
00086 upperX += distance.X();
00087 upperY += distance.Y();
00088 upperZ += distance.Z();
00089 return *this;
00090 }
00091
00092 FTBBox& operator += ( const FTBBox& bbox)
00093 {
00094 lowerX = bbox.lowerX < lowerX? bbox.lowerX: lowerX;
00095 lowerY = bbox.lowerY < lowerY? bbox.lowerY: lowerY;
00096 lowerZ = bbox.lowerZ < lowerZ? bbox.lowerZ: lowerZ;
00097 upperX = bbox.upperX > upperX? bbox.upperX: upperX;
00098 upperY = bbox.upperY > upperY? bbox.upperY: upperY;
00099 upperZ = bbox.upperZ > upperZ? bbox.upperZ: upperZ;
00100
00101 return *this;
00102 }
00103
00104 void SetDepth( float depth)
00105 {
00106 upperZ = lowerZ + depth;
00107 }
00108
00109
00113
00114 float lowerX, lowerY, lowerZ, upperX, upperY, upperZ;
00115 protected:
00116
00117
00118 private:
00119
00120 };
00121
00122
00123 #endif // __FTBBox__
00124