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 
geos::geomgraph::DirectedEdgeStar
A DirectedEdgeStar is an ordered list of outgoing DirectedEdges around a node.
Definition: geomgraph/DirectedEdgeStar.h:55
geos::geomgraph::Label
A Label indicates the topological relationship of a component of a topology graph to a given Geometry...
Definition: Label.h:59
geos::geomgraph::EdgeRing
Definition: geomgraph/EdgeRing.h:60
geos
Basic namespace for all GEOS functionalities.
Definition: IndexedNestedRingTester.h:26
geos::geomgraph::EdgeEnd
Models the end of an edge incident on a node.
Definition: EdgeEnd.h:56
geos::geomgraph::DirectedEdgeStar::mergeSymLabels
void mergeSymLabels()
For each dirEdge in the star, merge the label from the sym dirEdge into the label.
geos::geomgraph::EdgeEndStar
A EdgeEndStar is an ordered list of EdgeEnds around a node.
Definition: EdgeEndStar.h:65
geos::geomgraph::DirectedEdgeStar::updateLabelling
void updateLabelling(const Label &nodeLabel)
Update incomplete dirEdge labels from the labelling for the node.
geos::geomgraph::DirectedEdgeStar::linkResultDirectedEdges
void linkResultDirectedEdges()
Traverse the star of DirectedEdges, linking the included edges together.
geos::geomgraph::DirectedEdgeStar::computeDepths
void computeDepths(DirectedEdge *de)
Compute the DirectedEdge depths for a subsequence of the edge array.
geos::geomgraph::DirectedEdgeStar::findCoveredLineEdges
void findCoveredLineEdges()
Traverse the star of edges, maintaing the current location in the result area at this node (if any).
geos::geomgraph::DirectedEdgeStar::insert
void insert(EdgeEnd *ee) override
Insert a directed edge in the list.
geos::geomgraph::DirectedEdge
A directed EdgeEnd.
Definition: geomgraph/DirectedEdge.h:45
geos::geomgraph::DirectedEdgeStar::computeLabelling
void computeLabelling(std::vector< GeometryGraph * > *geom) override
Compute the labelling for all dirEdges in this star, as well as the overall labelling.