Library of Assembled Shared Sources
parallelogram_3d.h
Go to the documentation of this file.
1/** @file
2 * @author Bram de Greve (bram@cocamware.com)
3 * @author Tom De Muer (tom@cocamware.com)
4 *
5 * *** BEGIN LICENSE INFORMATION ***
6 *
7 * The contents of this file are subject to the Common Public Attribution License
8 * Version 1.0 (the "License"); you may not use this file except in compliance with
9 * the License. You may obtain a copy of the License at
10 * http://lass.sourceforge.net/cpal-license. The License is based on the
11 * Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover
12 * use of software over a computer network and provide for limited attribution for
13 * the Original Developer. In addition, Exhibit A has been modified to be consistent
14 * with Exhibit B.
15 *
16 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
17 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
18 * language governing rights and limitations under the License.
19 *
20 * The Original Code is LASS - Library of Assembled Shared Sources.
21 *
22 * The Initial Developer of the Original Code is Bram de Greve and Tom De Muer.
23 * The Original Developer is the Initial Developer.
24 *
25 * All portions of the code written by the Initial Developer are:
26 * Copyright (C) 2004-2011 the Initial Developer.
27 * All Rights Reserved.
28 *
29 * Contributor(s):
30 *
31 * Alternatively, the contents of this file may be used under the terms of the
32 * GNU General Public License Version 2 or later (the GPL), in which case the
33 * provisions of GPL are applicable instead of those above. If you wish to allow use
34 * of your version of this file only under the terms of the GPL and not to allow
35 * others to use your version of this file under the CPAL, indicate your decision by
36 * deleting the provisions above and replace them with the notice and other
37 * provisions required by the GPL License. If you do not delete the provisions above,
38 * a recipient may use your version of this file under either the CPAL or the GPL.
39 *
40 * *** END LICENSE INFORMATION ***
41 */
42
43
44
45/** @class lass::prim::Parallelogram3D
46 * @brief A very simple 3D polygon :)
47 * @author Bram de Greve [BdG]
48 */
49
50#ifndef LASS_GUARDIAN_OF_INCLUSION_PRIM_PARALLELOGRAM_3D_H
51#define LASS_GUARDIAN_OF_INCLUSION_PRIM_PARALLELOGRAM_3D_H
52
53#include "prim_common.h"
54#include "line_segment_3d.h"
55#include "plane_3d.h"
56
57namespace lass
58{
59namespace prim
60{
61
62template <typename T>
64{
65public:
66
67 typedef Parallelogram3D<T> TSelf;
68
69 typedef Point3D<T> TPoint;
70 typedef Point3DH<T> TPointH;
71 typedef typename TPoint::TVector TVector;
72 typedef Point2D<T> TUV;
74
75 typedef typename TPoint::TValue TValue;
76 typedef typename TPoint::TParam TParam;
77 typedef typename TPoint::TReference TReference;
78 typedef typename TPoint::TConstReference TConstReference;
79 typedef typename TPoint::TNumTraits TNumTraits;
80
81 enum { dimension = TPoint::dimension }; /**< number of dimensions */
82
83 template <typename U> struct Rebind
84 {
85 typedef Parallelogram3D<U> Type;
86 };
87
89 Parallelogram3D(const TPoint& support, const TVector& sizeX, const TVector& sizeY);
90
91 const TPoint& support() const;
92 TPoint& support();
93
94 const TVector& sizeU() const;
95 TVector& sizeU();
96
97 const TVector& sizeV() const;
98 TVector& sizeV();
99
100 const TPlane plane() const;
101
102 const TValue squaredArea() const;
103 const TValue area() const;
104 const TValue perimeter() const;
105
106 const TPoint point(TParam u, TParam v) const;
107 const TPoint point(const TUV& uv) const;
108 const TUV uv(const TPoint& point) const;
109
110 bool isSimple() const;
111 bool isConvex() const;
112 bool isReflex(int indexOfVertex) const;
113
114private:
115
116 TPoint support_;
117 TVector sizeU_;
118 TVector sizeV_;
119};
120
121template <typename T>
122io::XmlOStream& operator<<(io::XmlOStream& stream, const Parallelogram3D<T>& parallelogram);
123template <typename T>
124std::ostream& operator<<(std::ostream& stream, const Parallelogram3D<T>& parallelogram);
125
126
127
128}
129
130}
131
132#include "parallelogram_3d.inl"
133
134#ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_AABB_3D_H
136#endif
137
138#ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_RAY_3D_H
140#endif
141
142#endif
143
144// EOF
Output stream for writing a selection of geometric primitives to XML files.
A very simple 3D polygon :)
const TValue area() const
return area of the polygons surface.
Parallelogram3D()
constructs an empty parallelogram.
bool isReflex(int indexOfVertex) const
return true if inner angle of vertex is reflex (is > 180 degrees).
Parallelogram3D(const TPoint &support, const TVector &sizeX, const TVector &sizeY)
Constructs a parallelogram with a support and two sizes.
bool isConvex() const
return true if polygon is convex, false if not.
bool isSimple() const
return true if polygon is simple, false if not.
const TValue perimeter() const
return sum of the lengths of all edges
const TValue squaredArea() const
returns squared area of parallelogram to avoid the square root.
A 3D hyper plane.
Definition plane_3d.h:361
#define LASS_SIMD_ALIGN
if LASS_SIMD_ALIGNMENT is set, use LASS_SIMD_ALIGN to align some structures on SIMD alignment boundar...
set of geometrical primitives
Definition aabb_2d.h:81
Library for Assembled Shared Sources.
Definition config.h:53
homogenous 3D Point
Definition point_3dh.h:72