- Main Page
- Related Pages
- Namespaces
- Classes
- Files

- File List

# BufferBuilder.h

    00001 /**********************************************************************
    00002  * $Id: BufferBuilder.h 2779 2009-12-03 19:45:53Z mloskot $
    00003  *
    00004  * GEOS - Geometry Engine Open Source
    00005  * http://geos.refractions.net
    00006  *
    00007  * Copyright (C) 2009 Sandro Santilli <strk@keybit.net>
    00008  * Copyright (C) 2006-2007 Refractions Research Inc.
    00009  *
    00010  * This is free software; you can redistribute and/or modify it under
    00011  * the terms of the GNU Lesser General Public Licence as published
    00012  * by the Free Software Foundation.
    00013  * See the COPYING file for more information.
    00014  *
    00015  **********************************************************************
    00016  *
    00017  * Last port: operation/buffer/BufferBuilder.java rev. 1.30 (JTS-1.10)
    00018  *
    00019  **********************************************************************/
    00020
    00021 #ifndef GEOS_OP_BUFFER_BUFFERBUILDER_H
    00022 #define GEOS_OP_BUFFER_BUFFERBUILDER_H
    00023
    00024 #include <geos/export.h>
    00025
    00026 #include <vector>
    00027
    00028 #include <geos/operation/buffer/BufferOp.h> // for inlines (BufferOp enums)
    00029 #include <geos/operation/buffer/OffsetCurveBuilder.h> // for inline (OffsetCurveBuilder enums)
    00030 #include <geos/geomgraph/EdgeList.h> // for composition
    00031
    00032 // Forward declarations
    00033 namespace geos {
    00034         namespace geom {
    00035                 class PrecisionModel;
    00036                 class Geometry;
    00037                 class GeometryFactory;
    00038         }
    00039         namespace algorithm {
    00040                 class CGAlgorithms;
    00041                 class LineIntersector;
    00042         }
    00043         namespace noding {
    00044                 class Noder;
    00045                 class SegmentString;
    00046                 class IntersectionAdder;
    00047         }
    00048         namespace geomgraph {
    00049                 class Edge;
    00050                 class Label;
    00051                 class PlanarGraph;
    00052         }
    00053         namespace operation {
    00054                 namespace buffer {
    00055                         class BufferSubgraph;
    00056                 }
    00057                 namespace overlay {
    00058                         class PolygonBuilder;
    00059                 }
    00060         }
    00061 }
    00062
    00063 namespace geos {
    00064 namespace operation { // geos.operation
    00065 namespace buffer { // geos.operation.buffer
    00066
    00084 class GEOS_DLL BufferBuilder {
    00085
    00086 public:
    00096         BufferBuilder(const BufferParameters& nBufParams)
    00097                 :
    00098                 bufParams(nBufParams),
    00099                 workingPrecisionModel(NULL),
    00100                 li(NULL),
    00101                 intersectionAdder(NULL),
    00102                 workingNoder(NULL),
    00103                 geomFact(NULL),
    00104                 edgeList()
    00105         {}
    00106
    00107         ~BufferBuilder();
    00108
    00109
    00120         void setWorkingPrecisionModel(const geom::PrecisionModel *pm) {
    00121                 workingPrecisionModel=pm;
    00122         }
    00123
    00131         void setNoder(noding::Noder* newNoder) { workingNoder = newNoder; }
    00132
    00133         geom::Geometry* buffer(const geom::Geometry *g, double distance);
    00134                 // throw (GEOSException);
    00135
    00137         geom::Geometry* bufferLineSingleSided( const geom::Geometry* g,
    00138                                         double distance, bool leftSide ) ;
    00139                 // throw (GEOSException);
    00140
    00141 private:
    00145         static int depthDelta(geomgraph::Label *label);
    00146
    00147         const BufferParameters& bufParams;
    00148
    00149         const geom::PrecisionModel* workingPrecisionModel;
    00150
    00151         algorithm::LineIntersector* li;
    00152
    00153         noding::IntersectionAdder* intersectionAdder;
    00154
    00155         noding::Noder* workingNoder;
    00156
    00157         const geom::GeometryFactory* geomFact;
    00158
    00159         geomgraph::EdgeList edgeList;
    00160
    00161         std::vector<geomgraph::Label *> newLabels;
    00162
    00163         void computeNodedEdges(std::vector<noding::SegmentString*>& bufSegStr,
    00164                         const geom::PrecisionModel *precisionModel);
    00165                         // throw(GEOSException);
    00166
    00176         void insertUniqueEdge(geomgraph::Edge *e);
    00177
    00178         void createSubgraphs(geomgraph::PlanarGraph *graph,
    00179                         std::vector<BufferSubgraph*>& list);
    00180
    00191         void buildSubgraphs(const std::vector<BufferSubgraph*>& subgraphList,
    00192                         overlay::PolygonBuilder& polyBuilder);
    00193
    00197         //
    00202         noding::Noder* getNoder(const geom::PrecisionModel* precisionModel);
    00203
    00204
    00212         geom::Geometry* createEmptyResultGeometry() const;
    00213
    00214     // Declare type as noncopyable
    00215     BufferBuilder(const BufferBuilder& other);
    00216     BufferBuilder& operator=(const BufferBuilder& rhs);
    00217 };
    00218
    00219 } // namespace geos::operation::buffer
    00220 } // namespace geos::operation
    00221 } // namespace geos
    00222
    00223 #endif // ndef GEOS_OP_BUFFER_BUFFERBUILDER_H
    00224
    00225 /**********************************************************************
    00226  * $Log$
    00227  * Revision 1.2  2006/03/14 16:08:21  strk
    00228  * changed buildSubgraphs signature to use refs rather then pointers, made it const-correct. Reduced heap allocations in createSubgraphs()
    00229  *
    00230  * Revision 1.1  2006/03/14 00:19:40  strk
    00231  * opBuffer.h split, streamlined headers in some (not all) files in operation/buffer/
    00232  *
    00233  **********************************************************************/
    00234