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 #ifndef PLANE_HH
00026 #define PLANE_HH
00027
00028 #include <cassert>
00029
00030 #include "inline-macro.hh"
00031 #include "vertex.hh"
00032 #include "tools-win32.hh"
00033
00035 typedef enum {XY_Proj, YZ_Proj, XZ_Proj} TProjection;
00036
00040 class CPlane
00041 {
00042 public:
00043
00045
00047
00054 CPlane();
00055
00066 CPlane(TCoordinate Aa,TCoordinate Ab, TCoordinate Ac, TCoordinate Ad);
00067
00077 CPlane(const CVertex & APoint1,
00078 const CVertex & APoint2,
00079 const CVertex & APoint3);
00080
00089 CPlane(const CVertex & ANormal, const CVertex & APoint);
00090
00092 virtual ~CPlane();
00093
00095
00097
00099
00108 void setPlane(TCoordinate Aa,TCoordinate Ab, TCoordinate Ac, TCoordinate Ad);
00109
00117 void setPlane(const CVertex & APoint1,
00118 const CVertex & APoint2,
00119 const CVertex & APoint3);
00120
00128 void setPlane(const CVertex & ANormal, const CVertex & APoint);
00129
00135 const CVertex & getNormal() const;
00136
00142 TCoordinate getNormalNorm() const;
00143
00149 TCoordinate getA() const;
00150
00156 TCoordinate getB() const;
00157
00163 TCoordinate getC() const;
00164
00170 TCoordinate getD() const;
00171
00176 void reverseOrientation();
00177
00184 bool isPointOnPlane(const CVertex & APoint) const;
00185
00193 TCoordinate pointDistance(const CVertex & APoint) const;
00194
00206 bool getLineIntersection(const CVertex & APoint,
00207 const CVertex & ADirection,
00208 TCoordinate * AInterParam) const;
00209
00220 bool getLineIntersection(const CVertex & APoint,
00221 const CVertex & ADirection,
00222 CVertex * AInter) const;
00223
00230 TProjection getBestProjection() const;
00231
00239 CVertex projectPoint(const CVertex & APoint) const;
00240
00249 CVertex projectPoint(const CVertex & APoint, TProjection AProj) const;
00250
00259 CVertex unprojectPoint(const CVertex & APoint, TProjection AProj) const;
00260
00262
00266 friend std::ostream & operator << (std::ostream & AStream, const CPlane & APlane);
00267
00268 private:
00269
00271
00273
00278 CVertex FNormal;
00279
00281 TCoordinate FNormalNorm;
00282
00284 TCoordinate FD;
00285
00287 };
00288
00289 #include INCLUDE_INLINE("plane.icc")
00290
00291 #endif
00292