GEOS 3.2.1
|
00001 /********************************************************************** 00002 * $Id: BufferOp.h 2605 2009-06-26 21:59:14Z 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_SQUARE 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