GEOS: geos::triangulate::quadedge::QuadEdgeSubdivision Class Reference

GEOS 3.5.0

- Main Page
- Related Pages
- Namespaces
- Classes
- Files

- Class List
- Class Hierarchy
- Class Members

Public Types | Public Member Functions | Static Public Member Functions | List of all members
geos::triangulate::quadedge::QuadEdgeSubdivision Class Reference

`#include <QuadEdgeSubdivision.h>`

## Public Types
typedef std::list< QuadEdge * > | QuadEdgeList

## Public Member Functions
| QuadEdgeSubdivision (const geom::Envelope &env, double tolerance)
double | getTolerance () const
const geom::Envelope & | getEnvelope () const
const QuadEdgeList & | getEdges () const
void | setLocator (std::auto_ptr< QuadEdgeLocator > locator)
virtual QuadEdge & | makeEdge (const Vertex &o, const Vertex &d)
virtual QuadEdge & | connect (QuadEdge &a, QuadEdge &b)
void | remove (QuadEdge &e)
QuadEdge * | locateFromEdge (const Vertex &v, const QuadEdge &startEdge) const
QuadEdge * | locate (const Vertex &v) const
QuadEdge * | locate (const geom::Coordinate &p)
QuadEdge * | locate (const geom::Coordinate &p0, const geom::Coordinate &p1)
QuadEdge & | insertSite (const Vertex &v)
bool | isFrameEdge (const QuadEdge &e) const
bool | isFrameBorderEdge (const QuadEdge &e) const
bool | isFrameVertex (const Vertex &v) const
bool | isOnEdge (const QuadEdge &e, const geom::Coordinate &p) const
bool | isVertexOfEdge (const QuadEdge &e, const Vertex &v) const
std::auto_ptr< QuadEdgeList > | getPrimaryEdges (bool includeFrame)
void | visitTriangles (TriangleVisitor *triVisitor, bool includeFrame)
std::auto_ptr< geom::MultiLineString > | getEdges (const geom::GeometryFactory &geomFact)
std::auto_ptr< geom::GeometryCollection > | getTriangles (const geom::GeometryFactory &geomFact)
std::auto_ptr< geom::GeometryCollection > | getVoronoiDiagram (const geom::GeometryFactory &geomFact)
std::auto_ptr< geom::MultiLineString > | getVoronoiDiagramEdges (const geom::GeometryFactory &geomFact)
std::auto_ptr< std::vector< geom::Geometry * > > | getVoronoiCellPolygons (const geom::GeometryFactory &geomFact)
std::auto_ptr< std::vector< geom::Geometry * > > | getVoronoiCellEdges (const geom::GeometryFactory &geomFact)
std::auto_ptr< QuadEdgeSubdivision::QuadEdgeList > | getVertexUniqueEdges (bool includeFrame)
std::auto_ptr< geom::Geometry > | getVoronoiCellPolygon (QuadEdge *qe, const geom::GeometryFactory &geomFact)
std::auto_ptr< geom::Geometry > | getVoronoiCellEdge (QuadEdge *qe, const geom::GeometryFactory &geomFact)

## Static Public Member Functions
static void | getTriangleEdges (const QuadEdge &startQE, const QuadEdge *triEdge[3])

## Detailed Description

A class that contains the QuadEdges representing a planar subdivision that models a triangulation. The subdivision is constructed using the quadedge algebra defined in the classs QuadEdge. All metric calculations are done in the Vertex class. In addition to a triangulation, subdivisions support extraction of Voronoi diagrams. This is easily accomplished, since the Voronoi diagram is the dual of the Delaunay triangulation.

Subdivisions can be provided with a tolerance value. Inserted vertices which are closer than this value to vertices already in the subdivision will be ignored. Using a suitable tolerance value can prevent robustness failures from happening during Delaunay triangulation.

Subdivisions maintain a frame triangle around the client-created edges. The frame is used to provide a bounded "container" for all edges within a TIN. Normally the frame edges, frame connecting edges, and frame triangles are not included in client processing.

Author
  JTS: David Skea
  JTS: Martin Davis
  Benjamin Campbell

## Constructor & Destructor Documentation

geos::triangulate::quadedge::QuadEdgeSubdivision::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 bounding box. A new super-bounding box that contains the triangle is computed and stored.

Parameters

  env | the bouding box to surround
  tolerance | the tolerance value for determining if two sites are equal

## Member Function Documentation

virtual QuadEdge& geos::triangulate::quadedge::QuadEdgeSubdivision::connect | ( | QuadEdge & | a,
|  | QuadEdge & | b
| ) |  |
| virtual

Creates a new QuadEdge connecting the destination of a to the origin of b, in such a way that all three have the same left face after the connection is complete. The quadedge is recorded in the edges list.

Parameters

  a |
  b |

Returns

const QuadEdgeList& geos::triangulate::quadedge::QuadEdgeSubdivision::getEdges | ( |  | ) | const
| inline

Gets the collection of base QuadEdges (one for every pair of vertices which is connected).

Returns
  a QuadEdgeList

std::auto_ptr<geom::MultiLineString> geos::triangulate::quadedge::QuadEdgeSubdivision::getEdges | ( | const geom::GeometryFactory & | geomFact | ) |

Gets the geometry for the edges in the subdivision as a MultiLineString containing 2-point lines.

Parameters

  geomFact | the GeometryFactory to use

Returns
  a MultiLineString. The caller takes ownership of the returned object.

const geom::Envelope& geos::triangulate::quadedge::QuadEdgeSubdivision::getEnvelope | ( |  | ) | const
| inline

Gets the envelope of the Subdivision (including the frame).

Returns
  the envelope

std::auto_ptr<QuadEdgeList> geos::triangulate::quadedge::QuadEdgeSubdivision::getPrimaryEdges | ( | bool | includeFrame | ) |

Gets all primary quadedges in the subdivision. A primary edge is a QuadEdge which occupies the 0'th position in its array of associated quadedges. These provide the unique geometric edges of the triangulation.

Parameters

  includeFrame | true if the frame edges are to be included

Returns
  a List of QuadEdges. The caller takes ownership of the returned QuadEdgeList but not the items it contains.

double geos::triangulate::quadedge::QuadEdgeSubdivision::getTolerance | ( |  | ) | const
| inline

Gets the vertex-equality tolerance value used in this subdivision

Returns
  the tolerance value

static void geos::triangulate::quadedge::QuadEdgeSubdivision::getTriangleEdges | ( | const QuadEdge & | startQE,
|  | const QuadEdge * | triEdge[3]
| ) |  |
| static

Gets the edges for the triangle to the left of the given QuadEdge.

Parameters

  startQE |
  triEdge |

Exceptions

  IllegalArgumentException | if the edges do not form a triangle

std::auto_ptr<geom::GeometryCollection> geos::triangulate::quadedge::QuadEdgeSubdivision::getTriangles | ( | const geom::GeometryFactory & | geomFact | ) |

Gets the geometry for the triangles in a triangulated subdivision as a GeometryCollection of triangular Polygons.

Parameters

  geomFact | the GeometryFactory to use

Returns
  a GeometryCollection of triangular Polygons. The caller takes ownership of the returned object.

std::auto_ptr<QuadEdgeSubdivision::QuadEdgeList> geos::triangulate::quadedge::QuadEdgeSubdivision::getVertexUniqueEdges | ( | bool | includeFrame | ) |

Gets a collection of QuadEdges whose origin vertices are a unique set which includes all vertices in the subdivision. The frame vertices can be included if required. This is useful for algorithms which require traversing the subdivision starting at all vertices. Returning a quadedge for each vertex is more efficient than the alternative of finding the actual vertices using getVertices and then locating quadedges attached to them.

Parameters

  includeFrame | true if the frame vertices should be included

Returns
  a collection of QuadEdge with the vertices of the subdivision as their origins

std::auto_ptr<geom::Geometry> geos::triangulate::quadedge::QuadEdgeSubdivision::getVoronoiCellEdge | ( | QuadEdge * | qe,
|  | const geom::GeometryFactory & | geomFact
| ) |  |

Gets the Voronoi cell edge around a site specified by the origin of a QuadEdge. The userData of the LineString is set to be the Coordinate of the site. This allows attaching external data associated with the site to this cell polygon.

Parameters

  qe | a quadedge originating at the cell site
  geomFact | a factory for building the polygon

Returns
  a polygon indicating the cell extent

std::auto_ptr< std::vector<geom::Geometry*> > geos::triangulate::quadedge::QuadEdgeSubdivision::getVoronoiCellEdges | ( | const geom::GeometryFactory & | geomFact | ) |

Gets a List of LineStrings for the Voronoi cells of this triangulation. The userData of each LineString is set to be the Coordinate of the cell site. This allows easily associating external data associated with the sites to the cells.

Parameters

  geomFact | a geometry factory

Returns
  a List of LineString

std::auto_ptr<geom::Geometry> geos::triangulate::quadedge::QuadEdgeSubdivision::getVoronoiCellPolygon | ( | QuadEdge * | qe,
|  | const geom::GeometryFactory & | geomFact
| ) |  |

Gets the Voronoi cell around a site specified by the origin of a QuadEdge. The userData of the polygon is set to be the Coordinate of the site. This allows attaching external data associated with the site to this cell polygon.

Parameters

  qe | a quadedge originating at the cell site
  geomFact | a factory for building the polygon

Returns
  a polygon indicating the cell extent

std::auto_ptr< std::vector<geom::Geometry*> > geos::triangulate::quadedge::QuadEdgeSubdivision::getVoronoiCellPolygons | ( | const geom::GeometryFactory & | geomFact | ) |

Gets a List of Polygons for the Voronoi cells of this triangulation. The userData of each polygon is set to be the Coordinate of the cell site. This allows easily associating external data associated with the sites to the cells.

Parameters

  geomFact | a geometry factory

Returns
  a List of Polygons

std::auto_ptr<geom::GeometryCollection> geos::triangulate::quadedge::QuadEdgeSubdivision::getVoronoiDiagram | ( | const geom::GeometryFactory & | geomFact | ) |

Gets the cells in the Voronoi diagram for this triangulation. The cells are returned as a GeometryCollection of Polygons The userData of each polygon is set to be the Coordinate of the cell site. This allows easily associating external data associated with the sites to the cells.

Parameters

  geomFact | a geometry factory

Returns
  a GeometryCollection of Polygons

std::auto_ptr<geom::MultiLineString> geos::triangulate::quadedge::QuadEdgeSubdivision::getVoronoiDiagramEdges | ( | const geom::GeometryFactory & | geomFact | ) |

Gets the cells in the Voronoi diagram for this triangulation. The cells are returned as a GeometryCollection of LineStrings The userData of each polygon is set to be the Coordinate of the cell site. This allows easily associating external data associated with the sites to the cells.

Parameters

  geomFact | a geometry factory

Returns
  a MultiLineString

QuadEdge& geos::triangulate::quadedge::QuadEdgeSubdivision::insertSite | ( | const Vertex & | v | ) |

Inserts a new site into the Subdivision, connecting it to the vertices of the containing triangle (or quadrilateral, if the split point falls on an existing edge).

This method does NOT maintain the Delaunay condition. If desired, this must be checked and enforced by the caller.

This method does NOT check if the inserted vertex falls on an edge. This must be checked by the caller, since this situation may cause erroneous triangulation

Parameters

  v | the vertex to insert

Returns
  a new quad edge terminating in v

bool geos::triangulate::quadedge::QuadEdgeSubdivision::isFrameBorderEdge | ( | const QuadEdge & | e | ) | const

Tests whether a QuadEdge is an edge on the border of the frame facets and the internal facets. E.g. an edge which does not itself touch a frame vertex, but which touches an edge which does.

Parameters

  e | the edge to test

Returns
  true if the edge is on the border of the frame

bool geos::triangulate::quadedge::QuadEdgeSubdivision::isFrameEdge | ( | const QuadEdge & | e | ) | const

Tests whether a QuadEdge is an edge incident on a frame triangle vertex.

Parameters

  e | the edge to test

Returns
  true if the edge is connected to the frame triangle

bool geos::triangulate::quadedge::QuadEdgeSubdivision::isFrameVertex | ( | const Vertex & | v | ) | const

Tests whether a vertex is a vertex of the outer triangle.

Parameters

  v | the vertex to test

Returns
  true if the vertex is an outer triangle vertex

bool geos::triangulate::quadedge::QuadEdgeSubdivision::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 tolerance.

Parameters

  e | a QuadEdge
  p | a point

Returns
  true if the vertex lies on the edge

bool geos::triangulate::quadedge::QuadEdgeSubdivision::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 distance.

Parameters

  e |
  v |

Returns
  true if the vertex is a endpoint of the edge

QuadEdge* geos::triangulate::quadedge::QuadEdgeSubdivision::locate | ( | const Vertex & | v | ) | const
| inline

Finds a quadedge of a triangle containing a location specified by a Vertex, if one exists.

Parameters

  x | the vertex to locate

Returns
  a quadedge on the edge of a triangle which touches or contains the location
  null if no such triangle exists. The returned pointer should not be freed be the caller.

QuadEdge* geos::triangulate::quadedge::QuadEdgeSubdivision::locate | ( | const geom::Coordinate & | p | ) |
| inline

Finds a quadedge of a triangle containing a location specified by a Coordinate, if one exists.

Parameters

  p | the Coordinate to locate

Returns
  a quadedge on the edge of a triangle which touches or contains the location
  null if no such triangle exists. The returned pointer should not be freed be the caller.

QuadEdge* geos::triangulate::quadedge::QuadEdgeSubdivision::locate | ( | const geom::Coordinate & | p0,
|  | const geom::Coordinate & | p1
| ) |  |

Locates the edge between the given vertices, if it exists in the subdivision.

Parameters

  p0 | a coordinate
  p1 | another coordinate

Returns
  the edge joining the coordinates, if present
  null if no such edge exists
  the caller should not free the returned pointer

QuadEdge* geos::triangulate::quadedge::QuadEdgeSubdivision::locateFromEdge | ( | const Vertex & | v,
|  | const QuadEdge & | startEdge
| ) |  | const

Locates an edge of a triangle which contains a location specified by a Vertex v. The edge returned has the property that either v is on e, or e is an edge of a triangle containing v. The search starts from startEdge amd proceeds on the general direction of v.

This locate algorithm relies on the subdivision being Delaunay. For non-Delaunay subdivisions, this may loop for ever.

Parameters

  v | the location to search for
  startEdge | an edge of the subdivision to start searching at

Returns
  a QuadEdge which contains v, or is on the edge of a triangle containing v

Exceptions

  LocateFailureException | if the location algorithm fails to converge in a reasonable number of iterations. The returned pointer should not be freed be the caller.

virtual QuadEdge& geos::triangulate::quadedge::QuadEdgeSubdivision::makeEdge | ( | const Vertex & | o,
|  | const Vertex & | d
| ) |  |
| virtual

Creates a new quadedge, recording it in the edges list.

Parameters

  o |
  d |

Returns

void geos::triangulate::quadedge::QuadEdgeSubdivision::remove | ( | QuadEdge & | e | ) |

Deletes a quadedge from the subdivision. Linked quadedges are updated to reflect the deletion.

Parameters

  e | the quadedge to delete

void geos::triangulate::quadedge::QuadEdgeSubdivision::setLocator | ( | std::auto_ptr< QuadEdgeLocator > | locator | ) |
| inline

Sets the QuadEdgeLocator to use for locating containing triangles in this subdivision.

Parameters

  locator | a QuadEdgeLocator

The documentation for this class was generated from the following file:

- QuadEdgeSubdivision.h