GEOS  3.11.1
geomgraph/DirectedEdge.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/DirectedEdge.java r428 (JTS-1.12)
18  *
19  **********************************************************************/
20 
21 
22 #pragma once
23 
24 #include <geos/export.h>
25 #include <string>
26 
27 #include <geos/geom/Location.h>
28 #include <geos/geomgraph/EdgeEnd.h> // for inheritance
29 
30 // Forward declarations
31 namespace geos {
32 namespace geomgraph {
33 class Edge;
34 class EdgeRing;
35 }
36 }
37 
38 namespace geos {
39 namespace geomgraph { // geos.geomgraph
40 
42 class GEOS_DLL DirectedEdge: public EdgeEnd {
43 
44 public:
45 
52  static int depthFactor(geom::Location currLocation, geom::Location nextLocation);
53 
54  //DirectedEdge();
55  //virtual ~DirectedEdge();
56 
57  DirectedEdge(Edge* newEdge, bool newIsForward);
58 
59  // this is no different from Base class, no need to override
60  //Edge* getEdge();
61 
62  void setInResult(bool v)
63  {
64  isInResultVar = v;
65  };
66 
67  bool isInResult() const
68  {
69  return isInResultVar;
70  };
71 
72  bool isVisited() const
73  {
74  return isVisitedVar;
75  };
76 
77 
78  void setVisited(bool v)
79  {
80  isVisitedVar = v;
81  };
82 
83  void setEdgeRing(EdgeRing* er)
84  {
85  edgeRing = er;
86  };
87 
88  EdgeRing* getEdgeRing() const
89  {
90  return edgeRing;
91  };
92 
93  void setMinEdgeRing(EdgeRing* mer)
94  {
95  minEdgeRing = mer;
96  };
97 
98  EdgeRing* getMinEdgeRing() const
99  {
100  return minEdgeRing;
101  };
102 
103  int getDepth(int position) const
104  {
105  return depth[position];
106  };
107 
108  void setDepth(int position, int newDepth);
109 
110  int getDepthDelta() const;
111 
117  void setVisitedEdge(bool newIsVisited);
118 
127  {
128  return sym;
129  };
130 
131  bool isForward() const
132  {
133  return isForwardVar;
134  };
135 
136  void setSym(DirectedEdge* de)
137  {
138  sym = de;
139  };
140 
141  DirectedEdge* getNext() const
142  {
143  return next;
144  };
145 
146  void setNext(DirectedEdge* newNext)
147  {
148  next = newNext;
149  };
150 
151  DirectedEdge* getNextMin() const
152  {
153  return nextMin;
154  };
155 
156  void setNextMin(DirectedEdge* nm)
157  {
158  nextMin = nm;
159  };
160 
169  bool isLineEdge();
170 
180  bool isInteriorAreaEdge();
181 
189  void setEdgeDepths(int position, int newDepth);
190 
191  std::string print() const override;
192 
193  std::string printEdge();
194 
195 
196 protected:
197 
198  bool isForwardVar;
199 
200 
201 private:
202 
203  bool isInResultVar;
204 
205  bool isVisitedVar;
206 
208  DirectedEdge* sym;
209 
211  DirectedEdge* next;
212 
214  DirectedEdge* nextMin;
215 
217  EdgeRing* edgeRing;
218 
220  EdgeRing* minEdgeRing;
221 
226  int depth[3];
227 
229  void computeDirectedLabel();
230 
231 
232 };
233 
234 } // namespace geos.geomgraph
235 } // namespace geos
236 
A directed EdgeEnd.
Definition: geomgraph/DirectedEdge.h:42
Models the end of an edge incident on a node.
Definition: EdgeEnd.h:54
Definition: geomgraph/EdgeRing.h:57
Location
Constants representing the location of a point relative to a geometry.
Definition: Location.h:32
Basic namespace for all GEOS functionalities.
Definition: Angle.h:25
DirectedEdge * getSym() const
Each Edge gives rise to a pair of symmetric DirectedEdges, in opposite directions.
Definition: geomgraph/DirectedEdge.h:126
Definition: geomgraph/Edge.h:63