GEOS 3.9.1
geomgraph/DirectedEdgeStar.h
1/**********************************************************************
2 *
3 * GEOS - Geometry Engine Open Source
4 * http://geos.osgeo.org
5 *
6 * Copyright (C) 2011 Sandro Santilli <strk@kbt.io>
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/DirectedEdgeStar.java r428 (JTS-1.12+)
18 *
19 **********************************************************************/
20
21
22#ifndef GEOS_GEOMGRAPH_DIRECTEDEDGEENDSTAR_H
23#define GEOS_GEOMGRAPH_DIRECTEDEDGEENDSTAR_H
24
25#include <geos/export.h>
26#include <set>
27#include <string>
28#include <vector>
29
30#include <geos/geomgraph/EdgeEndStar.h> // for inheritance
31#include <geos/geomgraph/Label.h> // for private member
32#include <geos/geom/Coordinate.h> // for p0,p1
33
34#include <geos/inline.h>
35
36// Forward declarations
37namespace geos {
38namespace geomgraph {
39class DirectedEdge;
40class EdgeRing;
41}
42}
43
44namespace geos {
45namespace geomgraph { // geos.geomgraph
46
55class GEOS_DLL DirectedEdgeStar: public EdgeEndStar {
56
57public:
58
60 :
62 label(),
63 resultAreaEdgesComputed(false)
64 {}
65
66 ~DirectedEdgeStar() override = default;
67
69 void insert(EdgeEnd* ee) override;
70
71 Label&
72 getLabel()
73 {
74 return label;
75 }
76
77 int getOutgoingDegree();
78
79 int getOutgoingDegree(EdgeRing* er);
80
81 DirectedEdge* getRightmostEdge();
82
86 void computeLabelling(std::vector<GeometryGraph*>* geom) override; // throw(TopologyException *);
87
92
94 void updateLabelling(const Label& nodeLabel);
95
96
114 void linkResultDirectedEdges(); // throw(TopologyException *);
115
116 void linkMinimalDirectedEdges(EdgeRing* er);
117
118 void linkAllDirectedEdges();
119
127
132
133 std::string print() const override;
134
135private:
136
140 std::vector<DirectedEdge*> resultAreaEdgeList;
141
142 Label label;
143
144 bool resultAreaEdgesComputed;
145
149 const std::vector<DirectedEdge*>& getResultAreaEdges();
150
151
153 enum {
154 SCANNING_FOR_INCOMING = 1,
155 LINKING_TO_OUTGOING
156 };
157
158 int computeDepths(EdgeEndStar::iterator startIt,
159 EdgeEndStar::iterator endIt, int startDepth);
160};
161
162
163} // namespace geos.geomgraph
164} // namespace geos
165
166//#ifdef GEOS_INLINE
167//# include "geos/geomgraph/DirectedEdgeEndStar.inl"
168//#endif
169
170#endif // ifndef GEOS_GEOMGRAPH_DIRECTEDEDGEENDSTAR_H
171
A DirectedEdgeStar is an ordered list of outgoing DirectedEdges around a node.
Definition geomgraph/DirectedEdgeStar.h:55
void computeDepths(DirectedEdge *de)
Compute the DirectedEdge depths for a subsequence of the edge array.
void updateLabelling(const Label &nodeLabel)
Update incomplete dirEdge labels from the labelling for the node.
void linkResultDirectedEdges()
Traverse the star of DirectedEdges, linking the included edges together.
void findCoveredLineEdges()
Traverse the star of edges, maintaing the current location in the result area at this node (if any).
void insert(EdgeEnd *ee) override
Insert a directed edge in the list.
void mergeSymLabels()
For each dirEdge in the star, merge the label from the sym dirEdge into the label.
void computeLabelling(std::vector< GeometryGraph * > *geom) override
Compute the labelling for all dirEdges in this star, as well as the overall labelling.
A directed EdgeEnd.
Definition geomgraph/DirectedEdge.h:45
A EdgeEndStar is an ordered list of EdgeEnds around a node.
Definition EdgeEndStar.h:65
Models the end of an edge incident on a node.
Definition EdgeEnd.h:56
Definition geomgraph/EdgeRing.h:60
A Label indicates the topological relationship of a component of a topology graph to a given Geometry...
Definition Label.h:59
Basic namespace for all GEOS functionalities.
Definition IndexedNestedRingTester.h:26