OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimPolygon.h
Go to the documentation of this file.
1 //*****************************************************************************
2 // FILE: ossimPolygon.h
3 //
4 // Copyright (C) 2001 ImageLinks, Inc.
5 //
6 // License: MIT
7 //
8 // See LICENSE.txt file in the top level directory for more details.
9 //
10 // AUTHOR: Oscar Kramer
11 //
12 // DESCRIPTION: Contains declaration of class ossimPolygon.
13 // This class provides utilities associated with N-vertex, convex
14 // (i.e., only two intersections for any line passing through the polygon).
15 //
16 // LIMITATIONS: None.
17 //
18 //*****************************************************************************
19 // $Id: ossimPolygon.h 22333 2013-07-26 15:55:36Z dlucas $
20 
21 #ifndef ossimPolygon_HEADER
22 #define ossimPolygon_HEADER
23 #include <iostream>
24 #include <vector>
25 using namespace std;
26 
27 #include <ossim/base/ossimDpt.h>
28 #include <ossim/base/ossimDrect.h>
29 #include <ossim/base/ossimIrect.h>
30 #include <vector>
31 class ossimLine;
32 
33 /******************************************************************************
34  *
35  * CLASS: ossimPolygon
36  *
37  *****************************************************************************/
39 {
40 public:
41  typedef std::vector<ossimPolygon> Vector;
42  ossimPolygon();
43  ossimPolygon(const vector<ossimIpt>& polygon);
44  ossimPolygon(const vector<ossimDpt>& polygon);
45  ossimPolygon(const vector<ossimGpt>& polygon);
46  ossimPolygon(int numVertices, const ossimDpt* vertex_array);
47 
48  ossimPolygon(const ossimPolygon& copy_this);
49 
55  ossimDpt v2,
56  ossimDpt v3,
57  ossimDpt v4);
58 
59  ossimPolygon(const ossimIrect& rect);
60  ossimPolygon(const ossimDrect& rect);
61 
62  ~ossimPolygon();
63 
64  ossimDpt& operator[](int index);
65 
66  const ossimDpt& operator[](int index)const;
67 
68  ossim_uint32 getVertexCount()const;
69 
70  ossim_uint32 getNumberOfVertices()const;
71 
73  double area()const;
74 
75  void getIntegerBounds(ossim_int32& minX,
76  ossim_int32& minY,
77  ossim_int32& maxX,
78  ossim_int32& maxY)const;
79  void getFloatBounds(ossim_float64& minX,
80  ossim_float64& minY,
81  ossim_float64& maxX,
82  ossim_float64& maxY)const;
83 
84  void getBoundingRect(ossimIrect& rect)const;
85  void getBoundingRect(ossimDrect& rect)const;
86 
93  void getMinimumBoundingRect(ossimPolygon& minRect) const;
94 
95  void roundToIntegerBounds(bool compress=false);
96 
97  void clear();
98 
99  void addPoint(const ossimDpt& pt);
100  void addPoint(double x, double y);
101 
102  ossimDpt midPoint()const;
103 
107  bool hasNans()const;
108 
109  const vector<ossimDpt>& getVertexList()const;
110 
114  bool clipToRect(vector<ossimPolygon>& result,
115  const ossimDrect& rect)const;
116 
117 
126  bool clipLineSegment(ossimDpt& p1, ossimDpt& p2) const;
127 
132  bool pointWithin(const ossimDpt& point) const;
133 
134  bool isPointWithin(const ossimDpt& point) const;
135 
140  bool isRectWithin(const ossimIrect &rect) const;
141 
146  bool rectIntersects(const ossimIrect &rect) const;
147 
152  bool isPolyWithin(const ossimPolygon &poly) const;
153 
159  bool vertex(int index, ossimDpt& tbd_vertex) const;
160 
168  bool nextVertex(ossimDpt& tbd_vertex) const;
169 
170  void reverseOrder();
174  const ossimPolygon& operator= (const ossimPolygon& copy_this);
175  const ossimPolygon& operator= (const vector<ossimDpt>& vertexList);
176  const ossimPolygon& operator= (const vector<ossimGpt>& vertexList);
177  const ossimPolygon& operator= (const vector<ossimIpt>& vertexList);
178  const ossimPolygon& operator= (const ossimIrect& rect);
179  const ossimPolygon& operator= (const ossimDrect& rect);
180  bool operator==(const ossimPolygon& compare_this) const;
181  bool operator!=(const ossimPolygon& compare_this) const;
182 
183  const ossimPolygon& operator *=(const ossimDpt& scale);
184  const ossimPolygon& operator *=(double scale);
185 
186  ossimPolygon operator *(const ossimDpt& scale)const;
187  ossimPolygon operator *(double scale)const;
188 
189  void resize(ossim_uint32 newSize);
190 
194  void removeVertex(int vertex);
195 
199  void print(ostream& os) const;
200  friend ostream& operator<<(ostream&, const ossimPolygon&);
201 
202 
203  bool saveState(ossimKeywordlist& kwl,
204  const char* prefix=0)const;
205 
206  bool loadState(const ossimKeywordlist& kwl,
207  const char* prefix=0);
208 
209  ossimVertexOrdering checkOrdering()const;
210 
211  ossimVertexOrdering getOrdering()const;
212 
213 protected:
219  void getCentroid(ossimDpt &centroid) const;
220 
225  bool shrink(ossimPolygon &dest, double inset) const;
226 
231  void removeSmallestContributingVertex();
232 
233  void intersectEdge(ossimDpt& result,
234  const ossimLine& segment,
235  const ossimDrect& rect,
236  int edge);
237 
238  bool isInsideEdge(const ossimDpt& pt,
239  const ossimDrect& rect,
240  int edge)const;
241 
247  void fitCircleInsideVertex(ossimDpt &destPt, unsigned int vertex, double radius) const;
248 
250  vector<ossimDpt> theVertexList;
252 };
253 
254 #endif /* End of "#ifndef ossimPolygon_HEADER" */
ossim_uint32 x
#define OSSIMDLLEXPORT
bool operator!=(const ossimRefPtr< _Tp1 > &__a, const ossimRefPtr< _Tp2 > &__b) noexcept
Definition: ossimRefPtr.h:111
Represents serializable keyword/value map.
ossim_uint32 y
std::ostream & print(H5::H5File *file, std::ostream &out)
Print method.
Definition: ossimH5Util.cpp:41
ossimRationalNumber operator*(ossim_int32 i, ossimRationalNumber &r)
double ossim_float64
ostream & operator<<(ostream &out, const ossimAxes &axes)
Definition: ossimAxes.h:88
ossimVertexOrdering
unsigned int ossim_uint32
bool operator==(const ossimRefPtr< _Tp1 > &__a, const ossimRefPtr< _Tp2 > &__b) noexcept
Definition: ossimRefPtr.h:101
std::vector< ossimPolygon > Vector
Definition: ossimPolygon.h:41
ossim_int32 theCurrentVertex
Definition: ossimPolygon.h:251
vector< ossimDpt > theVertexList
Definition: ossimPolygon.h:250
ossimVertexOrdering theOrderingType
Definition: ossimPolygon.h:249
std::basic_ostream< char > ostream
Base class for char output streams.
Definition: ossimIosFwd.h:23
int ossim_int32