18 #include <geos/geom/Coordinate.h> 19 #include <geos/noding/SegmentIntersector.h> 20 #include <geos/algorithm/LineIntersector.h> 21 #include <geos/operation/valid/TopologyValidationError.h> 24 #include <geos/export.h> 39 using geos::geom::CoordinateXY;
42 class GEOS_DLL PolygonIntersectionAnalyzer :
public noding::SegmentIntersector {
46 algorithm::LineIntersector li;
47 bool m_hasDoubleTouch =
false;
48 bool isInvertedRingValid =
false;
49 int invalidCode = TopologyValidationError::oNoInvalidIntersection;
50 CoordinateXY invalidLocation;
51 CoordinateXY doubleTouchLocation;
53 int findInvalidIntersection(
54 const SegmentString* ss0, std::size_t segIndex0,
55 const SegmentString* ss1, std::size_t segIndex1);
58 const SegmentString* ss0,
const SegmentString* ss1,
59 const CoordinateXY& intPt);
62 const SegmentString* ss,
const CoordinateXY& intPt,
63 const CoordinateXY* e00,
const CoordinateXY* e01,
64 const CoordinateXY* e10,
const CoordinateXY* e11);
66 const CoordinateXY& prevCoordinateInRing(
67 const SegmentString* ringSS, std::size_t segIndex)
const;
69 bool isAdjacentInRing(
const SegmentString* ringSS,
70 std::size_t segIndex0, std::size_t segIndex1)
const;
80 PolygonIntersectionAnalyzer(
bool p_isInvertedRingValid)
81 : isInvertedRingValid(p_isInvertedRingValid)
82 , invalidLocation(CoordinateXY::getNull())
83 , doubleTouchLocation(CoordinateXY::getNull())
86 void processIntersections(
87 SegmentString* ss0, std::size_t segIndex0,
88 SegmentString* ss1, std::size_t segIndex1)
override;
90 bool isDone()
const override {
91 return isInvalid() || m_hasDoubleTouch;
94 bool isInvalid()
const 96 return invalidCode >= 0;
99 int getInvalidCode()
const 104 const CoordinateXY& getInvalidLocation()
const 106 return invalidLocation;
109 bool hasDoubleTouch()
const 111 return m_hasDoubleTouch;
114 const CoordinateXY& getDoubleTouchLocation()
const 116 return doubleTouchLocation;
An interface for classes which represent a sequence of contiguous line segments.
Definition: SegmentString.h:47
Basic namespace for all GEOS functionalities.
Definition: Angle.h:25