# Home    # nevrax.com   
Nevrax
Nevrax.org
#News
#Mailing-list
#Documentation
#CVS
#Bugs
#License
Docs
 
Documentation  
Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages   Search  

plane.h

Go to the documentation of this file.
00001 
00007 /* Copyright, 2000 Nevrax Ltd.
00008  *
00009  * This file is part of NEVRAX NEL.
00010  * NEVRAX NEL is free software; you can redistribute it and/or modify
00011  * it under the terms of the GNU General Public License as published by
00012  * the Free Software Foundation; either version 2, or (at your option)
00013  * any later version.
00014 
00015  * NEVRAX NEL is distributed in the hope that it will be useful, but
00016  * WITHOUT ANY WARRANTY; without even the implied warranty of
00017  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00018  * General Public License for more details.
00019 
00020  * You should have received a copy of the GNU General Public License
00021  * along with NEVRAX NEL; see the file COPYING. If not, write to the
00022  * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
00023  * MA 02111-1307, USA.
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 /* End of plane.h */