Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | Related Pages

BufferOp.h

00001 /**********************************************************************
00002  * $Id: BufferOp.h 2559 2009-06-08 10:07:05Z strk $
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) 2005-2007 Refractions Research Inc.
00009  * Copyright (C) 2001-2002 Vivid Solutions 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/BufferOp.java rev. 1.43 (JTS-1.10)
00019  *
00020  **********************************************************************/
00021 
00022 #ifndef GEOS_OP_BUFFER_BUFFEROP_H
00023 #define GEOS_OP_BUFFER_BUFFEROP_H
00024 
00025 #include <geos/export.h>//#include <geos/operation/buffer/OffsetCurveBuilder.h> // for enum values 
00026 #include <geos/operation/buffer/BufferParameters.h> // for enum values 
00027 
00028 #include <geos/util/TopologyException.h> // for composition
00029 
00030 // Forward declarations
00031 namespace geos {
00032         namespace geom {
00033                 class PrecisionModel;
00034                 class Geometry;
00035         }
00036 }
00037 
00038 namespace geos {
00039 namespace operation { // geos.operation
00040 namespace buffer { // geos.operation.buffer
00041 
00072 class GEOS_DLL BufferOp {
00073 
00074 
00075 private:
00076 
00083         static const int MAX_PRECISION_DIGITS = 12;
00084 
00101         static double precisionScaleFactor(const geom::Geometry *g,
00102                         double distance, int maxPrecisionDigits);
00103 
00104         const geom::Geometry *argGeom;
00105 
00106         util::TopologyException saveException;
00107 
00108         double distance;
00109 
00110         //int quadrantSegments;
00111         //int endCapStyle;
00112         BufferParameters bufParams;
00113 
00114         geom::Geometry* resultGeometry;
00115 
00116         void computeGeometry();
00117 
00118         void bufferOriginalPrecision();
00119 
00120         void bufferReducedPrecision(int precisionDigits);
00121 
00122         void bufferReducedPrecision();
00123 
00124         void bufferFixedPrecision(const geom::PrecisionModel& fixedPM);
00125 
00126 public:
00127 
00128         enum {
00131                 CAP_ROUND = BufferParameters::CAP_ROUND,
00132 
00135                 CAP_BUTT = BufferParameters::CAP_FLAT,
00136 
00139                 CAP_SQUARE = BufferParameters::CAP_FLAT
00140         };
00141 
00153         static geom::Geometry* bufferOp(const geom::Geometry *g,
00154                 double distance,
00155                 int quadrantSegments=
00156                         BufferParameters::DEFAULT_QUADRANT_SEGMENTS,
00157                 int endCapStyle=BufferParameters::CAP_ROUND);
00158 
00164         BufferOp(const geom::Geometry *g)
00165                 :
00166                 argGeom(g),
00167                 bufParams(),
00168                 resultGeometry(NULL)
00169         {
00170         }
00171 
00180         BufferOp(const geom::Geometry* g, const BufferParameters& params)
00181                 :
00182                 argGeom(g),
00183                 bufParams(params),
00184                 resultGeometry(NULL)
00185         {
00186         }
00187 
00188 
00196         inline void setEndCapStyle(int nEndCapStyle);
00197 
00205         inline void setQuadrantSegments(int nQuadrantSegments);
00206 
00215         geom::Geometry* getResultGeometry(double nDistance);
00216 
00217 };
00218 
00219 // BufferOp inlines
00220 void
00221 BufferOp::setQuadrantSegments(int q)
00222 {
00223         bufParams.setQuadrantSegments(q);
00224 }
00225 
00226 void
00227 BufferOp::setEndCapStyle(int s)
00228 {
00229         bufParams.setEndCapStyle((BufferParameters::EndCapStyle)s);
00230 }
00231 
00232 
00233 } // namespace geos::operation::buffer
00234 } // namespace geos::operation
00235 } // namespace geos
00236 
00237 #endif // ndef GEOS_OP_BUFFER_BUFFEROP_H
00238 
00239 /**********************************************************************
00240  * $Log$
00241  * Revision 1.1  2006/03/14 00:19:40  strk
00242  * opBuffer.h split, streamlined headers in some (not all) files in operation/buffer/
00243  *
00244  **********************************************************************/
00245 

Generated on Thu Jun 11 06:17:00 2009 for GEOS by  doxygen 1.4.4