25#include <unordered_set>
29#include <geos/geom/MultiLineString.h>
30#include <geos/triangulate/quadedge/QuadEdge.h>
31#include <geos/triangulate/quadedge/QuadEdgeLocator.h>
32#include <geos/triangulate/quadedge/QuadEdgeQuartet.h>
33#include <geos/triangulate/quadedge/Vertex.h>
39class CoordinateSequence;
40class GeometryCollection;
48namespace triangulate {
80 typedef std::vector<QuadEdge*> QuadEdgeList;
98 std::deque<QuadEdgeQuartet> quadEdges;
99 std::array<QuadEdge*, 3> startingEdges;
101 double edgeCoincidenceTolerance;
102 std::array<Vertex, 3> frameVertex;
104 std::unique_ptr<QuadEdgeLocator> locator;
105 bool visit_state_clean;
123 virtual void initSubdiv();
154 inline std::deque<QuadEdgeQuartet>&
170 this->locator = std::move(p_locator);
237 return locator->locate(v);
253 return locator->locate(
Vertex(p));
353 typedef std::stack<QuadEdge*> QuadEdgeStack;
354 typedef std::vector<std::unique_ptr<geom::CoordinateSequence>> TriList;
361 std::array<QuadEdge*, 3> m_triEdges;
379 std::array<QuadEdge*, 3>* fetchTriangleToVisit(
QuadEdge* edge, QuadEdgeStack& edgeStack,
bool includeFrame);
387 void getTriangleCoordinates(TriList* triList,
bool includeFrame);
390 class TriangleCoordinatesVisitor;
391 class TriangleCircumcentreVisitor;
Coordinate is the lightweight class used to store coordinates.
Definition Coordinate.h:217
An Envelope defines a rectangulare region of the 2D coordinate plane.
Definition Envelope.h:59
Supplies a set of utility methods for building Geometry objects from CoordinateSequence or other Geom...
Definition GeometryFactory.h:70
A class that contains the QuadEdges representing a planar subdivision that models a triangulation.
Definition QuadEdgeSubdivision.h:78
QuadEdge * locateFromEdge(const Vertex &v, const QuadEdge &startEdge) const
Locates an edge of a triangle which contains a location specified by a Vertex v.
bool isFrameBorderEdge(const QuadEdge &e) const
Tests whether a QuadEdge is an edge on the border of the frame facets and the internal facets....
std::vector< std::unique_ptr< geom::Geometry > > getVoronoiCellEdges(const geom::GeometryFactory &geomFact)
Gets a List of LineStrings for the Voronoi cells of this triangulation.
std::unique_ptr< QuadEdgeSubdivision::QuadEdgeList > getVertexUniqueEdges(bool includeFrame)
Gets a collection of QuadEdges whose origin vertices are a unique set which includes all vertices in ...
QuadEdge & insertSite(const Vertex &v)
Inserts a new site into the Subdivision, connecting it to the vertices of the containing triangle (or...
bool isFrameEdge(const QuadEdge &e) const
Tests whether a QuadEdge is an edge incident on a frame triangle vertex.
virtual QuadEdge & connect(QuadEdge &a, QuadEdge &b)
Creates a new QuadEdge connecting the destination of a to the origin of b, in such a way that all thr...
static void getTriangleEdges(const QuadEdge &startQE, const QuadEdge *triEdge[3])
Gets the edges for the triangle to the left of the given QuadEdge.
bool isFrameVertex(const Vertex &v) const
Tests whether a vertex is a vertex of the outer triangle.
void remove(QuadEdge &e)
Deletes a quadedge from the subdivision. Linked quadedges are updated to reflect the deletion.
QuadEdge * locate(const geom::Coordinate &p)
Finds a quadedge of a triangle containing a location specified by a geom::Coordinate,...
Definition QuadEdgeSubdivision.h:251
std::unique_ptr< geom::GeometryCollection > getTriangles(const geom::GeometryFactory &geomFact)
Gets the geometry for the triangles in a triangulated subdivision as a GeometryCollection of triangul...
std::deque< QuadEdgeQuartet > & getEdges()
Gets the collection of base QuadEdges (one for every pair of vertices which is connected).
Definition QuadEdgeSubdivision.h:155
std::vector< std::unique_ptr< geom::Geometry > > getVoronoiCellPolygons(const geom::GeometryFactory &geomFact)
Gets a List of Polygons for the Voronoi cells of this triangulation.
QuadEdge * locate(const geom::Coordinate &p0, const geom::Coordinate &p1)
Locates the edge between the given vertices, if it exists in the subdivision.
std::unique_ptr< geom::Geometry > getVoronoiCellPolygon(const QuadEdge *qe, const geom::GeometryFactory &geomFact)
Gets the Voronoi cell around a site specified by the origin of a QuadEdge.
QuadEdgeSubdivision(const geom::Envelope &env, double tolerance)
Creates a new instance of a quad-edge subdivision based on a frame triangle that encloses a supplied ...
std::unique_ptr< geom::MultiLineString > getVoronoiDiagramEdges(const geom::GeometryFactory &geomFact)
Gets the cells in the Voronoi diagram for this triangulation.
double getTolerance() const
Gets the vertex-equality tolerance value used in this subdivision.
Definition QuadEdgeSubdivision.h:132
virtual QuadEdge & makeEdge(const Vertex &o, const Vertex &d)
Creates a new quadedge, recording it in the edges list.
bool isOnEdge(const QuadEdge &e, const geom::Coordinate &p) const
Tests whether a Coordinate lies on a QuadEdge, up to a tolerance determined by the subdivision tolera...
QuadEdge * locate(const Vertex &v) const
Finds a quadedge of a triangle containing a location specified by a Vertex, if one exists.
Definition QuadEdgeSubdivision.h:235
std::unique_ptr< QuadEdgeList > getPrimaryEdges(bool includeFrame)
Gets all primary quadedges in the subdivision.
const geom::Envelope & getEnvelope() const
Gets the envelope of the Subdivision (including the frame).
Definition QuadEdgeSubdivision.h:143
std::unique_ptr< geom::GeometryCollection > getVoronoiDiagram(const geom::GeometryFactory &geomFact)
Gets the cells in the Voronoi diagram for this triangulation. The cells are returned as a GeometryCol...
void setLocator(std::unique_ptr< QuadEdgeLocator > p_locator)
Sets the QuadEdgeLocator to use for locating containing triangles in this subdivision.
Definition QuadEdgeSubdivision.h:168
bool isVertexOfEdge(const QuadEdge &e, const Vertex &v) const
Tests whether a Vertex is the start or end vertex of a QuadEdge, up to the subdivision tolerance dist...
std::unique_ptr< geom::MultiLineString > getEdges(const geom::GeometryFactory &geomFact)
Gets the geometry for the edges in the subdivision as a MultiLineString containing 2-point lines.
std::unique_ptr< geom::Geometry > getVoronoiCellEdge(const QuadEdge *qe, const geom::GeometryFactory &geomFact)
Gets the Voronoi cell edge around a site specified by the origin of a QuadEdge.
A class that represents the edge data structure which implements the quadedge algebra.
Definition QuadEdge.h:53
An interface for algorithms which process the triangles in a QuadEdgeSubdivision.
Definition TriangleVisitor.h:33
Models a site (node) in a QuadEdgeSubdivision.
Definition Vertex.h:60
Basic namespace for all GEOS functionalities.
Definition geos.h:39