19 #ifndef GEOS_TRIANGULATE_QUADEDGE_QUADEDGESUBDIVISION_H
20 #define GEOS_TRIANGULATE_QUADEDGE_QUADEDGESUBDIVISION_H
25 #include <unordered_set>
28 #include <geos/geom/MultiLineString.h>
29 #include <geos/triangulate/quadedge/QuadEdgeLocator.h>
30 #include <geos/triangulate/quadedge/Vertex.h>
36 class CoordinateSequence;
37 class GeometryCollection;
38 class MultiLineString;
39 class GeometryFactory;
45 namespace triangulate {
49 class TriangleVisitor;
51 const double EDGE_COINCIDENCE_TOL_FACTOR = 1000;
78 class GEOS_DLL QuadEdgeSubdivision {
80 typedef std::vector<QuadEdge*> QuadEdgeList;
90 static void getTriangleEdges(
const QuadEdge& startQE,
91 const QuadEdge* triEdge[3]);
94 QuadEdgeList quadEdges;
95 QuadEdgeList createdEdges;
98 double edgeCoincidenceTolerance;
101 std::unique_ptr<QuadEdgeLocator> locator;
102 bool visit_state_clean;
120 virtual void initSubdiv(
QuadEdge* initEdges[3]);
151 inline const QuadEdgeList&
165 setLocator(std::unique_ptr<QuadEdgeLocator> p_locator)
167 this->locator = std::move(p_locator);
233 locate(
const Vertex& v)
const
235 return locator->locate(v);
251 return locator->locate(
Vertex(p));
290 bool isFrameEdge(
const QuadEdge& e)
const;
300 bool isFrameBorderEdge(
const QuadEdge& e)
const;
308 bool isFrameVertex(
const Vertex& v)
const;
342 std::unique_ptr<QuadEdgeList> getPrimaryEdges(
bool includeFrame);
351 typedef std::stack<QuadEdge*> QuadEdgeStack;
352 typedef std::vector<std::unique_ptr<geom::CoordinateSequence>> TriList;
377 QuadEdge** fetchTriangleToVisit(
QuadEdge* edge, QuadEdgeStack& edgeStack,
bool includeFrame);
385 void getTriangleCoordinates(TriList* triList,
bool includeFrame);
388 class TriangleCoordinatesVisitor;
389 class TriangleCircumcentreVisitor;
439 std::unique_ptr<geom::MultiLineString> getVoronoiDiagramEdges(
const geom::GeometryFactory& geomFact);
452 std::vector<std::unique_ptr<geom::Geometry>> getVoronoiCellPolygons(
const geom::GeometryFactory& geomFact);
465 std::vector<std::unique_ptr<geom::Geometry>> getVoronoiCellEdges(
const geom::GeometryFactory& geomFact);
480 std::unique_ptr<QuadEdgeSubdivision::QuadEdgeList> getVertexUniqueEdges(
bool includeFrame);
514 #endif //GEOS_TRIANGULATE_QUADEDGE_QUADEDGESUBDIVISION_H