Go to the documentation of this file.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 #ifndef LineSegment2DH
00033 #define LineSegment2DH
00034
00035 #include <zeusmath/Geometry/Interfaces/ILineSegment2D.hpp>
00036 #include <zeusmath/Geometry/StraightLine2D.h>
00037
00038
00039 BEGIN_NAMESPACE_Zeus
00040
00041
00042
00045
00046 zeusmath_class TLineSegment2D : public ILineSegment2D
00047 {
00048 public:
00050 TLineSegment2D(bool bIncludeStartPoint = true, bool bIncludeEndPoint = true);
00051
00053 TLineSegment2D(const IVector2D& rVecStartPoint, const IVector2D& rVecEndPoint,
00054 bool bIncludeStartPoint = true, bool bIncludeEndPoint = true);
00055
00057 inline TLineSegment2D(const TLineSegment2D& rLineSegment) { *this = rLineSegment; }
00058
00060 inline TLineSegment2D(const ILineSegment2D& rLineSegment) { *this = rLineSegment; }
00061
00063 virtual inline ~TLineSegment2D() { }
00064
00065
00067
00068 virtual inline IStraightLine2D& MQUALIFIER getStraightLine() { return m_StraightLine; }
00069 virtual inline const IStraightLine2D& MQUALIFIER getStraightLineConst() const { return m_StraightLine; }
00070
00071 virtual inline void MQUALIFIER getStartPoint(IVector2D& rVecStart) const { getStraightLineConst().calcPointFromParameter(0, rVecStart); }
00072 virtual inline void MQUALIFIER getEndPoint (IVector2D& rVecEnd) const { getStraightLineConst().calcPointFromParameter(1, rVecEnd); }
00073 virtual void MQUALIFIER setStartPoint(const IVector2D& rVecStart);
00074 virtual void MQUALIFIER setEndPoint (const IVector2D& rVecEnd);
00075
00076 virtual inline bool MQUALIFIER isStartPointIncluded() const { return m_bIncludeStartPoint; }
00077 virtual inline void MQUALIFIER setStartPointIncluded(bool bInclude) { m_bIncludeStartPoint = bInclude; }
00078 virtual inline bool MQUALIFIER isEndPointIncluded() const { return m_bIncludeEndPoint; }
00079 virtual inline void MQUALIFIER setEndPointIncluded(bool bInclude) { m_bIncludeEndPoint = bInclude; }
00080
00081 virtual Float MQUALIFIER getLength() const;
00082
00083 virtual inline void MQUALIFIER assign(const ILineSegment2D& rLineSegment) { * this = rLineSegment; }
00084
00085 virtual inline bool MQUALIFIER isValid() const { return getStraightLineConst().isValid(); }
00086 virtual bool MQUALIFIER isEqual (const ILineSegment2D& rLineSegment, bool bCheckBorderPointIncludedFlags = true) const;
00087 virtual inline bool MQUALIFIER isParallel(const ILineSegment2D& rLineSegment) const { return *this || rLineSegment; }
00088
00089
00091
00092 virtual inline const InterfaceID& MQUALIFIER getInterfaceID() const { return m_InterfaceID; }
00093
00094 virtual Retval MQUALIFIER intersect(const IGeometricObject2D& rObject,
00095 IList<IVector2D>& rLstIntersectionPoints,
00096 const Float& rfTangentTolerance = INTERSECT_TANGENT_TOLERANCE) const;
00097
00098 virtual bool MQUALIFIER containsPoint(const IVector2D& rVecPoint) const;
00099
00100 virtual void MQUALIFIER calcClosestPointToPoint(const IVector2D& rVecPoint,
00101 IVector2D& rVecClosestPoint) const;
00102
00103 virtual Float MQUALIFIER calcDistanceToPoint(const IVector2D& rVecPoint) const;
00104 virtual Float MQUALIFIER calcDistanceToObject(const IGeometricObject2D& rObject) const;
00105
00106 virtual Retval MQUALIFIER getXMinPoint(IVector2D& rVecPoint) const;
00107 virtual Retval MQUALIFIER getXMaxPoint(IVector2D& rVecPoint) const;
00108 virtual Retval MQUALIFIER getYMinPoint(IVector2D& rVecPoint) const;
00109 virtual Retval MQUALIFIER getYMaxPoint(IVector2D& rVecPoint) const;
00110
00111 virtual void MQUALIFIER getMinMaxCoordinates(Float& rfXMin, Float& rfXMax,
00112 Float& rfYMin, Float& rfYMax) const;
00113
00114
00116
00118 const TLineSegment2D& operator=(const ILineSegment2D& rLineSegment);
00119
00121 const TLineSegment2D& operator=(const TLineSegment2D& rLineSegment);
00122
00123
00125
00127 inline bool operator==(const ILineSegment2D& rLineSegment) const { return isEqual(rLineSegment, true); }
00128
00130 inline bool operator!=(const ILineSegment2D& rLineSegment) const { return !(*this == rLineSegment); }
00131
00133 bool operator||(const ILineSegment2D& rLineSegment) const;
00134
00135 private:
00136
00137 TStraightLine2D m_StraightLine;
00138
00139
00140 bool m_bIncludeStartPoint;
00141 bool m_bIncludeEndPoint;
00142
00143
00144 static const InterfaceID m_InterfaceID;
00145 };
00146
00147
00148 END_NAMESPACE_Zeus
00149
00150 #endif
00151