GEOS  3.6.1
EdgeEnd.h
1 /**********************************************************************
2  *
3  * GEOS - Geometry Engine Open Source
4  * http://geos.osgeo.org
5  *
6  * Copyright (C) 2011 Sandro Santilli <strk@keybit.net>
7  * Copyright (C) 2005-2006 Refractions Research Inc.
8  * Copyright (C) 2001-2002 Vivid Solutions Inc.
9  *
10  * This is free software; you can redistribute and/or modify it under
11  * the terms of the GNU Lesser General Public Licence as published
12  * by the Free Software Foundation.
13  * See the COPYING file for more information.
14  *
15  **********************************************************************
16  *
17  * Last port: geomgraph/EdgeEnd.java r428 (JTS-1.12+)
18  *
19  **********************************************************************/
20 
21 
22 #ifndef GEOS_GEOMGRAPH_EDGEEND_H
23 #define GEOS_GEOMGRAPH_EDGEEND_H
24 
25 #include <geos/export.h>
26 #include <geos/geom/Coordinate.h> // for p0,p1
27 #include <geos/geomgraph/Label.h> // for composition
28 #include <geos/inline.h>
29 
30 #include <string>
31 
32 // Forward declarations
33 namespace geos {
34  namespace algorithm {
35  class BoundaryNodeRule;
36  }
37  namespace geomgraph {
38  class Edge;
39  class Node;
40  }
41 }
42 
43 namespace geos {
44 namespace geomgraph { // geos.geomgraph
45 
56 class GEOS_DLL EdgeEnd {
57 
58 public:
59 
60  friend std::ostream& operator<< (std::ostream&, const EdgeEnd&);
61 
62  EdgeEnd();
63 
64  virtual ~EdgeEnd() {}
65 
73  EdgeEnd(Edge* newEdge, const geom::Coordinate& newP0,
74  const geom::Coordinate& newP1,
75  const Label& newLabel);
76 
83  EdgeEnd(Edge* newEdge, const geom::Coordinate& newP0,
84  const geom::Coordinate& newP1);
85 
86  Edge* getEdge() { return edge; }
87  //virtual Edge* getEdge() { return edge; }
88 
89  Label& getLabel() { return label; }
90 
91  const Label& getLabel() const { return label; }
92 
93  virtual geom::Coordinate& getCoordinate();
94 
95  const geom::Coordinate& getCoordinate() const { return p0; }
96 
97  virtual geom::Coordinate& getDirectedCoordinate();
98 
99  virtual int getQuadrant();
100 
101  virtual double getDx();
102 
103  virtual double getDy();
104 
105  virtual void setNode(Node* newNode);
106 
107  virtual Node* getNode();
108 
109  virtual int compareTo(const EdgeEnd *e) const;
110 
127  virtual int compareDirection(const EdgeEnd *e) const;
128 
129  virtual void computeLabel(const algorithm::BoundaryNodeRule& bnr);
130 
131  virtual std::string print() const;
132 
133 protected:
134 
135  Edge* edge;// the parent edge of this edge end
136 
137  Label label;
138 
139  EdgeEnd(Edge* newEdge);
140 
141  virtual void init(const geom::Coordinate& newP0,
142  const geom::Coordinate& newP1);
143 
144 private:
145 
147  Node* node;
148 
150  geom::Coordinate p0, p1;
151 
153  double dx, dy;
154 
155  int quadrant;
156 };
157 
158 std::ostream& operator<< (std::ostream&, const EdgeEnd&);
159 
160 struct GEOS_DLL EdgeEndLT {
161  bool operator()(const EdgeEnd *s1, const EdgeEnd *s2) const {
162  return s1->compareTo(s2)<0;
163  }
164 };
165 
166 } // namespace geos.geomgraph
167 } // namespace geos
168 
169 //#ifdef GEOS_INLINE
170 //# include "geos/geomgraph/EdgeEnd.inl"
171 //#endif
172 
173 #endif // ifndef GEOS_GEOMGRAPH_EDGEEND_H
Coordinate is the lightweight class used to store coordinates.
Definition: Coordinate.h:60
Models the end of an edge incident on a node.
Definition: EdgeEnd.h:56
Definition: BoundaryNodeRule.h:50
A Label indicates the topological relationship of a component of a topology graph to a given Geometry...
Definition: Label.h:57
Basic namespace for all GEOS functionalities.
Definition: IndexedNestedRingTester.h:25
Definition: geomgraph/Node.h:62
Definition: geomgraph/Edge.h:66