/********************************************************************** * * 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 #include #include #include #include #include #include namespace geos { // geos. namespace operation { // geos.operation namespace overlayng { // geos.operation.overlayng /** * Manages the input geometries for an overlay operation. * The second geometry is allowed to be null, * to support for instance precision reduction. * * @author Martin Davis * */ using namespace geos::algorithm::locate; using namespace geos::geom; class GEOS_DLL InputGeometry { private: // Members std::array geom; std::unique_ptr ptLocatorA; std::unique_ptr ptLocatorB; std::array isCollapsed; public: InputGeometry(const Geometry* geomA, const Geometry* geomB); bool isSingle() const; int getDimension(uint8_t index) const; const Geometry* getGeometry(uint8_t geomIndex) const; const Envelope* getEnvelope(uint8_t geomIndex) const; bool isEmpty(uint8_t geomIndex) const; bool isArea(uint8_t geomIndex) const; int getAreaIndex() const; bool isLine(uint8_t geomIndex) const; bool isAllPoints() const; bool hasPoints() const; /** * Tests if an input geometry has edges. * This indicates that topology needs to be computed for them. * * @param geomIndex * @return true if the input geometry has edges */ bool hasEdges(uint8_t geomIndex) const; /** * Determines the location within an area geometry. * This allows disconnected edges to be fully * located. * * @param geomIndex the index of the geometry * @param pt the coordinate to locate * @return the location of the coordinate * * @see Location */ Location locatePointInArea(uint8_t geomIndex, const Coordinate& pt); PointOnGeometryLocator* getLocator(uint8_t geomIndex); void setCollapsed(uint8_t geomIndex, bool isGeomCollapsed); }; } // namespace geos.operation.overlayng } // namespace geos.operation } // namespace geos