DirectedEdgeStar.h

00001 /**********************************************************************
00002  * $Id: DirectedEdgeStar.h 1820 2006-09-06 16:54:23Z mloskot $
00003  *
00004  * GEOS - Geometry Engine Open Source
00005  * http://geos.refractions.net
00006  *
00007  * Copyright (C) 2005-2006 Refractions Research Inc.
00008  * Copyright (C) 2001-2002 Vivid Solutions Inc.
00009  *
00010  * This is free software; you can redistribute and/or modify it under
00011  * the terms of the GNU Lesser General Public Licence as published
00012  * by the Free Software Foundation. 
00013  * See the COPYING file for more information.
00014  *
00015  **********************************************************************/
00016 
00017 
00018 #ifndef GEOS_GEOMGRAPH_DIRECTEDEDGEENDSTAR_H
00019 #define GEOS_GEOMGRAPH_DIRECTEDEDGEENDSTAR_H
00020 
00021 #include <set>
00022 #include <string>
00023 #include <vector>
00024 
00025 #include <geos/geomgraph/EdgeEndStar.h>  // for inheritance
00026 #include <geos/geomgraph/Label.h>  // for private member
00027 #include <geos/geom/Coordinate.h>  // for p0,p1
00028 
00029 #include <geos/inline.h>
00030 
00031 // Forward declarations
00032 namespace geos {
00033         namespace geomgraph {
00034                 class DirectedEdge;
00035                 class EdgeRing;
00036         }
00037 }
00038 
00039 namespace geos {
00040 namespace geomgraph { // geos.geomgraph
00041 
00051 class DirectedEdgeStar: public EdgeEndStar {
00052 
00053 public:
00054 
00055         DirectedEdgeStar()
00056                 :
00057                 EdgeEndStar(),
00058                 resultAreaEdgeList(0),
00059                 label()
00060         {}
00061 
00062         ~DirectedEdgeStar() {
00063                 delete resultAreaEdgeList;
00064         }
00065 
00067         void insert(EdgeEnd *ee);
00068 
00069         Label &getLabel() { return label; }
00070 
00071         int getOutgoingDegree();
00072 
00073         int getOutgoingDegree(EdgeRing *er);
00074 
00075         DirectedEdge* getRightmostEdge();
00076 
00081         void computeLabelling(std::vector<GeometryGraph*> *geom); // throw(TopologyException *);
00082 
00087         void mergeSymLabels();
00088 
00090         void updateLabelling(Label *nodeLabel);
00091 
00092 
00110         void linkResultDirectedEdges(); // throw(TopologyException *);
00111 
00112         void linkMinimalDirectedEdges(EdgeRing *er);
00113 
00114         void linkAllDirectedEdges();
00115 
00122         void findCoveredLineEdges();
00123 
00129         void computeDepths(DirectedEdge *de);
00130 
00131         std::string print();
00132 
00133 private:
00134 
00138         std::vector<DirectedEdge*> *resultAreaEdgeList;
00139 
00140         Label label;
00141 
00145         std::vector<DirectedEdge*>* getResultAreaEdges();
00146 
00148         enum {
00149                 SCANNING_FOR_INCOMING=1,
00150                 LINKING_TO_OUTGOING
00151         };
00152 
00153         int computeDepths(EdgeEndStar::iterator startIt,
00154                 EdgeEndStar::iterator endIt, int startDepth);
00155 };
00156 
00157 
00158 } // namespace geos.geomgraph
00159 } // namespace geos
00160 
00161 //#ifdef GEOS_INLINE
00162 //# include "geos/geomgraph/DirectedEdgeEndStar.inl"
00163 //#endif
00164 
00165 #endif // ifndef GEOS_GEOMGRAPH_DIRECTEDEDGEENDSTAR_H
00166 
00167 /**********************************************************************
00168  * $Log$
00169  * Revision 1.4  2006/03/24 09:52:41  strk
00170  * USE_INLINE => GEOS_INLINE
00171  *
00172  * Revision 1.3  2006/03/23 15:10:29  strk
00173  * Dropped by-pointer TopologyException constructor, various small cleanups
00174  *
00175  * Revision 1.2  2006/03/15 17:17:41  strk
00176  * Added missing forward declarations
00177  *
00178  * Revision 1.1  2006/03/09 16:46:49  strk
00179  * geos::geom namespace definition, first pass at headers split
00180  *
00181  **********************************************************************/
00182 

Generated on Fri Mar 27 04:52:38 2009 for GEOS by  doxygen 1.5.4