18#include <geos/operation/relateng/RelateEdge.h>
24#include <geos/export.h>
41using geos::geom::CoordinateXY;
50class GEOS_DLL RelateNode {
60 std::vector<std::unique_ptr<RelateEdge>> edges;
62 const CoordinateXY* nodePt;
67 void updateEdgesInArea(
bool isA, std::size_t indexFrom, std::size_t indexTo);
69 void updateIfAreaPrev(
bool isA, std::size_t index);
71 void updateIfAreaNext(
bool isA, std::size_t index);
73 const RelateEdge* addLineEdge(
bool isA,
const CoordinateXY* dirPt);
75 const RelateEdge* addAreaEdge(
bool isA,
const CoordinateXY* dirPt,
bool isForward);
87 const RelateEdge* addEdge(
bool isA,
const CoordinateXY* dirPt,
int dim,
bool isForward);
89 void finishNode(
bool isA,
bool isAreaInterior);
91 void propagateSideLocations(
bool isA, std::size_t startIndex);
93 static std::size_t prevIndex(std::vector<std::unique_ptr<RelateEdge>>& list, std::size_t index);
95 static std::size_t nextIndex(std::vector<std::unique_ptr<RelateEdge>>& list, std::size_t i);
98 const std::vector<std::unique_ptr<RelateEdge>>& edges,
99 const RelateEdge* edge)
const;
104 RelateNode(
const CoordinateXY* pt)
108 const CoordinateXY* getCoordinate()
const;
110 const std::vector<std::unique_ptr<RelateEdge>>& getEdges()
const;
112 void addEdges(std::vector<const NodeSection *>& nss);
113 void addEdges(std::vector<std::unique_ptr<NodeSection>>& nss);
115 void addEdges(
const NodeSection* ns);
126 void finish(
bool isAreaInteriorA,
bool isAreaInteriorB);
128 std::string toString()
const;
130 bool hasExteriorEdge(
bool isA);
132 friend std::ostream& operator<<(std::ostream& os,
const RelateNode& ns);
138 RelateNode(
const RelateNode&) =
delete;
139 RelateNode& operator=(
const RelateNode&) =
delete;
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition Geometry.h:197
Basic namespace for all GEOS functionalities.
Definition geos.h:39