49 using CoordinateXYZM = geos::geom::CoordinateXYZM;
56 std::shared_ptr<const CoordinateSequence> pts;
65 bool m_isInResultArea;
66 bool m_isInResultLine;
69 const OverlayEdgeRing* edgeRing;
70 const MaximalEdgeRing* maxEdgeRing;
81 OverlayEdge(
const CoordinateXYZM& p_orig,
const CoordinateXYZM& p_dirPt,
83 const std::shared_ptr<const CoordinateSequence>& p_pts)
86 , direction(p_direction)
89 , m_isInResultArea(
false)
90 , m_isInResultLine(
false)
92 , nextResultEdge(
nullptr)
94 , maxEdgeRing(
nullptr)
95 , nextResultMaxEdge(
nullptr)
100 bool isForward()
const
115 Location getLocation(uint8_t index,
int position)
const
117 return label->
getLocation(index, position, direction);
120 const CoordinateXYZM& getCoordinate()
const
125 const CoordinateSequence* getCoordinatesRO()
const
130 std::shared_ptr<const CoordinateSequence> getCoordinatesOriented()
const;
153 bool isInResultArea()
const
155 return m_isInResultArea;
158 bool isInResultAreaBoth()
const
160 return m_isInResultArea && symOE()->m_isInResultArea;
163 bool isInResultEither()
const
165 return isInResult() || symOE()->isInResult();
168 void unmarkFromResultAreaBoth()
170 m_isInResultArea =
false;
171 symOE()->m_isInResultArea =
false;
174 void markInResultArea()
176 m_isInResultArea =
true;
179 void markInResultAreaBoth()
181 m_isInResultArea =
true;
182 symOE()->m_isInResultArea =
true;
185 bool isInResultLine()
const
187 return m_isInResultLine;
190 void markInResultLine()
192 m_isInResultLine =
true;
193 symOE()->m_isInResultLine =
true;
196 bool isInResult()
const
198 return m_isInResultArea || m_isInResultLine;
201 void setNextResult(OverlayEdge* e)
207 OverlayEdge* nextResult()
const
209 return nextResultEdge;
212 bool isResultLinked()
const
214 return nextResultEdge !=
nullptr;
217 void setNextResultMax(OverlayEdge* e)
220 nextResultMaxEdge = e;
223 OverlayEdge* nextResultMax()
const
225 return nextResultMaxEdge;
228 bool isResultMaxLinked()
const
230 return nextResultMaxEdge !=
nullptr;
233 bool isVisited()
const
238 void markVisitedBoth()
241 symOE()->markVisited();
244 void setEdgeRing(
const OverlayEdgeRing* p_edgeRing)
246 edgeRing = p_edgeRing;
249 const OverlayEdgeRing* getEdgeRing()
const
254 const MaximalEdgeRing* getEdgeRingMax()
const
259 void setEdgeRingMax(
const MaximalEdgeRing* p_maximalEdgeRing)
261 maxEdgeRing = p_maximalEdgeRing;
264 friend std::ostream& operator<<(std::ostream& os,
const OverlayEdge& oe);
265 std::string resultSymbol()
const;