Moka kernel
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
plane.hh
Go to the documentation of this file.
1 /*
2  * lib-gmapkernel : Un noyau de 3-G-cartes et des opérations.
3  * Copyright (C) 2004, Moka Team, Université de Poitiers, Laboratoire SIC
4  * http://www.sic.sp2mi.univ-poitiers.fr/
5  * Copyright (C) 2009, Guillaume Damiand, CNRS, LIRIS,
6  * guillaume.damiand@liris.cnrs.fr, http://liris.cnrs.fr/
7  *
8  * This file is part of lib-gmapkernel
9  *
10  * This program is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU Lesser General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public License
21  * along with this program. If not, see <http://www.gnu.org/licenses/>.
22  */
23 
24 //******************************************************************************
25 #ifndef PLANE_HH
26 #define PLANE_HH
27 //******************************************************************************
28 #include <cassert>
29 
30 #include "inline-macro.hh"
31 #include "vertex.hh"
32 
35 //******************************************************************************
39 class CPlane
40 {
41 public:
42 
44 
46 
53  CPlane();
54 
66 
76  CPlane(const CVertex & APoint1,
77  const CVertex & APoint2,
78  const CVertex & APoint3);
79 
88  CPlane(const CVertex & ANormal, const CVertex & APoint);
89 
91  virtual ~CPlane();
92 
94 
96 
98 
108 
116  void setPlane(const CVertex & APoint1,
117  const CVertex & APoint2,
118  const CVertex & APoint3);
119 
127  void setPlane(const CVertex & ANormal, const CVertex & APoint);
128 
134  const CVertex & getNormal() const;
135 
141  TCoordinate getNormalNorm() const;
142 
148  TCoordinate getA() const;
149 
155  TCoordinate getB() const;
156 
162  TCoordinate getC() const;
163 
169  TCoordinate getD() const;
170 
175  void reverseOrientation();
176 
183  bool isPointOnPlane(const CVertex & APoint) const;
184 
192  TCoordinate pointDistance(const CVertex & APoint) const;
193 
205  bool getLineIntersection(const CVertex & APoint,
206  const CVertex & ADirection,
207  TCoordinate * AInterParam) const;
208 
219  bool getLineIntersection(const CVertex & APoint,
220  const CVertex & ADirection,
221  CVertex * AInter) const;
222 
230 
238  CVertex projectPoint(const CVertex & APoint) const;
239 
248  CVertex projectPoint(const CVertex & APoint, TProjection AProj) const;
249 
258  CVertex unprojectPoint(const CVertex & APoint, TProjection AProj) const;
259 
261 
265  friend std::ostream & operator << (std::ostream & AStream, const CPlane & APlane);
266 
267 private:
268 
270 
272 
277  CVertex FNormal;
278 
280  TCoordinate FNormalNorm;
281 
283  TCoordinate FD;
284 
286 };
287 //******************************************************************************
288 #include INCLUDE_INLINE("plane.icc")
289 //******************************************************************************
290 #endif
291 //******************************************************************************