GEOS  3.3.3
geomgraph/DirectedEdgeStar.h
1 /**********************************************************************
2  * $Id: DirectedEdgeStar.h 2557 2009-06-08 09:30:55Z strk $
3  *
4  * GEOS - Geometry Engine Open Source
5  * http://geos.refractions.net
6  *
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 rev. 1.4 (JTS-1.10)
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  resultAreaEdgeList(0),
63  label()
64  {}
65 
66  ~DirectedEdgeStar() {
67  delete resultAreaEdgeList;
68  }
69 
71  void insert(EdgeEnd *ee);
72 
73  Label &getLabel() { return label; }
74 
75  int getOutgoingDegree();
76 
77  int getOutgoingDegree(EdgeRing *er);
78 
79  DirectedEdge* getRightmostEdge();
80 
85  void computeLabelling(std::vector<GeometryGraph*> *geom); // throw(TopologyException *);
86 
91  void mergeSymLabels();
92 
94  void updateLabelling(Label *nodeLabel);
95 
96 
114  void linkResultDirectedEdges(); // throw(TopologyException *);
115 
116  void linkMinimalDirectedEdges(EdgeRing *er);
117 
118  void linkAllDirectedEdges();
119 
126  void findCoveredLineEdges();
127 
133  void computeDepths(DirectedEdge *de);
134 
135  std::string print();
136 
137 private:
138 
142  std::vector<DirectedEdge*> *resultAreaEdgeList;
143 
144  Label label;
145 
149  std::vector<DirectedEdge*>* getResultAreaEdges();
150 
152  enum {
153  SCANNING_FOR_INCOMING=1,
154  LINKING_TO_OUTGOING
155  };
156 
157  int computeDepths(EdgeEndStar::iterator startIt,
158  EdgeEndStar::iterator endIt, int startDepth);
159 };
160 
161 
162 } // namespace geos.geomgraph
163 } // namespace geos
164 
165 //#ifdef GEOS_INLINE
166 //# include "geos/geomgraph/DirectedEdgeEndStar.inl"
167 //#endif
168 
169 #endif // ifndef GEOS_GEOMGRAPH_DIRECTEDEDGEENDSTAR_H
170 
171 /**********************************************************************
172  * $Log$
173  * Revision 1.4 2006/03/24 09:52:41 strk
174  * USE_INLINE => GEOS_INLINE
175  *
176  * Revision 1.3 2006/03/23 15:10:29 strk
177  * Dropped by-pointer TopologyException constructor, various small cleanups
178  *
179  * Revision 1.2 2006/03/15 17:17:41 strk
180  * Added missing forward declarations
181  *
182  * Revision 1.1 2006/03/09 16:46:49 strk
183  * geos::geom namespace definition, first pass at headers split
184  *
185  **********************************************************************/
186