GEOS
3.9.1dev
|
#include <RingClipper.h>
Public Member Functions | |
RingClipper (const Envelope *env) | |
std::unique_ptr< CoordinateArraySequence > | clip (const CoordinateSequence *cs) const |
Private Member Functions | |
std::unique_ptr< CoordinateArraySequence > | clipToBoxEdge (const CoordinateSequence *pts, int edgeIndex, bool closeRing) const |
void | intersection (const Coordinate &a, const Coordinate &b, int edgeIndex, Coordinate &rsltPt) const |
double | intersectionLineY (const Coordinate &a, const Coordinate &b, double y) const |
double | intersectionLineX (const Coordinate &a, const Coordinate &b, double x) const |
bool | isInsideEdge (const Coordinate &p, int edgeIndex) const |
Private Attributes | |
double | clipEnvMinY |
double | clipEnvMaxY |
double | clipEnvMinX |
double | clipEnvMaxX |
Static Private Attributes | |
static constexpr int | BOX_LEFT = 3 |
static constexpr int | BOX_TOP = 2 |
static constexpr int | BOX_RIGHT = 1 |
static constexpr int | BOX_BOTTOM = 0 |
Clips rings of points to a rectangle. Uses a variant of Cohen-Sutherland clipping.
In general the output is not topologically valid. In particular, the output may contain coincident non-noded line segments along the clip rectangle sides. However, the output is sufficiently well-structured that it can be used as input to the OverlayNG algorithm (which is able to process coincident linework due to the need to handle topology collapse under precision reduction).
Because of the likelihood of creating extraneous line segments along the clipping rectangle sides, this class is not suitable for clipping linestrings.
The clipping envelope should be generated using RobustClipEnvelopeComputer, to ensure that intersecting line segments are not perturbed by clipping. This is required to ensure that the overlay of the clipped geometry is robust and correct (i.e. the same as if clipping was not used).
Definition at line 66 of file RingClipper.h.
|
inline |
Definition at line 103 of file RingClipper.h.
std::unique_ptr<CoordinateArraySequence> geos::operation::overlayng::RingClipper::clip | ( | const CoordinateSequence * | cs | ) | const |
Clips a list of points to the clipping rectangle box.
|
private |
Clips line to the axis-parallel line defined by a single box edge.
|
private |
Computes the intersection point of a segment with an edge of the clip box. The segment must be known to intersect the edge.
|
private |
|
private |
|
private |
|
staticprivate |
Definition at line 74 of file RingClipper.h.
|
staticprivate |
Definition at line 71 of file RingClipper.h.
|
staticprivate |
Definition at line 73 of file RingClipper.h.
|
staticprivate |
Definition at line 72 of file RingClipper.h.
|
private |
Definition at line 81 of file RingClipper.h.
|
private |
Definition at line 79 of file RingClipper.h.
|
private |
Definition at line 80 of file RingClipper.h.
|
private |
Definition at line 78 of file RingClipper.h.