Ilwis-Objects  1.0
GIS and Remote Sensing framework for data access and processing
 All Classes Functions Enumerations Pages
vertexiterator.h
1 #ifndef VERTEXITERATOR_H
2 #define VERTEXITERATOR_H
3 
4 namespace geos{
5 namespace geom {
6 class LineString;
7 }
8 }
9 namespace Ilwis {
10 
11 class KERNELSHARED_EXPORT VertexIterator : public std::iterator<std::random_access_iterator_tag, geos::geom::Coordinate>
12 {
13 public:
15  VertexIterator(geos::geom::Geometry *geom);
16  VertexIterator(const UPGeometry &geom);
17  //VertexIterator(const VertexIterator& iter);
18 
19  VertexIterator& operator=(const VertexIterator& iter);
20 
21  VertexIterator& operator++();
22  VertexIterator operator++(int n);
23  VertexIterator& operator--();
24  VertexIterator operator--(int n);
25  VertexIterator& operator+=(int n);
26  VertexIterator& operator-=(int n);
27  geos::geom::Coordinate& operator[](quint32 n);
28  bool operator==(const VertexIterator& iter) const;
29  bool operator!=(const VertexIterator& iter) const;
30  bool operator<(const VertexIterator& iter) const;
31  bool operator>(const VertexIterator& iter) const;
32  bool operator<=(const VertexIterator& iter) const;
33  bool operator>=(const VertexIterator& iter) const;
34  const geos::geom::Coordinate& operator*() const;
35  geos::geom::Coordinate& operator*();
36  geos::geom::Coordinate* operator->();
37  VertexIterator operator-(int n);
38  VertexIterator operator+(int n);
39  bool nextSubGeometry() const;
40 
41 private:
42  void move(int n);
43  void setFromGeometry(geos::geom::Geometry *geom);
44  bool compatible(const VertexIterator& iter) const;
45  std::vector<const geos::geom::CoordinateSequence *> _coordinates;
46  std::vector<const geos::geom::Coordinate *> _pointCoordinates;
47  bool _nextSubGeometry = false;
48 
49  int _index = 0;
50  int _partIndex = 0;
51  qint32 _linearSize = 0;
52  qint32 _linearPosition = 0;
53  bool _pointMode = false;
54  bool _polygonMode = false;
55 
56 
57  void storeLineString(const geos::geom::LineString *cline, int index);
58 };
59 
60 }
61 
62 inline Ilwis::VertexIterator begin(std::unique_ptr<geos::geom::Geometry> &geom) {
63  return Ilwis::VertexIterator(geom);
64 }
65 
66 inline Ilwis::VertexIterator end(std::unique_ptr<geos::geom::Geometry> &geom) {
67  Ilwis::VertexIterator iter(geom);
68  iter += 100000000; // at the end;
69  return iter;
70 }
71 
72 #endif // VERTEXITERATOR_H