/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2020 Paul Ramsey * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #pragma once #include #include // Forward declarations namespace geos { namespace geom { class Geometry; class GeometryFactory; class Polygon; } } using geos::geom::Geometry; using geos::geom::GeometryFactory; using geos::geom::Polygon; using geos::triangulate::tri::TriList; using geos::triangulate::tri::Tri; namespace geos { namespace triangulate { namespace polygon { /** * Computes a triangulation of each polygon in a {@link geos::geom::Geometry}. * A polygon triangulation is a non-overlapping set of triangles which * cover the polygon and have the same vertices as the polygon. * The priority is on performance rather than triangulation quality, * so that the output may contain many narrow triangles. * * Holes are handled by joining them to the shell to form a * (self-touching) polygon shell with no holes. * Although invalid, this can be triangulated effectively. * * For better-quality triangulation use geos::triangulate::polygon::ConstrainedDelaunayTriangulator. * * @see geos::triangulate::polygon::ConstrainedDelaunayTriangulator * * @author Martin Davis * */ class GEOS_DLL PolygonTriangulator { private: // Members const Geometry* inputGeom; const GeometryFactory* geomFact; std::unique_ptr compute(); /** * Computes the triangulation of a single polygon * * @return GeometryCollection of triangular polygons */ void triangulatePolygon(const Polygon* poly, TriList& triList); public: /** * Constructs a new triangulator. * * @param p_inputGeom the input geometry */ PolygonTriangulator(const Geometry* p_inputGeom) : inputGeom(p_inputGeom) , geomFact(p_inputGeom->getFactory()) {} /** * Computes a triangulation of each polygon in a geometry. * * @param geom a geometry containing polygons * @return a GeometryCollection containing the triangle polygons */ static std::unique_ptr triangulate(const Geometry* geom); }; } // namespace geos.triangulate.polygon } // namespace geos.triangulate } // namespace geos