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 PlaneH
00033 #define PlaneH
00034
00035 #include <zeusmath/Geometry/Interfaces/IPlane.hpp>
00036 #include <zeusmath/Geometry/Vector3D.h>
00037
00038
00039 BEGIN_NAMESPACE_Zeus
00040
00041
00042
00048
00049 zeusmath_class TPlane : public IPlane
00050 {
00051 public:
00053 TPlane(const IVector3D& rVecInitial, const IVector3D& rVecDirection1,
00054 const IVector3D& rVecDirection2,
00055 bool bConstructionByPointDirectionForm_Or_By3Points);
00056
00058 TPlane(const Float& a, const Float& b, const Float& c, const Float& d);
00059
00061 TPlane(const IVector3D& rVecNormal, const IVector3D& rVecKnownPoint);
00062
00064 inline TPlane() { initAsPlaneXY(); }
00065
00067 inline TPlane(const TPlane& rPlane) { *this = rPlane; }
00068
00070 inline TPlane(const IPlane& rPlane) { *this = rPlane; }
00071
00073 virtual inline ~TPlane() { }
00074
00075
00076 virtual inline const IVector3D& MQUALIFIER getInitialVector() const { return m_vecInitial; }
00077 virtual inline const IVector3D& MQUALIFIER getDirectionVector1() const { return m_vecDirection1; }
00078 virtual inline const IVector3D& MQUALIFIER getDirectionVector2() const { return m_vecDirection2; }
00079
00080 virtual inline void MQUALIFIER setInitialVector (const IVector3D& rVecInitial) { m_vecInitial = rVecInitial ; calcCoordFormFromPointDirectionForm(); }
00081 virtual inline void MQUALIFIER setDirectionVector1(const IVector3D& rVecDirection1) { m_vecDirection1 = rVecDirection1; calcCoordFormFromPointDirectionForm(); }
00082 virtual inline void MQUALIFIER setDirectionVector2(const IVector3D& rVecDirection2) { m_vecDirection2 = rVecDirection2; calcCoordFormFromPointDirectionForm(); }
00083
00084 virtual inline const Float& MQUALIFIER getCoordFormA() const { return getCoordForm()[0]; }
00085 virtual inline const Float& MQUALIFIER getCoordFormB() const { return getCoordForm()[1]; }
00086 virtual inline const Float& MQUALIFIER getCoordFormC() const { return getCoordForm()[2]; }
00087 virtual inline const Float& MQUALIFIER getCoordFormD() const { return getCoordForm()[3]; }
00088 virtual inline const Float* MQUALIFIER getCoordForm() const { return m_fCoordForm; }
00089
00090 virtual inline void MQUALIFIER setCoordFormA(const Float& a) { m_fCoordForm[0] = a; calcPointDirectionFormFromCoordForm(); }
00091 virtual inline void MQUALIFIER setCoordFormB(const Float& b) { m_fCoordForm[1] = b; calcPointDirectionFormFromCoordForm(); }
00092 virtual inline void MQUALIFIER setCoordFormC(const Float& c) { m_fCoordForm[2] = c; calcPointDirectionFormFromCoordForm(); }
00093 virtual inline void MQUALIFIER setCoordFormD(const Float& d) { m_fCoordForm[3] = d; calcPointDirectionFormFromCoordForm(); }
00094
00095 virtual inline void MQUALIFIER assign(const IPlane& rPlane) { *this = rPlane; }
00096
00097 virtual inline void MQUALIFIER calcNormalVector(IVector3D& rVecNormal) const { rVecNormal.assign(getNormalVector()); }
00098 virtual inline bool MQUALIFIER isValid() const { return !getNormalVector().isZeroVector(); }
00099
00100 virtual void MQUALIFIER initAsPlaneXY() { *this = getPlaneXY(); }
00101 virtual void MQUALIFIER initAsPlaneXZ() { *this = getPlaneXZ(); }
00102 virtual void MQUALIFIER initAsPlaneYZ() { *this = getPlaneYZ(); }
00103
00104 virtual bool MQUALIFIER isPlaneXY() const;
00105 virtual bool MQUALIFIER isPlaneXZ() const;
00106 virtual bool MQUALIFIER isPlaneYZ() const;
00107
00108 virtual void MQUALIFIER calcPointFromParameters(const Float& fParameter1,
00109 const Float& fParameter2,
00110 IVector3D& rVecPoint) const;
00111
00112 virtual bool MQUALIFIER calcParametersFromPoint(const IVector3D& rVecPoint,
00113 Float& fParameter1,
00114 Float& fParameter2) const;
00115
00116 virtual inline bool MQUALIFIER isParallel(const IPlane& rPlane) const { return *this || rPlane; }
00117 virtual inline bool MQUALIFIER isEqual (const IPlane& rPlane) const { return *this == rPlane; }
00118
00119 virtual bool MQUALIFIER arePointsOnSameSide(const IVector3D& rVecPoint1,
00120 const IVector3D& rVecPoint2) const;
00121
00122 virtual Float MQUALIFIER calcDistanceTo(const IVector3D& rVecPoint) const;
00123
00124 virtual bool MQUALIFIER calcIntersectionPointWithStraightLine3D(const IStraightLine3D& rStraightLine3D,
00125 IVector3D& rVecIntersectionPoint) const;
00126
00127 virtual bool MQUALIFIER calcIntersectionPointWith2Planes(const IPlane& rPlane1,
00128 const IPlane& rPlane2,
00129 IVector3D& rVecIntersectionPoint) const;
00130
00131 virtual bool MQUALIFIER calcIntersectionLine(const IPlane& rPlane,
00132 IStraightLine3D& rIntersectionLine) const;
00133
00134 virtual void MQUALIFIER calcAngleTo(const IPlane& rPlane, IAngle& rAngle) const;
00135
00136 virtual bool MQUALIFIER containsPoint(const IVector3D& rVecPoint) const;
00137
00138 virtual bool MQUALIFIER containsStraightLine3D(const IStraightLine3D& rStraightLine3D) const;
00139
00141 inline TVector3D getNormalVector() const { return TVector3D(getCoordFormA(), getCoordFormB(), getCoordFormC()); }
00142
00143
00144 const TPlane& operator=(const IPlane& rPlane);
00145 const TPlane& operator=(const TPlane& rPlane);
00146 bool operator||(const IPlane& rPlane) const;
00147 bool operator==(const IPlane& rPlane) const;
00148
00150 inline bool operator!=(const IPlane& rPlane) const { return !(*this == rPlane); }
00151
00153 static inline const TPlane& getPlaneXY() { return m_PlaneXY; }
00154
00156 static inline const TPlane& getPlaneXZ() { return m_PlaneXZ; }
00157
00159 static inline const TPlane& getPlaneYZ() { return m_PlaneYZ; }
00160
00161 private:
00162 void calcCoordFormFromPointDirectionForm();
00163 void calcPointDirectionFormFromCoordForm();
00164
00165 private:
00167 TVector3D m_vecInitial;
00168 TVector3D m_vecDirection1;
00169 TVector3D m_vecDirection2;
00170
00171
00172
00174 Float m_fCoordForm[4];
00175
00177 static const TPlane m_PlaneXY;
00178 static const TPlane m_PlaneXZ;
00179 static const TPlane m_PlaneYZ;
00180 };
00181
00182
00183 END_NAMESPACE_Zeus
00184
00185 #endif
00186