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

📄 buffersubgraph.h

📁 在Linux下做的QuadTree的程序
💻 H
字号:
/********************************************************************** * $Id: BufferSubgraph.h 1820 2006-09-06 16:54:23Z mloskot $ * * 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_BUFFERSUBGRAPH_H#define GEOS_OP_BUFFER_BUFFERSUBGRAPH_H#include <vector>#include <set>#include <geos/operation/buffer/RightmostEdgeFinder.h> // for composition// Forward declarationsnamespace geos {	namespace geom {		class Coordinate;		class Envelope;	}	namespace algorithm {		class CGAlgorithms;	}	namespace geomgraph {		class DirectedEdge;		class Node;	}}namespace geos {namespace operation { // geos.operationnamespace buffer { // geos.operation.buffer/** * \brief A connected subset of the graph of DirectedEdges and geomgraph::Node. *  * Its edges will generate either * - a single polygon in the complete buffer, with zero or more holes, or * -  ne or more connected holes */class BufferSubgraph {private:	RightmostEdgeFinder finder;	std::vector<geomgraph::DirectedEdge*> dirEdgeList;	std::vector<geomgraph::Node*> nodes;	geom::Coordinate *rightMostCoord;	geom::Envelope *env;	/** \brief	 * Adds all nodes and edges reachable from this node to the subgraph.	 *	 * Uses an explicit stack to avoid a large depth of recursion.	 *	 * @param node a node known to be in the subgraph	 */	void addReachable(geomgraph::Node *startNode);	/// Adds the argument node and all its out edges to the subgraph	//	/// @param node the node to add	/// @param nodeStack the current set of nodes being traversed	///	void add(geomgraph::Node* node, std::vector<geomgraph::Node*>* nodeStack);	void clearVisitedEdges();	/** \brief	 * Compute depths for all dirEdges via breadth-first traversal	 * of nodes in graph	 *	 * @param startEdge edge to start processing with	 */	// <FIX> MD - use iteration & queue rather than recursion, for speed and robustness	void computeDepths(geomgraph::DirectedEdge *startEdge);	void computeNodeDepth(geomgraph::Node *n);	void copySymDepths(geomgraph::DirectedEdge *de);	bool contains(std::set<geomgraph::Node*>& nodes, geomgraph::Node *node);public:	friend std::ostream& operator<< (std::ostream& os, const BufferSubgraph& bs);	/** \brief	 * algorithm::CGAlgorithms arg kept for backward-compatibility.	 * It is unused.	 */	BufferSubgraph(algorithm::CGAlgorithms *cga=NULL);	~BufferSubgraph();	std::vector<geomgraph::DirectedEdge*>* getDirectedEdges();	std::vector<geomgraph::Node*>* getNodes();	/** \brief	 * Gets the rightmost coordinate in the edges of the subgraph	 */	geom::Coordinate* getRightmostCoordinate();	/** \brief	 * Creates the subgraph consisting of all edges reachable from	 * this node.	 *	 * Finds the edges in the graph and the rightmost coordinate.	 *	 * @param node a node to start the graph traversal from	 */	void create(geomgraph::Node *node);	void computeDepth(int outsideDepth);	/** \brief	 * Find all edges whose depths indicates that they are in the	 * result area(s).	 *	 * Since we want polygon shells to be	 * oriented CW, choose dirEdges with the interior of the result	 * on the RHS.	 * Mark them as being in the result.	 * Interior Area edges are the result of dimensional collapses.	 * They do not form part of the result area boundary.	 */	void findResultEdges();	/** \brief	 * BufferSubgraphs are compared on the x-value of their rightmost	 * Coordinate.	 *	 * This defines a partial ordering on the graphs such that:	 * 	 * g1 >= g2 <==> Ring(g2) does not contain Ring(g1)	 *	 * where Polygon(g) is the buffer polygon that is built from g.	 *	 * This relationship is used to sort the BufferSubgraphs so	 * that shells are guaranteed to	 * be built before holes.	 */	int compareTo(BufferSubgraph *);	/** \brief	 * Computes the envelope of the edges in the subgraph.	 * The envelope is cached after being computed.	 *	 * @return the envelope of the graph.	 */	geom::Envelope *getEnvelope();};std::ostream& operator<< (std::ostream& os, const BufferSubgraph& bs);// INLINESinline geom::Coordinate*BufferSubgraph::getRightmostCoordinate() {return rightMostCoord;}inline std::vector<geomgraph::Node*>*BufferSubgraph::getNodes() { return &nodes; }inline std::vector<geomgraph::DirectedEdge*>*BufferSubgraph::getDirectedEdges() {	return &dirEdgeList;}bool BufferSubgraphGT(BufferSubgraph *first, BufferSubgraph *second);} // namespace geos::operation::buffer} // namespace geos::operation} // namespace geos#endif // ndef GEOS_OP_BUFFER_BUFFERSUBGRAPH_H/********************************************************************** * $Log$ * Revision 1.3  2006/03/15 11:45:06  strk * doxygen comments * * Revision 1.2  2006/03/14 14:16:52  strk * operator<< for BufferSubgraph, more debugging calls * * 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 + -