6 #if !defined(LST_TEXTEXTENT_H__INCLUDED_)
7 #define LST_TEXTEXTENT_H__INCLUDED_
11 #include "Utility/DPoint.h"
12 #include "Utility/LSTException.h"
23 eSubscriptOutOfRange = EXC_TEXTEXTENT
29 extents.assign(15, DPoint(0,0));
30 capHeightFontUnits = 0;
35 capHeightFontUnits = 0;
42 capHeightFontUnits = 0;
48 double capHeightFontUnits;
50 void setExtents(
const vector <DPoint>& pts)
53 for(i = 0; i < 15; i++)
55 if (i == extents.size())
56 extents.push_back(pts[i]);
65 for(i = 0; i < 15; i++)
67 if (i == extents.size())
68 extents.push_back(pts.extents[i]);
70 extents[i] = pts.extents[i];
77 for(i = 0; i < 15; i++)
78 extents[i] = DPoint(0,0);
81 void scale(
double xScale,
double yScale)
84 for(i = 0; i < 15; i++)
86 extents[i].x = extents[i].x * xScale;
87 extents[i].y = extents[i].y * yScale;
91 void rotate(
double rotation, DPoint center)
93 double x, y, cosA, sinA;
96 while(rotation > 360.) rotation -= 360.;
97 while(rotation < 0.) rotation += 360.;
101 }
else if(rotation == 180.){
104 }
else if(rotation == 270.){
111 for (i = 0; i < 15; i++)
116 extents[i].x = ((x - center.x) * cosA) + ((y - center.y) * sinA) + center.x;
117 extents[i].y = ((y - center.y) * cosA) - ((x - center.x) * sinA) + center.y;
121 double getBaseLength()
124 return sqrt((extents[2].x - extents[0].x) * (extents[2].x - extents[0].x) +
125 (extents[2].y - extents[0].y) * (extents[2].y - extents[0].y) );
131 return sqrt((extents[12].x - extents[0].x) * (extents[12].x - extents[0].x) +
132 (extents[12].y - extents[0].y) * (extents[12].y - extents[0].y) );
135 double getCapHeight()
138 return sqrt((extents[9].x - extents[3].x) * (extents[9].x - extents[3].x) +
139 (extents[9].y - extents[3].y) * (extents[9].y - extents[3].y) );
142 DPoint getLeftBottom() {
return extents[0]; };
143 DPoint getCenterBottom() {
return extents[1]; };
144 DPoint getRightBottom() {
return extents[2]; };
145 DPoint getLeftBase() {
return extents[3]; };
146 DPoint getCenterBase() {
return extents[4]; };
147 DPoint getRightBase() {
return extents[5]; };
148 DPoint getLeftHalf() {
return extents[6]; };
149 DPoint getCenterHalf() {
return extents[7]; };
150 DPoint getRightHalf() {
return extents[8]; };
151 DPoint getLeftCap() {
return extents[9]; };
152 DPoint getCenterCap() {
return extents[10]; };
153 DPoint getRightCap() {
return extents[11]; };
154 DPoint getLeftTop() {
return extents[12]; };
155 DPoint getCenterTop() {
return extents[13]; };
156 DPoint getRightTop() {
return extents[14]; };
157 DPoint getIndex(
int index) {
return extents[index]; };
159 void setLeftBottom(
const DPoint &pt ) { extents[0] = pt; };
160 void setCenterBottom(
const DPoint &pt ) { extents[1] = pt; };
161 void setRightBottom(
const DPoint &pt ) { extents[2] = pt; };
162 void setLeftBase(
const DPoint &pt ) { extents[3] = pt; };
163 void setCenterBase(
const DPoint &pt ) { extents[4] = pt; };
164 void setRightBase(
const DPoint &pt ) { extents[5] = pt; };
165 void setLeftHalf(
const DPoint &pt ) { extents[6] = pt; };
166 void setCenterHalf(
const DPoint &pt ) { extents[7] = pt; };
167 void setRightHalf(
const DPoint &pt ) { extents[8] = pt; };
168 void setLeftCap(
const DPoint &pt ) { extents[9] = pt; };
169 void setCenterCap(
const DPoint &pt ) { extents[10] = pt; };
170 void setRightCap(
const DPoint &pt ) { extents[11] = pt; };
171 void setLeftTop(
const DPoint &pt ) { extents[12] = pt; };
172 void setCenterTop(
const DPoint &pt ) { extents[13] = pt; };
173 void setRightTop(
const DPoint &pt ) { extents[14] = pt; };
174 void setIndex(
const DPoint &pt,
int index ) { extents[index] = pt; };
176 void setLeftBottom(
const double x,
const double y ) { extents[0].x = x;
178 void setCenterBottom(
const double x,
const double y ) { extents[1].x = x;
180 void setRightBottom(
const double x,
const double y ) { extents[2].x = x;
182 void setLeftBase(
const double x,
const double y ) { extents[3].x = x;
184 void setCenterBase(
const double x,
const double y ) { extents[4].x = x;
186 void setRightBase(
const double x,
const double y ) { extents[5].x = x;
188 void setLeftHalf(
const double x,
const double y ) { extents[6].x = x;
190 void setCenterHalf(
const double x,
const double y ) { extents[7].x = x;
192 void setRightHalf(
const double x,
const double y ) { extents[8].x = x;
194 void setLeftCap(
const double x,
const double y ) { extents[9].x = x;
196 void setCenterCap(
const double x,
const double y ) { extents[10].x = x;
197 extents[10].y = y; };
198 void setRightCap(
const double x,
const double y ) { extents[11].x = x;
199 extents[11].y = y; };
200 void setLeftTop(
const double x,
const double y ) { extents[12].x = x;
201 extents[12].y = y; };
202 void setCenterTop(
const double x,
const double y ) { extents[13].x = x;
203 extents[13].y = y; };
204 void setRightTop(
const double x,
const double y ) { extents[14].x = x;
205 extents[14].y = y; };
206 void setIndex(
const double x,
const double y,
unsigned int i ) { extents[i].x = x;
209 void generateCenterAndRight(DPoint& right)
211 DPoint center = right;
215 for (i = 0; i < 15; i += 3)
217 extents[i + 1] = extents[i] + center;
218 extents[i + 2] = extents[i] + right;
224 for (i = 0; i < 15; i++)
226 if (extents[i] != pts[i])
return false;
233 for (i = 0; i < 15; i++)
235 if (extents[i] != pts[i])
return true;
240 DPoint& operator[](
const unsigned int i)
242 if (i >= extents.size())
244 throw CLstException(CTextExtent::eSubscriptOutOfRange, L
"Text Extent subscript out of range");
249 const DPoint& operator[](
const unsigned int i)
const
251 if (i >= extents.size())
253 throw CLstException(CTextExtent::eSubscriptOutOfRange, L
"Text Extent subscript out of range");
258 void operator=(
const CTextExtent& pts) { setExtents(pts); };
259 void operator=(
const vector <DPoint>& pts) { setExtents(pts); };
264 vector <DPoint> extents;
268 #endif // LST_TEXTEXTENT_H__INCLUDED_
CTextExtents – text extents container.
Definition: TextExtent.h:18