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

📄 bufferbuilder.h

📁 在Linux下做的QuadTree的程序
💻 H
字号:
/********************************************************************** * $Id: BufferBuilder.h 1969 2007-02-06 01:57:23Z strk $ * * GEOS - Geometry Engine Open Source * http://geos.refractions.net * * Copyright (C) 2006-2007 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_BUFFERBUILDER_H#define GEOS_OP_BUFFER_BUFFERBUILDER_H#include <vector>#include <geos/operation/buffer/BufferOp.h> // for inlines (BufferOp enums)#include <geos/operation/buffer/OffsetCurveBuilder.h> // for inline (OffsetCurveBuilder enums)#include <geos/geomgraph/EdgeList.h> // for composition// Forward declarationsnamespace geos {	namespace geom {		class PrecisionModel;		class Geometry;		class GeometryFactory;	}	namespace algorithm {		class CGAlgorithms;		class LineIntersector;	}	namespace noding {		class Noder;		class SegmentString;		class IntersectionAdder;	}	namespace geomgraph {		class Edge;		class Label;		class PlanarGraph;	}	namespace operation {		namespace buffer {			class BufferSubgraph;		}		namespace overlay {			class PolygonBuilder;		}	}}namespace geos {namespace operation { // geos.operationnamespace buffer { // geos.operation.buffer/** * * \brief * Builds the buffer geometry for a given input geometry and precision model. * * Allows setting the level of approximation for circular arcs, * and the precision model in which to carry out the computation. *  * When computing buffers in floating point double-precision * it can happen that the process of iterated noding can fail to converge * (terminate). * * In this case a TopologyException will be thrown. * Retrying the computation in a fixed precision * can produce more robust results. * * Last port: operation/buffer/BufferBuilder.java rev. 1.21 (JTS-1.7) * */class BufferBuilder {private:	/**	 * Compute the change in depth as an edge is crossed from R to L	 */	static int depthDelta(geomgraph::Label *label);	int quadrantSegments;	int endCapStyle;	const geom::PrecisionModel* workingPrecisionModel;	algorithm::LineIntersector* li;	noding::IntersectionAdder* intersectionAdder;	noding::Noder* workingNoder;	const geom::GeometryFactory* geomFact;	geomgraph::EdgeList edgeList;	std::vector<geomgraph::Label *> newLabels;	void computeNodedEdges(std::vector<noding::SegmentString*>& bufferSegStrList,			const geom::PrecisionModel *precisionModel);			// throw(GEOSException);	/**	 * Inserted edges are checked to see if an identical edge already	 * exists.	 * If so, the edge is not inserted, but its label is merged	 * with the existing edge.	 *	 * The function takes responsability of releasing the Edge parameter	 * memory when appropriate.	 */	void insertEdge(geomgraph::Edge *e);	void createSubgraphs(geomgraph::PlanarGraph *graph,			std::vector<BufferSubgraph*>& list);	/**	 * Completes the building of the input subgraphs by	 * depth-labelling them,	 * and adds them to the PolygonBuilder.	 * The subgraph list must be sorted in rightmost-coordinate order.	 *	 * @param subgraphList the subgraphs to build	 * @param polyBuilder the PolygonBuilder which will build	 *        the final polygons	 */	void buildSubgraphs(const std::vector<BufferSubgraph*>& subgraphList,			overlay::PolygonBuilder& polyBuilder);	/// \brief	/// Return the externally-set noding::Noder OR a newly created	/// one using the given precisionModel.	//	/// NOTE: if an externally-set noding::Noder is available no	/// check is performed to ensure it will use the	/// given PrecisionModel	///	noding::Noder* getNoder(const geom::PrecisionModel* precisionModel);	/**	 * Gets the standard result for an empty buffer.	 * Since buffer always returns a polygonal result,	 * this is chosen to be an empty polygon.	 *	 * @return the empty result geometry, transferring ownership to caller.	 */	geom::Geometry* createEmptyResultGeometry() const;public:	/**	 * Creates a new BufferBuilder	 */	BufferBuilder()		:		quadrantSegments(OffsetCurveBuilder::DEFAULT_QUADRANT_SEGMENTS),		endCapStyle(BufferOp::CAP_ROUND),		workingPrecisionModel(NULL),		li(NULL),		intersectionAdder(NULL),		workingNoder(NULL),		geomFact(NULL),		edgeList()	{}	~BufferBuilder();	/**	 * Sets the number of segments used to approximate a angle fillet	 *	 * @param quadrantSegments the number of segments in a fillet for	 *  a quadrant	 */	void setQuadrantSegments(int nQuadrantSegments) {		quadrantSegments=nQuadrantSegments;	} 	/**	 * Sets the precision model to use during the curve computation	 * and noding,	 * if it is different to the precision model of the Geometry.	 * If the precision model is less than the precision of the	 * Geometry precision model,	 * the Geometry must have previously been rounded to that precision.	 *	 * @param pm the precision model to use	 */	void setWorkingPrecisionModel(const geom::PrecisionModel *pm) {		workingPrecisionModel=pm;	}	/**	 * Sets the {@link noding::Noder} to use during noding.	 * This allows choosing fast but non-robust noding, or slower	 * but robust noding.	 *	 * @param noder the noder to use	 */	void setNoder(noding::Noder* newNoder) { workingNoder = newNoder; }	void setEndCapStyle(int nEndCapStyle) {		endCapStyle=nEndCapStyle;	}	geom::Geometry* buffer(const geom::Geometry *g, double distance);		// throw (GEOSException);};} // namespace geos::operation::buffer} // namespace geos::operation} // namespace geos#endif // ndef GEOS_OP_BUFFER_BUFFERBUILDER_H/********************************************************************** * $Log$ * Revision 1.2  2006/03/14 16:08:21  strk * changed buildSubgraphs signature to use refs rather then pointers, made it const-correct. Reduced heap allocations in createSubgraphs() * * 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 + -