00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef NL_PLANE_H
00027 #define NL_PLANE_H
00028
00029
00030 #include "nel/misc/stream.h"
00031 #include "nel/misc/vector.h"
00032
00033
00034 namespace NLMISC
00035 {
00036
00037
00038
00049 class CPlane
00050 {
00051 public:
00052 float a,b,c,d;
00053
00054 public:
00055
00057
00058
00059 CPlane() {}
00061 CPlane(float _a, float _b, float _c, float _d) : a(_a), b(_b), c(_c), d(_d) {}
00063 CPlane(const CPlane &v) : a(v.a), b(v.b), c(v.c), d(v.d) {}
00065
00066
00068
00069
00073 void make(const CVector &normal, const CVector &pos);
00078 void make(const CVector &p0, const CVector &p1, const CVector &p2);
00084 CVector getNormal() const;
00088 void normalize();
00092 CPlane normed() const;
00094
00095
00097
00098
00103 float distance(const CVector &p) const;
00105 float operator*(const CVector &p) const;
00107 CVector intersect(const CVector &p0,const CVector &p1) const;
00109 CVector project(const CVector &p0) const;
00110
00117 bool clipSegmentBack(CVector &p0, CVector &p1) const;
00124 bool clipSegmentFront(CVector &p0, CVector &p1) const;
00125
00133 sint clipPolygonBack(CVector in[], CVector out[], sint nIn) const;
00141 sint clipPolygonFront(CVector in[], CVector out[], sint nIn) const;
00143
00145
00146
00147 CPlane inverted() const;
00148
00150 void invert();
00152
00154
00155 void serial(IStream &f)
00156 {
00157 f.serial(a,b,c,d);
00158 }
00160
00161 };
00162
00163
00164 }
00165
00166
00167 #include "nel/misc/plane_inline.h"
00168
00169
00170 #endif // NL_PLANE_H
00171
00172