00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef GEOS_OP_OVERLAY_LINEBUILDER_H
00021 #define GEOS_OP_OVERLAY_LINEBUILDER_H
00022
00023 #include <geos/export.h>
00024
00025 #include <geos/operation/overlay/OverlayOp.h>
00026
00027 #include <vector>
00028
00029
00030 namespace geos {
00031 namespace geom {
00032 class GeometryFactory;
00033 class CoordinateSequence;
00034 class LineString;
00035 }
00036 namespace geomgraph {
00037 class DirectedEdge;
00038 class Edge;
00039 }
00040 namespace algorithm {
00041 class PointLocator;
00042 }
00043 namespace operation {
00044 namespace overlay {
00045 class OverlayOp;
00046 }
00047 }
00048 }
00049
00050 namespace geos {
00051 namespace operation {
00052 namespace overlay {
00053
00059 class GEOS_DLL LineBuilder {
00060
00061 public:
00062
00063 LineBuilder(OverlayOp *newOp,
00064 const geom::GeometryFactory *newGeometryFactory,
00065 algorithm::PointLocator *newPtLocator);
00066
00067 ~LineBuilder();
00068
00072 std::vector<geom::LineString*>* build(OverlayOp::OpCode opCode);
00073
00085 void collectLineEdge(geomgraph::DirectedEdge *de,
00086 OverlayOp::OpCode opCode,
00087 std::vector<geomgraph::Edge*>* edges);
00088
00089 private:
00090 OverlayOp *op;
00091 const geom::GeometryFactory *geometryFactory;
00092 algorithm::PointLocator *ptLocator;
00093 std::vector<geomgraph::Edge*> lineEdgesList;
00094 std::vector<geom::LineString*>* resultLineList;
00095 void findCoveredLineEdges();
00096 void collectLines(OverlayOp::OpCode opCode);
00097 void buildLines(OverlayOp::OpCode opCode);
00098 void labelIsolatedLines(std::vector<geomgraph::Edge*> *edgesList);
00099
00110 void collectBoundaryTouchEdge(geomgraph::DirectedEdge *de,
00111 OverlayOp::OpCode opCode,
00112 std::vector<geomgraph::Edge*>* edges);
00113
00117 void labelIsolatedLine(geomgraph::Edge *e, int targetIndex);
00118
00119
00120
00121
00122
00123
00124
00125 void propagateZ(geom::CoordinateSequence *cs);
00126 };
00127
00128
00129 }
00130 }
00131 }
00132
00133 #endif // ndef GEOS_OP_OVERLAY_LINEBUILDER_H
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144