⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bufferop.h

📁 在Linux下做的QuadTree的程序
💻 H
字号:
/********************************************************************** * $Id: BufferOp.h 1969 2007-02-06 01:57:23Z strk $ * * GEOS - Geometry Engine Open Source * http://geos.refractions.net * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation.  * See the COPYING file for more information. * **********************************************************************/#ifndef GEOS_OP_BUFFER_BUFFEROP_H#define GEOS_OP_BUFFER_BUFFEROP_H#include <geos/operation/buffer/OffsetCurveBuilder.h> // for enum values #include <geos/util/TopologyException.h> // for composition// Forward declarationsnamespace geos {	namespace geom {		class PrecisionModel;		class Geometry;	}}namespace geos {namespace operation { // geos.operationnamespace buffer { // geos.operation.buffer/** * \class BufferOp opBuffer.h geos/opBuffer.h * * \brief * Computes the buffer of a geometry, for both positive and negative * buffer distances. * * In GIS, the buffer of a geometry is defined as * the Minkowski sum or difference of the geometry * with a circle with radius equal to the absolute value of the buffer * distance. * In the CAD/CAM world buffers are known as </i>offset curves</i>. * In morphological analysis they are known as <i>erosion</i> and <i>dilation</i>. * * The buffer operation always returns a polygonal result. * The negative or zero-distance buffer of lines and points is always an empty Polygon. *  * Since true buffer curves may contain circular arcs, * computed buffer polygons can only be approximations to the true geometry. * The user can control the accuracy of the curve approximation by specifying * the number of linear segments with which to approximate a curve. *  * The end cap style of a linear buffer may be specified. * The following end cap styles are supported: * - CAP_ROUND - the usual round end caps * - CAP_BUTT - end caps are truncated flat at the line ends * - CAP_SQUARE - end caps are squared off at the buffer distance *   beyond the line ends *  * Last port: operation/buffer/BufferOp.java rev. 1.31 (JTS-1.7) * */class BufferOp {private:	/**	 *  A number of digits of precision which leaves some computational "headroom"	 *  for floating point operations.	 * 	 *  This value should be less than the decimal precision of double-precision values (16).	 */	static const int MAX_PRECISION_DIGITS = 12;	/**	 * Compute a reasonable scale factor to limit the precision of	 * a given combination of Geometry and buffer distance.	 * The scale factor is based on a heuristic.	 *	 * @param g the Geometry being buffered	 *	 * @param distance the buffer distance	 *	 * @param maxPrecisionDigits the mzx # of digits that should be	 *        allowed by the precision determined by the	 *        computed scale factor	 *	 * @return a scale factor that allows a reasonable amount of	 *         precision for the buffer computation	 */	static double precisionScaleFactor(const geom::Geometry *g,			double distance, int maxPrecisionDigits);	const geom::Geometry *argGeom;	util::TopologyException saveException;	double distance;	int quadrantSegments;	int endCapStyle;	geom::Geometry* resultGeometry;	void computeGeometry();	void bufferOriginalPrecision();	void bufferReducedPrecision(int precisionDigits);	void bufferReducedPrecision();	void bufferFixedPrecision(const geom::PrecisionModel& fixedPM);public:	enum {		/// Specifies a round line buffer end cap style.		CAP_ROUND,		/// Specifies a butt (or flat) line buffer end cap style.		CAP_BUTT,		/// Specifies a square line buffer end cap style.		CAP_SQUARE	};	/**	 * Computes the buffer for a geometry for a given buffer distance	 * and accuracy of approximation.	 *	 * @param g the geometry to buffer	 * @param distance the buffer distance	 * @param quadrantSegments the number of segments used to	 *        approximate a quarter circle	 * @return the buffer of the input geometry	 *	 */	static geom::Geometry* bufferOp(const geom::Geometry *g,		double distance,		int quadrantSegments=			OffsetCurveBuilder::DEFAULT_QUADRANT_SEGMENTS,		int endCapStyle=BufferOp::CAP_ROUND);	/**	 * Initializes a buffer computation for the given geometry	 *	 * @param g the geometry to buffer	 */	BufferOp(const geom::Geometry *g)		:		argGeom(g),		quadrantSegments(OffsetCurveBuilder::DEFAULT_QUADRANT_SEGMENTS),		endCapStyle(BufferOp::CAP_ROUND),		resultGeometry(NULL)	{}	/**	 * Specifies the end cap style of the generated buffer.	 * The styles supported are CAP_ROUND, CAP_BUTT, and CAP_SQUARE.	 * The default is CAP_ROUND.	 *	 * @param endCapStyle the end cap style to specify	 */	inline void setEndCapStyle(int nEndCapStyle);	/**	 * Specifies the end cap style of the generated buffer.	 * The styles supported are CAP_ROUND, CAP_BUTT, and CAP_SQUARE.	 * The default is CAP_ROUND.	 *	 * @param endCapStyle the end cap style to specify	 */	inline void setQuadrantSegments(int nQuadrantSegments);	/**	 * Returns the buffer computed for a geometry for a given buffer	 * distance.	 *	 * @param g the geometry to buffer	 * @param distance the buffer distance	 * @return the buffer of the input geometry	 */	geom::Geometry* getResultGeometry(double nDistance);	/**	 * Comutes the buffer for a geometry for a given buffer distance	 * and accuracy of approximation.	 *	 * @param g the geometry to buffer	 * @param distance the buffer distance	 * @param quadrantSegments the number of segments used to	 * approximate a quarter circle	 * @return the buffer of the input geometry	 *	 * @deprecated use setQuadrantSegments instead	 */	geom::Geometry* getResultGeometry(double nDistance, int nQuadrantSegments);};// BufferOp inlinesvoid BufferOp::setQuadrantSegments(int q) { quadrantSegments=q; }void BufferOp::setEndCapStyle(int s) { endCapStyle=s; }} // namespace geos::operation::buffer} // namespace geos::operation} // namespace geos#endif // ndef GEOS_OP_BUFFER_BUFFEROP_H/********************************************************************** * $Log$ * Revision 1.1  2006/03/14 00:19:40  strk * opBuffer.h split, streamlined headers in some (not all) files in operation/buffer/ * **********************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -