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