22#ifndef GEOS_GEOMGRAPH_GEOMETRYGRAPH_H
23#define GEOS_GEOMGRAPH_GEOMETRYGRAPH_H
25#include <geos/export.h>
30#include <geos/geom/Coordinate.h>
31#include <geos/geom/CoordinateSequence.h>
32#include <geos/geomgraph/PlanarGraph.h>
33#include <geos/geom/LineString.h>
35#include <geos/inline.h>
39#pragma warning(disable: 4251)
61 class SegmentIntersector;
62 class EdgeSetIntersector;
73class GEOS_DLL GeometryGraph:
public PlanarGraph
75using PlanarGraph::add;
91 std::map<const geom::LineString*, Edge*> lineEdgeMap;
97 bool useBoundaryDeterminationRule;
108 std::auto_ptr< geom::CoordinateSequence > boundaryPoints;
110 std::auto_ptr< std::vector<Node*> > boundaryNodes;
112 bool hasTooFewPointsVar;
117 index::EdgeSetIntersector* createEdgeSetIntersector();
127 int cwLeft,
int cwRight);
145 void addSelfIntersectionNodes(
int argIndex);
154 void addSelfIntersectionNode(
int argIndex,
158 GeometryGraph(
const GeometryGraph& other);
159 GeometryGraph& operator=(
const GeometryGraph& rhs);
163 static bool isInBoundary(
int boundaryCount);
165 static int determineBoundary(
int boundaryCount);
167 static int determineBoundary(
173 GeometryGraph(
int newArgIndex,
const geom::Geometry *newParentGeom);
175 GeometryGraph(
int newArgIndex,
const geom::Geometry *newParentGeom,
178 virtual ~GeometryGraph();
193 void computeSplitEdges(std::vector<Edge*> *edgelist);
195 void addEdge(
Edge *e);
216 bool computeRingSelfNodes,
222 index::SegmentIntersector* computeSelfNodes(
224 bool computeRingSelfNodes,
225 bool isDoneIfProperInt,
228 return computeSelfNodes(*li, computeRingSelfNodes, isDoneIfProperInt, env);
233 index::SegmentIntersector* computeSelfNodes(
237 index::SegmentIntersector* computeSelfNodes(
239 bool computeRingSelfNodes,
bool isDoneIfProperInt,
const geom::Envelope *env=0);
241 index::SegmentIntersector* computeEdgeIntersections(GeometryGraph *g,
245 std::vector<Edge*> *getEdges();
247 bool hasTooFewPoints();
252 {
return boundaryNodeRule; }
265# include "geos/geomgraph/GeometryGraph.inl"
Definition BoundaryNodeRule.h:50
A LineIntersector is an algorithm that can both test whether two line segments intersect and compute ...
Definition LineIntersector.h:49
The internal representation of a list of coordinates inside a Geometry.
Definition CoordinateSequence.h:59
Coordinate is the lightweight class used to store coordinates.
Definition Coordinate.h:60
An Envelope defines a rectangulare region of the 2D coordinate plane.
Definition Envelope.h:53
Represents a collection of heterogeneous Geometry objects.
Definition GeometryCollection.h:56
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition Geometry.h:167
Definition LineString.h:70
Models an OGC SFS LinearRing.
Definition LinearRing.h:57
Represents a linear polygon, which may include holes.
Definition Polygon.h:67
Definition geomgraph/Edge.h:66
geom::CoordinateSequence * getBoundaryPoints()
Returned object is owned by this GeometryGraph.
index::SegmentIntersector * computeSelfNodes(algorithm::LineIntersector *li, bool computeRingSelfNodes, const geom::Envelope *env=0)
Compute self-nodes, taking advantage of the Geometry type to minimize the number of intersection test...
Definition GeometryGraph.h:214
std::vector< Node * > * getBoundaryNodes()
Returned object is owned by this GeometryGraph.
Definition geomgraph/Node.h:62
virtual Edge * findEdge(const geom::Coordinate &p0, const geom::Coordinate &p1)
Returns the edge whose first two coordinates are p0 and p1.
Contains classes and interfaces implementing fundamental computational geometry algorithms.
Definition Angle.h:33
Contains the Geometry interface hierarchy and supporting classes.
Definition IndexedNestedRingTester.h:26
Contains classes that implement topology graphs.
Definition IndexedNestedRingTester.h:34
Basic namespace for all GEOS functionalities.
Definition IndexedNestedRingTester.h:25