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

📄 segmentstring.h

📁 在Linux下做的QuadTree的程序
💻 H
字号:
/********************************************************************** * $Id: SegmentString.h 1872 2006-10-20 11:18:39Z 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_NODING_SEGMENTSTRING_H#define GEOS_NODING_SEGMENTSTRING_H#include <geos/noding/SegmentNodeList.h>#include <geos/geom/CoordinateSequence.h> // for testInvariant#include <geos/inline.h>#include <vector>// Forward declarationsnamespace geos {	namespace algorithm {		class LineIntersector;	}}namespace geos {namespace noding { // geos.noding/** \brief * Represents a list of contiguous line segments, * and supports noding the segments. * * The line segments are represented by a CoordinateSequence. * * TODO: * This should be changed to use a vector of Coordinate, * to optimize the noding of contiguous segments by * reducing the number of allocated objects. * * SegmentStrings can carry a context object, which is useful * for preserving topological or parentage information. * All noded substrings are initialized with the same context object. * * Final class. * * Last port: noding/SegmentString.java rev. 1.5 (JTS-1.7) */class SegmentString {public:	typedef std::vector<const SegmentString*> ConstVect;	typedef std::vector<SegmentString *> NonConstVect;	friend std::ostream& operator<< (std::ostream& os,			const SegmentString& ss);private:	SegmentNodeList nodeList;	geom::CoordinateSequence *pts;	mutable unsigned int npts; // this is a cache	const void* context;	bool isIsolatedVar;public:	void testInvariant() const;	/// Construct a SegmentString.	//	/// @param newPts CoordinateSequence representing the string,	/// externally owned	///	/// @param newContext the context associated to this SegmentString	///	SegmentString(geom::CoordinateSequence *newPts, const void* newContext);	~SegmentString();	//const void* getContext() const { return getData(); }	const void* getData() const;	const SegmentNodeList& getNodeList() const;	SegmentNodeList& getNodeList();	unsigned int size() const;	const geom::Coordinate& getCoordinate(unsigned int i) const;	/// \brief	/// Return a pointer to the CoordinateSequence associated	/// with this SegmentString.	//	/// Note that the CoordinateSequence is not owned by	/// this SegmentString!	///	geom::CoordinateSequence* getCoordinates() const;	/// \brief	/// Notify this object that the CoordinateSequence associated	/// with it might have been updated.	//	/// This must be called so that the SegmentString object makes	/// all the necessary checks and updates to verify consistency	///	void notifyCoordinatesChange() const;	// Return a read-only pointer to this SegmentString CoordinateSequence	//const CoordinateSequence* getCoordinatesRO() const { return pts; }	void setIsolated(bool isIsolated);	bool isIsolated() const;		bool isClosed() const;	/** \brief	 * Gets the octant of the segment starting at vertex	 * <code>index</code>.	 *	 * @param index the index of the vertex starting the segment. 	 *              Must not be the last index in the vertex list	 * @return the octant of the segment at the vertex	 */	int getSegmentOctant(unsigned int index) const;	/** \brief	 * Add {SegmentNode}s for one or both	 * intersections found for a segment of an edge to the edge	 * intersection list.	 */	void addIntersections(algorithm::LineIntersector *li,			unsigned int segmentIndex, int geomIndex);	/** \brief	 * Add an SegmentNode for intersection intIndex.	 *	 * An intersection that falls exactly on a vertex	 * of the SegmentString is normalized	 * to use the higher of the two possible segmentIndexes	 */	void addIntersection(algorithm::LineIntersector *li,			unsigned int segmentIndex,			int geomIndex, int intIndex);	/** \brief	 * Add an SegmentNode for intersection intIndex.	 *	 * An intersection that falls exactly on a vertex of the	 * edge is normalized	 * to use the higher of the two possible segmentIndexes	 */	void addIntersection(const geom::Coordinate& intPt,			unsigned int segmentIndex);	static void getNodedSubstrings(			const SegmentString::NonConstVect& segStrings,			SegmentString::NonConstVect* resultEdgeList);	static SegmentString::NonConstVect* getNodedSubstrings(			const SegmentString::NonConstVect& segStrings);};inline voidSegmentString::testInvariant() const{	assert(pts);	assert(pts->size() > 1);	assert(pts->size() == npts);}std::ostream& operator<< (std::ostream& os, const SegmentString& ss);} // namespace geos.noding} // namespace geos#ifdef GEOS_INLINE# include "geos/noding/SegmentString.inl"#endif#endif/********************************************************************** * $Log$ * Revision 1.10  2006/05/05 14:25:05  strk * moved getSegmentOctant out of .inl into .cpp, renamed private eiList to nodeList as in JTS, added more assertion checking and fixed doxygen comments * * Revision 1.9  2006/05/05 10:19:06  strk * droppped SegmentString::getContext(), new name is getData() to reflect change in JTS * * Revision 1.8  2006/05/04 08:29:07  strk * * source/noding/ScaledNoder.cpp: removed use of SegmentString::setCoordinates(). * * source/headers/geos/noding/SegmentStrign.{h,inl}: removed new setCoordinates() interface. * * Revision 1.7  2006/05/04 07:43:44  strk * output operator for SegmentString class * * Revision 1.6  2006/05/03 18:04:49  strk * added SegmentString::setCoordinates() interface * * Revision 1.5  2006/05/03 16:19:39  strk * fit in 80 columns * * Revision 1.4  2006/05/03 15:26:02  strk * testInvariant made public and always inlined * * Revision 1.3  2006/03/24 09:52:41  strk * USE_INLINE => GEOS_INLINE * * Revision 1.2  2006/03/13 21:14:24  strk * Added missing forward declarations * * Revision 1.1  2006/03/09 16:46:49  strk * geos::geom namespace definition, first pass at headers split * **********************************************************************/

⌨️ 快捷键说明

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