22 #ifndef GEOS_GEOMGRAPH_EDGE_H
23 #define GEOS_GEOMGRAPH_EDGE_H
25 #include <geos/export.h>
29 #include <geos/geomgraph/GraphComponent.h>
30 #include <geos/geomgraph/Depth.h>
31 #include <geos/geomgraph/EdgeIntersectionList.h>
32 #include <geos/geom/CoordinateSequence.h>
34 #include <geos/inline.h>
38 #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
45 class IntersectionMatrix;
49 class LineIntersector;
57 class MonotoneChainEdge;
67 using GraphComponent::updateIM;
74 index::MonotoneChainEdge *mce;
87 void testInvariant()
const {
89 assert(pts->size() > 1);
93 friend std::ostream& operator<< (std::ostream& os,
const Edge& el);
112 virtual int getNumPoints()
const {
113 return static_cast<int>(pts->getSize());
116 virtual void setName(
const std::string &newName) {
125 virtual const geom::Coordinate& getCoordinate(
int i)
const {
127 return pts->getAt(i);
130 virtual const geom::Coordinate& getCoordinate()
const {
132 return pts->getAt(0);
136 virtual Depth &getDepth() {
151 virtual void setDepthDelta(
int newDepthDelta) {
152 depthDelta=newDepthDelta;
156 virtual int getMaximumSegmentIndex()
const {
158 return getNumPoints()-1;
161 virtual EdgeIntersectionList& getEdgeIntersectionList() {
170 virtual index::MonotoneChainEdge* getMonotoneChainEdge();
172 virtual bool isClosed()
const {
174 return pts->getAt(0)==pts->getAt(getNumPoints()-1);
181 virtual bool isCollapsed()
const;
183 virtual Edge* getCollapsedEdge();
185 virtual void setIsolated(
bool newIsIsolated) {
186 isIsolatedVar=newIsIsolated;
190 virtual bool isIsolated()
const {
192 return isIsolatedVar;
199 virtual void addIntersections(algorithm::LineIntersector *li,
int segmentIndex,
207 virtual void addIntersection(algorithm::LineIntersector *li,
int segmentIndex,
208 int geomIndex,
int intIndex);
221 virtual bool isPointwiseEqual(
const Edge *e)
const;
223 virtual std::string print()
const;
225 virtual std::string printReverse()
const;
234 virtual bool equals(
const Edge& e)
const;
236 virtual bool equals(
const Edge* e)
const {
246 inline bool operator==(
const Edge &a,
const Edge &b) {
250 std::ostream& operator<< (std::ostream& os,
const Edge& el);
264 #endif // ifndef GEOS_GEOMGRAPH_EDGE_H