75 using CompoundCurve = geos::geom::CompoundCurve;
76 using CircularString = geos::geom::CircularString;
80 using SimpleCurve = geos::geom::SimpleCurve;
81 using Curve = geos::geom::Curve;
86 static constexpr int MIN_LIMIT_PTS = 20;
87 static constexpr bool IS_NODING_VALIDATED =
true;
91 std::vector<noding::PathString*> inputEdges;
93 std::array<bool, 2> hasEdges;
95 std::unique_ptr<RingClipper> clipper;
96 std::unique_ptr<LineLimiter> limiter;
100 algorithm::CircularArcIntersector arcInt;
102 noding::ArcIntersectionAdder arcIntAdder;
103 std::unique_ptr<noding::Noder> internalNoder;
104 std::unique_ptr<noding::Noder> spareInternalNoder;
106 std::deque<EdgeSourceInfo> edgeSourceInfoQue;
107 std::deque<Edge> edgeQue;
121 static std::unique_ptr<noding::Noder> createFixedPrecisionNoder(
const PrecisionModel* pm);
122 std::unique_ptr<noding::Noder> createFloatingPrecisionNoder(
bool doValidation);
126 void addGeometryCollection(
const GeometryCollection* gc, uint8_t geomIndex,
int expectedDim);
127 void addPolygon(
const Surface* poly, uint8_t geomIndex);
128 void addPolygonRing(
const Curve* ring,
bool isHole, uint8_t geomIndex);
129 void addSimpleCurve(
const SimpleCurve* line, uint8_t geomIndex);
130 void addCompoundCurve(
const CompoundCurve* line, uint8_t geomIndex);
132 void addCurve(
const std::shared_ptr<const CoordinateSequence>& pts,
const std::vector<geom::CircularArc>& arcs, uint8_t geomIndex);
133 void addLine(
const std::shared_ptr<const CoordinateSequence>& pts, uint8_t geomIndex);
135 void addEdge(
const std::shared_ptr<const CoordinateSequence>& cas,
const EdgeSourceInfo* info);
136 void addCurvedEdge(
const std::shared_ptr<const CoordinateSequence>& cas,
const std::vector<geom::CircularArc>& arcs,
const EdgeSourceInfo* info);
140 const EdgeSourceInfo* createEdgeSourceInfo(uint8_t index,
int depthDelta,
bool isHole);
147 bool isClippedCompletely(
const Envelope* env)
const;
154 bool isToBeLimited(
const LineString* line)
const;
161 std::vector<std::unique_ptr<CoordinateSequence>>& limit(
const LineString* line)
const;
177 std::shared_ptr<const CoordinateSequence> clip(
const LineString* ring)
const;
186 static std::shared_ptr<const CoordinateSequence> removeRepeatedPoints(
const LineString* line);
190 void add(
const Geometry* g, uint8_t geomIndex);
198 std::vector<Edge*> node(
const std::vector<noding::PathString*>& segStrings);
199 std::vector<Edge*> createEdges(std::vector<std::unique_ptr<noding::PathString>> &segStrings);
211 , customNoder(p_customNoder)
212 , hasEdges{{
false,
false}}
215 , arcIntAdder(arcInt)
218 , inputHasCurves(
false)
221 ~EdgeNodingBuilder();
223 void setClipEnvelope(
const Envelope* clipEnv);