22 #ifndef GEOS_GEOMGRAPH_EDGERING_H
23 #define GEOS_GEOMGRAPH_EDGERING_H
25 #include <geos/export.h>
26 #include <geos/geomgraph/Label.h>
28 #include <geos/inline.h>
36 #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
42 class GeometryFactory;
46 class CoordinateSequence;
58 class GEOS_DLL EdgeRing {
61 friend std::ostream& operator<< (std::ostream& os,
const EdgeRing& er);
63 EdgeRing(DirectedEdge *newStart,
64 const geom::GeometryFactory *newGeometryFactory);
77 geom::LinearRing* getLinearRing();
85 void setShell(EdgeRing *newShell);
87 void addHole(EdgeRing *edgeRing);
94 geom::Polygon* toPolygon(
const geom::GeometryFactory* geometryFactory);
103 virtual DirectedEdge* getNext(DirectedEdge *de)=0;
105 virtual void setEdgeRing(DirectedEdge *de, EdgeRing *er)=0;
110 std::vector<DirectedEdge*>& getEdges();
112 int getMaxNodeDegree();
120 bool containsPoint(
const geom::Coordinate& p);
133 for (std::vector<EdgeRing*>::const_iterator
134 it=holes.begin(), itEnd=holes.end();
140 assert(hole->getShell()==
this);
143 #endif // ndef NDEBUG
148 DirectedEdge *startDe;
150 const geom::GeometryFactory *geometryFactory;
153 void computePoints(DirectedEdge *newStart);
155 void mergeLabel(Label& deLabel);
169 void mergeLabel(Label& deLabel,
int geomIndex);
171 void addPoints(Edge *edge,
bool isForward,
bool isFirstEdge);
174 std::vector<EdgeRing*> holes;
181 std::vector<DirectedEdge*> edges;
183 geom::CoordinateSequence* pts;
189 geom::LinearRing *ring;
196 void computeMaxNodeDegree();
200 std::ostream& operator<< (std::ostream& os,
const EdgeRing& er);
213 #endif // ifndef GEOS_GEOMGRAPH_EDGERING_H