/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (c) 2024 Martin Davis * Copyright (C) 2024 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 #include #include // Forward declarations namespace geos { namespace algorithm { class BoundaryNodeRule; } namespace geom { class CoordinateXY; class LineString; } } using geos::algorithm::BoundaryNodeRule; using geos::geom::Coordinate; using geos::geom::CoordinateXY; using geos::geom::LineString; namespace geos { // geos. namespace operation { // geos.operation namespace relateng { // geos.operation.relateng class GEOS_DLL LinearBoundary { private: // Members Coordinate::ConstIntMap m_vertexDegree; bool m_hasBoundary; const BoundaryNodeRule& m_boundaryNodeRule; public: // Constructors LinearBoundary(std::vector& lines, const BoundaryNodeRule& bnRule); bool hasBoundary() const; bool isBoundary(const CoordinateXY* pt) const; private: // Methods bool checkBoundary(Coordinate::ConstIntMap& vertexDegree) const; static void computeBoundaryPoints( std::vector& lines, Coordinate::ConstIntMap& vertexDegree); static void addEndpoint( const CoordinateXY *p, Coordinate::ConstIntMap& vertexDegree); }; } // namespace geos.operation.relateng } // namespace geos.operation } // namespace geos