simple_polygon_3d.h
Go to the documentation of this file.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
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058 #ifndef LASS_GUARDIAN_OF_INCLUSION_PRIM_SIMPLE_POLYGON_3D_H
00059 #define LASS_GUARDIAN_OF_INCLUSION_PRIM_SIMPLE_POLYGON_3D_H
00060
00061 #include "prim_common.h"
00062 #include "line_segment_3d.h"
00063 #include "orientation.h"
00064 #include "plane_3d.h"
00065 #include "simple_polygon_2d.h"
00066 #include "xyz.h"
00067
00068 namespace lass
00069 {
00070 namespace prim
00071 {
00072
00073 template
00074 <
00075 typename T,
00076 class PlaneEquationPolicy = Cartesian,
00077 class PlaneNormalizingPolicy = Normalized
00078 >
00079 class SimplePolygon3D
00080 {
00081 public:
00082
00083 typedef SimplePolygon3D<T> TSelf;
00084
00085 typedef Point3D<T> TPoint;
00086 typedef Point3DH<T> TPointH;
00087 typedef typename TPoint::TVector TVector;
00088 typedef LineSegment3D<T> TLineSegment;
00089 typedef Plane3D<T, PlaneEquationPolicy, PlaneNormalizingPolicy> TPlane;
00090
00091 typedef typename TPoint::TValue TValue;
00092 typedef typename TPoint::TParam TParam;
00093 typedef typename TPoint::TReference TReference;
00094 typedef typename TPoint::TConstReference TConstReference;
00095 typedef typename TPoint::TNumTraits TNumTraits;
00096
00097 enum { dimension = TPoint::dimension };
00098
00099 template <typename U> struct Rebind
00100 {
00101 typedef SimplePolygon3D<U, PlaneEquationPolicy, PlaneNormalizingPolicy> Type;
00102 };
00103
00104 SimplePolygon3D(const TPlane& iPlane);
00105 SimplePolygon3D(const TPoint& iA, const TPoint& iB, const TPoint& iC);
00106
00107 const TPoint& operator[](size_t iIndexOfVertex) const;
00108 TPoint& operator[](size_t iIndexOfVertex);
00109 const TPoint& at(int iIndexOfVertex) const;
00110 TPoint& at(int iIndexOfVertex);
00111 const TLineSegment edge(int iIndexOfTailVertex) const;
00112 const TVector vector(int iIndexOfTailVertex) const;
00113 const TPlane& plane() const;
00114 TPlane& plane();
00115 const TVector normal() const;
00116 const XYZ majorAxis() const;
00117
00118 void add(const TPoint& iVertex);
00119 void insert(int iIndexOfVertex, const TPoint& iVertex);
00120 void remove(int iIndexOfVertex);
00121
00122 const bool isEmpty() const;
00123 const size_t size() const;
00124
00125 const TValue signedArea() const;
00126 const TValue area() const;
00127 const TValue perimeter() const;
00128 const TPointH vertexCentroid() const;
00129 const TPointH surfaceCentroid() const;
00130
00131 const bool isSimple() const;
00132 const bool isConvex() const;
00133 const bool isConcave() const;
00134 const Orientation orientation() const;
00135
00136 const bool isReflex(int iIndexOfVertex) const;
00137
00138 const SimplePolygon2D<T> mapping(XYZ iAxis) const;
00139
00140 const Side classify(const TPoint& iP) const;
00141 const bool contains(const TPoint& iP) const;
00142
00143 void flip();
00144
00145 private:
00146
00147 const bool isInRange(int iIndexOfVertex) const;
00148
00149 typedef std::vector<TPoint> TVertices;
00150
00151 TVertices vertices_;
00152 TPlane plane_;
00153 };
00154
00155 template<typename T, class EP, class NP, class PP>
00156 Result intersect(const SimplePolygon3D<T, EP, NP>& iPolygon,
00157 const LineSegment3D<T, PP>& iSegment,
00158 T& oT, const T& iMinT = 0);
00159
00160 template<typename T, class EP1, class NP1, class EP2, class NP2>
00161 SimplePolygon3D<T, EP2, NP2> clip(const Plane3D<T, EP1, NP1>& iPlane,
00162 const SimplePolygon3D<T, EP2, NP2>& iPolygon);
00163
00164 template <typename T, class EP, class NP>
00165 io::XmlOStream& operator<<(io::XmlOStream& ioOStream, const SimplePolygon3D<T, EP, NP>& iPolygon);
00166
00167 template <typename T, class EP, class NP>
00168 std::ostream& operator<<(std::ostream& ioOStream, const SimplePolygon3D<T, EP, NP>& iPolygon);
00169
00170 }
00171
00172 }
00173
00174 #include "simple_polygon_3d.inl"
00175
00176 #define LASS_PRIM_HAVE_PY_EXPORT_TRAITS_SIMPLE_POLYGON_3D
00177 #ifdef LASS_GUARDIAN_OF_INCLUSION_UTIL_PYOBJECT_PLUS_H
00178 # include "pyobject_util.h"
00179 #endif
00180
00181 #ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_AABB_3D_H
00182 # include "aabb_3d_simple_polygon_3d.h"
00183 #endif
00184
00185 #ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_RAY_3D_H
00186 # include "ray_3d_simple_polygon_3d.h"
00187 #endif
00188
00189 #endif
00190
00191