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
37 namespace geos {
38 namespace geomgraph {
39 class DirectedEdge;
40 class EdgeRing;
41 }
42 }
43 
44 namespace geos {
45 namespace geomgraph { // geos.geomgraph
46 
55 class GEOS_DLL DirectedEdgeStar: public EdgeEndStar {
56 
57 public:
58 
60  :
61  EdgeEndStar(),
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 
135 private:
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