00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef GEOS_TRIANGULATE_VORONOIDIAGRAMBUILDER_H
00020 #define GEOS_TRIANGULATE_VORONOIDIAGRAMBUILDER_H
00021
00022 #include <geos/triangulate/quadedge/QuadEdgeSubdivision.h>
00023 #include <geos/geom/Envelope.h>
00024 #include <memory>
00025 #include <iostream>
00026
00027 namespace geos {
00028 namespace geom{
00029 class Geometry;
00030 class CoordinateSequence;
00031 class GeometryCollection;
00032 class GeometryFactory;
00033 }
00034 namespace triangulate {
00035
00046 class GEOS_DLL VoronoiDiagramBuilder{
00047 public:
00052 VoronoiDiagramBuilder();
00053
00054 ~VoronoiDiagramBuilder();
00055
00062 void setSites(const geom::Geometry& geom);
00063
00070 void setSites(const geom::CoordinateSequence& coords);
00071
00081 void setClipEnvelope(const geom::Envelope* clipEnv);
00082
00090 void setTolerance(double tolerance);
00091
00097 std::auto_ptr<quadedge::QuadEdgeSubdivision> getSubdivision();
00098
00106 std::auto_ptr<geom::GeometryCollection> getDiagram(const geom::GeometryFactory& geomFact);
00107
00115 std::auto_ptr<geom::Geometry> getDiagramEdges(const geom::GeometryFactory& geomFact);
00116
00117 private:
00118
00119 std::auto_ptr<geom::CoordinateSequence> siteCoords;
00120 double tolerance;
00121 std::auto_ptr<quadedge::QuadEdgeSubdivision> subdiv;
00122 const geom::Envelope* clipEnv;
00123 geom::Envelope diagramEnv;
00124
00125 void create();
00126
00127 static std::auto_ptr<geom::GeometryCollection>
00128 clipGeometryCollection(const geom::GeometryCollection& geom, const geom::Envelope& clipEnv);
00129
00130 };
00131
00132 }
00133 }
00134
00135 #endif //GEOS_TRIANGULATE_VORONOIDIAGRAMBUILDER_H