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

📄 offsetcurvevertexlist.h

📁 在Linux下做的QuadTree的程序
💻 H
字号:
/********************************************************************** * $Id: OffsetCurveBuilder.h 1820 2006-09-06 16:54:23Z mloskot $ * * GEOS - Geometry Engine Open Source * http://geos.refractions.net * * Copyright (C) 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. * ********************************************************************** * * Last port: operation/buffer/OffsetCurveVertexList.java rev. 1.1 * **********************************************************************/#ifndef GEOS_OP_BUFFER_OFFSETCURVEVERTEXLIST_H#define GEOS_OP_BUFFER_OFFSETCURVEVERTEXLIST_H#include <geos/geom/Coordinate.h> // for inlines#include <geos/geom/CoordinateSequence.h> // for inlines#include <geos/geom/CoordinateArraySequence.h> // for composition#include <geos/geom/PrecisionModel.h> // for inlines#include <vector>#include <memory>// Forward declarationsnamespace geos {	namespace geom {		//class CoordinateSequence;		//class PrecisionModel;	}}namespace geos {namespace operation { // geos.operationnamespace buffer { // geos.operation.buffer// ---------------------------------------------// OffsetCurveVertexList// ---------------------------------------------/// A list of the vertices in a constructed offset curve.///// Automatically removes close adjacent vertices.///class OffsetCurveVertexList {private:	geom::CoordinateSequence* ptList;	bool ptListConsumed;	const geom::PrecisionModel* precisionModel;  	/** \brief	 * The distance below which two adjacent points on the curve 	 * are considered to be coincident.	 *	 * This is chosen to be a small fraction of the offset distance.	 */	double minimumVertexDistance;	/** \brief	 * Tests whether the given point duplicates the previous	 * point in the list (up to tolerance)	 * 	 * @param pt	 * @return true if the point duplicates the previous point	 */	bool isDuplicate(const geom::Coordinate& pt)	{		if (ptList->size() < 1)			return false;		const geom::Coordinate& lastPt = ptList->back();		double ptDist = pt.distance(lastPt);		if (ptDist < minimumVertexDistance)			return true;		return false;	}	public:		OffsetCurveVertexList()		:		ptList(new geom::CoordinateArraySequence()),		ptListConsumed(false),		precisionModel(NULL),		minimumVertexDistance (0.0)	{	}	~OffsetCurveVertexList()	{		if (!ptListConsumed)			delete ptList;	}		void setPrecisionModel(const geom::PrecisionModel* nPrecisionModel)	{		precisionModel = nPrecisionModel;	}		void setMinimumVertexDistance(double nMinVertexDistance)	{		minimumVertexDistance = nMinVertexDistance;	}		void addPt(const geom::Coordinate& pt)	{		assert(precisionModel);		geom::Coordinate bufPt = pt;		precisionModel->makePrecise(bufPt);		// don't add duplicate (or near-duplicate) points		if (isDuplicate(bufPt))		{			return;		}		// we ask to allow repeated as we checked this ourself		// (JTS uses a vector for ptList, not a CoordinateSequence,		// we should do the same)		ptList->add(bufPt, true);		//ptList.push_back(bufPt);	}		// check that points are a ring - add the startpoint again if they are not	void closeRing()	{		if (ptList->size() < 1) return;		const geom::Coordinate& startPt = ptList->front();		const geom::Coordinate& lastPt = ptList->back();		if (startPt.equals(lastPt)) return;		// we ask to allow repeated as we checked this ourself		ptList->add(startPt, true);	}	geom::CoordinateSequence* getCoordinates()	{		closeRing();		ptListConsumed = true;		return ptList;	}};} // namespace geos.operation.buffer} // namespace geos.operation} // namespace geos#endif // ndef GEOS_OP_BUFFER_OFFSETCURVEVERTEXLIST_H/********************************************************************** * $Log$ **********************************************************************/

⌨️ 快捷键说明

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