• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List

BufferBuilder.h

00001 /**********************************************************************
00002  * $Id: BufferBuilder.h 3301 2011-04-27 09:42:31Z strk $
00003  *
00004  * GEOS - Geometry Engine Open Source
00005  * http://geos.refractions.net
00006  *
00007  * Copyright (C) 2009-2011 Sandro Santilli <strk@keybit.net>
00008  * Copyright (C) 2008-2010 Safe Software Inc.
00009  * Copyright (C) 2006-2007 Refractions Research Inc.
00010  *
00011  * This is free software; you can redistribute and/or modify it under
00012  * the terms of the GNU Lesser General Public Licence as published
00013  * by the Free Software Foundation. 
00014  * See the COPYING file for more information.
00015  *
00016  **********************************************************************
00017  *
00018  * Last port: operation/buffer/BufferBuilder.java r378 (JTS-1.12)
00019  *
00020  **********************************************************************/
00021 
00022 #ifndef GEOS_OP_BUFFER_BUFFERBUILDER_H
00023 #define GEOS_OP_BUFFER_BUFFERBUILDER_H
00024 
00025 #include <geos/export.h>
00026 
00027 #include <vector>
00028 
00029 #include <geos/operation/buffer/BufferOp.h> // for inlines (BufferOp enums)
00030 #include <geos/operation/buffer/OffsetCurveBuilder.h> // for inline (OffsetCurveBuilder enums)
00031 #include <geos/geomgraph/EdgeList.h> // for composition
00032 
00033 #ifdef _MSC_VER
00034 #pragma warning(push)
00035 #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
00036 #endif
00037 
00038 // Forward declarations
00039 namespace geos {
00040         namespace geom {
00041                 class PrecisionModel;
00042                 class Geometry;
00043                 class GeometryFactory;
00044         }
00045         namespace algorithm {
00046                 class CGAlgorithms;
00047                 class LineIntersector;
00048         }
00049         namespace noding {
00050                 class Noder;
00051                 class SegmentString;
00052                 class IntersectionAdder;
00053         }
00054         namespace geomgraph {
00055                 class Edge;
00056                 class Label;
00057                 class PlanarGraph;
00058         }
00059         namespace operation {
00060                 namespace buffer {
00061                         class BufferSubgraph;
00062                 }
00063                 namespace overlay {
00064                         class PolygonBuilder;
00065                 }
00066         }
00067 }
00068 
00069 namespace geos {
00070 namespace operation { // geos.operation
00071 namespace buffer { // geos.operation.buffer
00072 
00090 class GEOS_DLL BufferBuilder {
00091 
00092 public:
00102         BufferBuilder(const BufferParameters& nBufParams)
00103                 :
00104                 bufParams(nBufParams),
00105                 workingPrecisionModel(NULL),
00106                 li(NULL),
00107                 intersectionAdder(NULL),
00108                 workingNoder(NULL),
00109                 geomFact(NULL),
00110                 edgeList()
00111         {}
00112 
00113         ~BufferBuilder();
00114 
00115 
00126         void setWorkingPrecisionModel(const geom::PrecisionModel *pm) {
00127                 workingPrecisionModel=pm;
00128         }
00129 
00137         void setNoder(noding::Noder* newNoder) { workingNoder = newNoder; }
00138 
00139         geom::Geometry* buffer(const geom::Geometry *g, double distance);
00140                 // throw (GEOSException);
00141 
00143         geom::Geometry* bufferLineSingleSided( const geom::Geometry* g,
00144                                         double distance, bool leftSide ) ;
00145                 // throw (GEOSException);
00146 
00147 private:
00151         static int depthDelta(geomgraph::Label *label);
00152 
00153         const BufferParameters& bufParams; 
00154 
00155         const geom::PrecisionModel* workingPrecisionModel;
00156 
00157         algorithm::LineIntersector* li;
00158 
00159         noding::IntersectionAdder* intersectionAdder;
00160 
00161         noding::Noder* workingNoder;
00162 
00163         const geom::GeometryFactory* geomFact;
00164 
00165         geomgraph::EdgeList edgeList;
00166 
00167         std::vector<geomgraph::Label *> newLabels;
00168 
00169         void computeNodedEdges(std::vector<noding::SegmentString*>& bufSegStr,
00170                         const geom::PrecisionModel *precisionModel);
00171                         // throw(GEOSException);
00172 
00182         void insertUniqueEdge(geomgraph::Edge *e);
00183 
00184         void createSubgraphs(geomgraph::PlanarGraph *graph,
00185                         std::vector<BufferSubgraph*>& list);
00186 
00197         void buildSubgraphs(const std::vector<BufferSubgraph*>& subgraphList,
00198                         overlay::PolygonBuilder& polyBuilder);
00199 
00203         //
00208         noding::Noder* getNoder(const geom::PrecisionModel* precisionModel);
00209 
00210 
00218         geom::Geometry* createEmptyResultGeometry() const;
00219     
00220     // Declare type as noncopyable
00221     BufferBuilder(const BufferBuilder& other);
00222     BufferBuilder& operator=(const BufferBuilder& rhs);
00223 };
00224 
00225 } // namespace geos::operation::buffer
00226 } // namespace geos::operation
00227 } // namespace geos
00228 
00229 #ifdef _MSC_VER
00230 #pragma warning(pop)
00231 #endif
00232 
00233 #endif // ndef GEOS_OP_BUFFER_BUFFERBUILDER_H
00234 
00235 /**********************************************************************
00236  * $Log$
00237  * Revision 1.2  2006/03/14 16:08:21  strk
00238  * changed buildSubgraphs signature to use refs rather then pointers, made it const-correct. Reduced heap allocations in createSubgraphs()
00239  *
00240  * Revision 1.1  2006/03/14 00:19:40  strk
00241  * opBuffer.h split, streamlined headers in some (not all) files in operation/buffer/
00242  *
00243  **********************************************************************/
00244 

Generated on Thu Aug 2 2012 15:55:59 for GEOS by  doxygen 1.7.2