72 lines
1.7 KiB
C++
72 lines
1.7 KiB
C++
/**********************************************************************
|
|
*
|
|
* GEOS - Geometry Engine Open Source
|
|
* http://geos.osgeo.org
|
|
*
|
|
* Copyright (C) 2024 ISciences, LLC
|
|
*
|
|
* 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 <geos/geom/Geometry.h>
|
|
|
|
namespace geos {
|
|
namespace geom {
|
|
|
|
class SimpleCurve;
|
|
|
|
class GEOS_DLL Curve : public Geometry {
|
|
|
|
public:
|
|
using Geometry::apply_ro;
|
|
using Geometry::apply_rw;
|
|
|
|
void apply_ro(GeometryComponentFilter* filter) const override;
|
|
|
|
void apply_ro(GeometryFilter* filter) const override;
|
|
|
|
void apply_rw(GeometryComponentFilter* filter) override;
|
|
|
|
void apply_rw(GeometryFilter* filter) override;
|
|
|
|
/**
|
|
* \brief
|
|
* Returns Dimension::False for a closed Curve,
|
|
* 0 otherwise (Curve boundary is a MultiPoint)
|
|
*/
|
|
int
|
|
getBoundaryDimension() const override
|
|
{
|
|
return isClosed() ? Dimension::False : 0;
|
|
}
|
|
|
|
/// Returns line dimension (1)
|
|
Dimension::DimensionType getDimension() const override
|
|
{
|
|
return Dimension::L; // line
|
|
}
|
|
|
|
/// Returns true if the first and last coordinate in the Curve are the same
|
|
virtual bool isClosed() const = 0;
|
|
|
|
/// Returns true if the curve is closed and simple
|
|
bool isRing() const;
|
|
|
|
virtual std::size_t getNumCurves() const = 0;
|
|
|
|
virtual const SimpleCurve* getCurveN(std::size_t) const = 0;
|
|
|
|
protected:
|
|
Curve(const GeometryFactory& factory) : Geometry(&factory) {}
|
|
|
|
};
|
|
|
|
}
|
|
}
|