GEOS 3.6.2
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
33namespace geos {
34 namespace algorithm {
35 class BoundaryNodeRule;
36 }
37 namespace geomgraph {
38 class Edge;
39 class Node;
40 }
41}
42
43namespace geos {
44namespace geomgraph { // geos.geomgraph
45
56class GEOS_DLL EdgeEnd {
57
58public:
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
133protected:
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
144private:
145
147 Node* node;
148
150 geom::Coordinate p0, p1;
151
153 double dx, dy;
154
155 int quadrant;
156};
157
158std::ostream& operator<< (std::ostream&, const EdgeEnd&);
159
160struct 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
Definition BoundaryNodeRule.h:50
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
EdgeEnd(Edge *newEdge, const geom::Coordinate &newP0, const geom::Coordinate &newP1, const Label &newLabel)
virtual int compareDirection(const EdgeEnd *e) const
EdgeEnd(Edge *newEdge, const geom::Coordinate &newP0, const geom::Coordinate &newP1)
Definition geomgraph/Edge.h:66
A Label indicates the topological relationship of a component of a topology graph to a given Geometry...
Definition Label.h:57
Definition geomgraph/Node.h:62
Contains classes and interfaces implementing fundamental computational geometry algorithms.
Definition Angle.h:33
Contains classes that implement topology graphs.
Definition IndexedNestedRingTester.h:34
Basic namespace for all GEOS functionalities.
Definition IndexedNestedRingTester.h:25