00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef GEOS_OP_OVERLAY_LINEBUILDER_H
00017 #define GEOS_OP_OVERLAY_LINEBUILDER_H
00018
00019 #include <geos/operation/overlay/OverlayOp.h>
00020
00021 #include <vector>
00022
00023
00024 namespace geos {
00025 namespace geom {
00026 class GeometryFactory;
00027 class CoordinateSequence;
00028 class LineString;
00029 }
00030 namespace geomgraph {
00031 class DirectedEdge;
00032 class Edge;
00033 }
00034 namespace algorithm {
00035 class PointLocator;
00036 }
00037 namespace operation {
00038 namespace overlay {
00039 class OverlayOp;
00040 }
00041 }
00042 }
00043
00044 namespace geos {
00045 namespace operation {
00046 namespace overlay {
00047
00053 class LineBuilder {
00054
00055 public:
00056
00057 LineBuilder(OverlayOp *newOp,
00058 const geom::GeometryFactory *newGeometryFactory,
00059 algorithm::PointLocator *newPtLocator);
00060
00061 ~LineBuilder();
00062
00066 std::vector<geom::LineString*>* build(OverlayOp::OpCode opCode);
00067
00075 void collectLineEdge(geomgraph::DirectedEdge *de,
00076 OverlayOp::OpCode opCode,
00077 std::vector<geomgraph::Edge*>* edges);
00078
00089 void collectBoundaryTouchEdge(geomgraph::DirectedEdge *de,
00090 OverlayOp::OpCode opCode,
00091 std::vector<geomgraph::Edge*>* edges);
00092
00093 private:
00094 OverlayOp *op;
00095 const geom::GeometryFactory *geometryFactory;
00096 algorithm::PointLocator *ptLocator;
00097 std::vector<geomgraph::Edge*> lineEdgesList;
00098 std::vector<geom::LineString*>* resultLineList;
00099 void findCoveredLineEdges();
00100 void collectLines(OverlayOp::OpCode opCode);
00101 void buildLines(OverlayOp::OpCode opCode);
00102 void labelIsolatedLines(std::vector<geomgraph::Edge*> *edgesList);
00103
00107 void labelIsolatedLine(geomgraph::Edge *e, int targetIndex);
00108
00109
00110
00111
00112
00113
00114
00115 void propagateZ(geom::CoordinateSequence *cs);
00116 };
00117
00118
00119 }
00120 }
00121 }
00122
00123 #endif // ndef GEOS_OP_OVERLAY_LINEBUILDER_H
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134