00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef QLINE_H
00043 #define QLINE_H
00044
00045 #include <QtCore/qpoint.h>
00046
00047 QT_BEGIN_HEADER
00048
00049 QT_BEGIN_NAMESPACE
00050
00051 QT_MODULE(Core)
00052
00053
00054
00055
00056
00057 class Q_CORE_EXPORT QLine
00058 {
00059 public:
00060 inline QLine();
00061 inline QLine(const QPoint &pt1, const QPoint &pt2);
00062 inline QLine(int x1, int y1, int x2, int y2);
00063
00064 inline bool isNull() const;
00065
00066 inline QPoint p1() const;
00067 inline QPoint p2() const;
00068
00069 inline int x1() const;
00070 inline int y1() const;
00071
00072 inline int x2() const;
00073 inline int y2() const;
00074
00075 inline int dx() const;
00076 inline int dy() const;
00077
00078 inline void translate(const QPoint &p);
00079 inline void translate(int dx, int dy);
00080
00081 inline QLine translated(const QPoint &p) const;
00082 inline QLine translated(int dx, int dy) const;
00083
00084 inline void setP1(const QPoint &p1);
00085 inline void setP2(const QPoint &p2);
00086 inline void setPoints(const QPoint &p1, const QPoint &p2);
00087 inline void setLine(int x1, int y1, int x2, int y2);
00088
00089 inline bool operator==(const QLine &d) const;
00090 inline bool operator!=(const QLine &d) const { return !(*this == d); }
00091
00092 private:
00093 QPoint pt1, pt2;
00094 };
00095 Q_DECLARE_TYPEINFO(QLine, Q_MOVABLE_TYPE);
00096
00097
00098
00099
00100
00101 inline QLine::QLine() { }
00102
00103 inline QLine::QLine(const QPoint &pt1_, const QPoint &pt2_) : pt1(pt1_), pt2(pt2_) { }
00104
00105 inline QLine::QLine(int x1pos, int y1pos, int x2pos, int y2pos) : pt1(QPoint(x1pos, y1pos)), pt2(QPoint(x2pos, y2pos)) { }
00106
00107 inline bool QLine::isNull() const
00108 {
00109 return pt1 == pt2;
00110 }
00111
00112 inline int QLine::x1() const
00113 {
00114 return pt1.x();
00115 }
00116
00117 inline int QLine::y1() const
00118 {
00119 return pt1.y();
00120 }
00121
00122 inline int QLine::x2() const
00123 {
00124 return pt2.x();
00125 }
00126
00127 inline int QLine::y2() const
00128 {
00129 return pt2.y();
00130 }
00131
00132 inline QPoint QLine::p1() const
00133 {
00134 return pt1;
00135 }
00136
00137 inline QPoint QLine::p2() const
00138 {
00139 return pt2;
00140 }
00141
00142 inline int QLine::dx() const
00143 {
00144 return pt2.x() - pt1.x();
00145 }
00146
00147 inline int QLine::dy() const
00148 {
00149 return pt2.y() - pt1.y();
00150 }
00151
00152 inline void QLine::translate(const QPoint &point)
00153 {
00154 pt1 += point;
00155 pt2 += point;
00156 }
00157
00158 inline void QLine::translate(int adx, int ady)
00159 {
00160 this->translate(QPoint(adx, ady));
00161 }
00162
00163 inline QLine QLine::translated(const QPoint &p) const
00164 {
00165 return QLine(pt1 + p, pt2 + p);
00166 }
00167
00168 inline QLine QLine::translated(int adx, int ady) const
00169 {
00170 return translated(QPoint(adx, ady));
00171 }
00172
00173 inline void QLine::setP1(const QPoint &aP1)
00174 {
00175 pt1 = aP1;
00176 }
00177
00178 inline void QLine::setP2(const QPoint &aP2)
00179 {
00180 pt2 = aP2;
00181 }
00182
00183 inline void QLine::setPoints(const QPoint &aP1, const QPoint &aP2)
00184 {
00185 pt1 = aP1;
00186 pt2 = aP2;
00187 }
00188
00189 inline void QLine::setLine(int aX1, int aY1, int aX2, int aY2)
00190 {
00191 pt1 = QPoint(aX1, aY1);
00192 pt2 = QPoint(aX2, aY2);
00193 }
00194
00195 inline bool QLine::operator==(const QLine &d) const
00196 {
00197 return pt1 == d.pt1 && pt2 == d.pt2;
00198 }
00199
00200 #ifndef QT_NO_DEBUG_STREAM
00201 Q_CORE_EXPORT QDebug operator<<(QDebug d, const QLine &p);
00202 #endif
00203
00204 #ifndef QT_NO_DATASTREAM
00205 Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QLine &);
00206 Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QLine &);
00207 #endif
00208
00209
00210
00211
00212 class Q_CORE_EXPORT QLineF {
00213 public:
00214
00215 enum IntersectType { NoIntersection, BoundedIntersection, UnboundedIntersection };
00216
00217 inline QLineF();
00218 inline QLineF(const QPointF &pt1, const QPointF &pt2);
00219 inline QLineF(qreal x1, qreal y1, qreal x2, qreal y2);
00220 inline QLineF(const QLine &line) : pt1(line.p1()), pt2(line.p2()) { }
00221
00222 static QLineF fromPolar(qreal length, qreal angle);
00223
00224 bool isNull() const;
00225
00226 inline QPointF p1() const;
00227 inline QPointF p2() const;
00228
00229 inline qreal x1() const;
00230 inline qreal y1() const;
00231
00232 inline qreal x2() const;
00233 inline qreal y2() const;
00234
00235 inline qreal dx() const;
00236 inline qreal dy() const;
00237
00238 qreal length() const;
00239 void setLength(qreal len);
00240
00241 qreal angle() const;
00242 void setAngle(qreal angle);
00243
00244 qreal angleTo(const QLineF &l) const;
00245
00246 QLineF unitVector() const;
00247 QLineF normalVector() const;
00248
00249
00250 IntersectType intersect(const QLineF &l, QPointF *intersectionPoint) const;
00251
00252 qreal angle(const QLineF &l) const;
00253
00254 QPointF pointAt(qreal t) const;
00255 inline void translate(const QPointF &p);
00256 inline void translate(qreal dx, qreal dy);
00257
00258 inline QLineF translated(const QPointF &p) const;
00259 inline QLineF translated(qreal dx, qreal dy) const;
00260
00261 inline void setP1(const QPointF &p1);
00262 inline void setP2(const QPointF &p2);
00263 inline void setPoints(const QPointF &p1, const QPointF &p2);
00264 inline void setLine(qreal x1, qreal y1, qreal x2, qreal y2);
00265
00266 inline bool operator==(const QLineF &d) const;
00267 inline bool operator!=(const QLineF &d) const { return !(*this == d); }
00268
00269 QLine toLine() const;
00270
00271 private:
00272 QPointF pt1, pt2;
00273 };
00274 Q_DECLARE_TYPEINFO(QLineF, Q_MOVABLE_TYPE);
00275
00276
00277
00278
00279
00280 inline QLineF::QLineF()
00281 {
00282 }
00283
00284 inline QLineF::QLineF(const QPointF &apt1, const QPointF &apt2)
00285 : pt1(apt1), pt2(apt2)
00286 {
00287 }
00288
00289 inline QLineF::QLineF(qreal x1pos, qreal y1pos, qreal x2pos, qreal y2pos)
00290 : pt1(x1pos, y1pos), pt2(x2pos, y2pos)
00291 {
00292 }
00293
00294 inline qreal QLineF::x1() const
00295 {
00296 return pt1.x();
00297 }
00298
00299 inline qreal QLineF::y1() const
00300 {
00301 return pt1.y();
00302 }
00303
00304 inline qreal QLineF::x2() const
00305 {
00306 return pt2.x();
00307 }
00308
00309 inline qreal QLineF::y2() const
00310 {
00311 return pt2.y();
00312 }
00313
00314 inline QPointF QLineF::p1() const
00315 {
00316 return pt1;
00317 }
00318
00319 inline QPointF QLineF::p2() const
00320 {
00321 return pt2;
00322 }
00323
00324 inline qreal QLineF::dx() const
00325 {
00326 return pt2.x() - pt1.x();
00327 }
00328
00329 inline qreal QLineF::dy() const
00330 {
00331 return pt2.y() - pt1.y();
00332 }
00333
00334 inline QLineF QLineF::normalVector() const
00335 {
00336 return QLineF(p1(), p1() + QPointF(dy(), -dx()));
00337 }
00338
00339 inline void QLineF::translate(const QPointF &point)
00340 {
00341 pt1 += point;
00342 pt2 += point;
00343 }
00344
00345 inline void QLineF::translate(qreal adx, qreal ady)
00346 {
00347 this->translate(QPointF(adx, ady));
00348 }
00349
00350 inline QLineF QLineF::translated(const QPointF &p) const
00351 {
00352 return QLineF(pt1 + p, pt2 + p);
00353 }
00354
00355 inline QLineF QLineF::translated(qreal adx, qreal ady) const
00356 {
00357 return translated(QPointF(adx, ady));
00358 }
00359
00360 inline void QLineF::setLength(qreal len)
00361 {
00362 if (isNull())
00363 return;
00364 QLineF v = unitVector();
00365 pt2 = QPointF(pt1.x() + v.dx() * len, pt1.y() + v.dy() * len);
00366 }
00367
00368 inline QPointF QLineF::pointAt(qreal t) const
00369 {
00370 qreal vx = pt2.x() - pt1.x();
00371 qreal vy = pt2.y() - pt1.y();
00372 return QPointF(pt1.x() + vx * t, pt1.y() + vy * t);
00373 }
00374
00375 inline QLine QLineF::toLine() const
00376 {
00377 return QLine(pt1.toPoint(), pt2.toPoint());
00378 }
00379
00380
00381 inline void QLineF::setP1(const QPointF &aP1)
00382 {
00383 pt1 = aP1;
00384 }
00385
00386 inline void QLineF::setP2(const QPointF &aP2)
00387 {
00388 pt2 = aP2;
00389 }
00390
00391 inline void QLineF::setPoints(const QPointF &aP1, const QPointF &aP2)
00392 {
00393 pt1 = aP1;
00394 pt2 = aP2;
00395 }
00396
00397 inline void QLineF::setLine(qreal aX1, qreal aY1, qreal aX2, qreal aY2)
00398 {
00399 pt1 = QPointF(aX1, aY1);
00400 pt2 = QPointF(aX2, aY2);
00401 }
00402
00403
00404 inline bool QLineF::operator==(const QLineF &d) const
00405 {
00406 return pt1 == d.pt1 && pt2 == d.pt2;
00407 }
00408
00409
00410
00411 #ifndef QT_NO_DEBUG_STREAM
00412 Q_CORE_EXPORT QDebug operator<<(QDebug d, const QLineF &p);
00413 #endif
00414
00415 #ifndef QT_NO_DATASTREAM
00416 Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QLineF &);
00417 Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QLineF &);
00418 #endif
00419
00420 QT_END_NAMESPACE
00421
00422 QT_END_HEADER
00423
00424 #endif // QLINE_H