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

📄 bufferbuilder.cpp

📁 在Linux下做的QuadTree的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		{			labelToMerge=new Label(*(e->getLabel()));			labelToMerge->flip();			newLabels.push_back(labelToMerge);		}		existingLabel->merge(*labelToMerge);		// compute new depth delta of sum of edges		int mergeDelta=depthDelta(labelToMerge);		int existingDelta=existingEdge->getDepthDelta();		int newDelta=existingDelta + mergeDelta;		existingEdge->setDepthDelta(newDelta);		// we have memory release responsibility 		delete e;	} else {   // no matching existing edge was found		// add this new edge to the list of edges in this graph		edgeList.add(e);		e->setDepthDelta(depthDelta(e->getLabel()));	}}bool BufferSubgraphGT(BufferSubgraph *first, BufferSubgraph *second) {	if (first->compareTo(second)>0)		return true;	else		return false;}/*private*/voidBufferBuilder::createSubgraphs(PlanarGraph *graph, std::vector<BufferSubgraph*>& subgraphList){	std::vector<Node*> nodes;	graph->getNodes(nodes);	for (size_t i=0, n=nodes.size(); i<n; i++) {		Node *node=nodes[i];		if (!node->isVisited()) {			BufferSubgraph *subgraph=new BufferSubgraph();			subgraph->create(node);			subgraphList.push_back(subgraph);		}	}	/*	 * Sort the subgraphs in descending order of their rightmost coordinate	 * This ensures that when the Polygons for the subgraphs are built,	 * subgraphs for shells will have been built before the subgraphs for	 * any holes they contain	 */	sort(subgraphList.begin(), subgraphList.end(), BufferSubgraphGT);}/*private*/voidBufferBuilder::buildSubgraphs(const std::vector<BufferSubgraph*>& subgraphList,		PolygonBuilder& polyBuilder){#if GEOS_DEBUG	std::cerr << __FUNCTION__ << " got " << subgraphList.size() << " subgraphs" << std::endl;#endif	std::vector<BufferSubgraph*> processedGraphs;	for (size_t i=0, n=subgraphList.size(); i<n; i++)	{		BufferSubgraph *subgraph=subgraphList[i];		Coordinate *p=subgraph->getRightmostCoordinate();		assert(p);#if GEOS_DEBUG		std::cerr << " " << i << ") Subgraph[" << subgraph << "]" << std::endl;		std::cerr << "  rightmost Coordinate " << *p;#endif		SubgraphDepthLocater locater(&processedGraphs);#if GEOS_DEBUG		std::cerr << " after SubgraphDepthLocater processedGraphs contain "		          << processedGraphs.size()		          << " elements" << std::endl;#endif		int outsideDepth=locater.getDepth(*p);#if GEOS_DEBUG		std::cerr << " Depth of rightmost coordinate: " << outsideDepth << std::endl;#endif		subgraph->computeDepth(outsideDepth);		subgraph->findResultEdges();#if GEOS_DEBUG		std::cerr << " after computeDepth and findResultEdges subgraph contain:" << std::endl		          << "   " << subgraph->getDirectedEdges()->size() << " DirecteEdges " << std::endl		          << "   " << subgraph->getNodes()->size() << " Nodes " << std::endl;#endif		processedGraphs.push_back(subgraph);#if GEOS_DEBUG		std::cerr << " added " << subgraph << " to processedGraphs, new size is "		          << processedGraphs.size() << std::endl;#endif		polyBuilder.add(subgraph->getDirectedEdges(), subgraph->getNodes());	}}/*private*/geom::Geometry*BufferBuilder::createEmptyResultGeometry() const{	geom::Geometry* emptyGeom = geomFact->createPolygon(NULL, NULL);	return emptyGeom;}} // namespace geos.operation.buffer} // namespace geos.operation} // namespace geos/********************************************************************** * $Log$ * Revision 1.56  2006/06/12 11:29:23  strk * unsigned int => size_t * * Revision 1.55  2006/05/04 09:16:58  strk * Added JTS debugging, for comparison with JTS * * Revision 1.54  2006/03/24 09:25:02  strk * Bugs #77 and #76: missing <algorithm> * * Revision 1.53  2006/03/22 18:12:32  strk * indexChain.h header split. * * Revision 1.52  2006/03/17 13:24:59  strk * opOverlay.h header splitted. Reduced header inclusions in operation/overlay implementation files. ElevationMatrixFilter code moved from own file to ElevationMatrix.cpp (ideally a class-private). * * Revision 1.51  2006/03/15 18:57:10  strk * cleanups in DEBUG lines * * Revision 1.50  2006/03/15 13:03:01  strk * removed leftover debugging line * * Revision 1.49  2006/03/15 11:42:54  strk * more debugging lines, with two levels of debugging handled * * Revision 1.48  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.47  2006/03/14 14:16:52  strk * operator<< for BufferSubgraph, more debugging calls * * Revision 1.46  2006/03/14 12:55:56  strk * Headers split: geomgraphindex.h, nodingSnapround.h * * Revision 1.45  2006/03/14 00:19:40  strk * opBuffer.h split, streamlined headers in some (not all) files in operation/buffer/ * * Revision 1.44  2006/03/10 10:44:53  strk * Unreferenced exception objects cleanup (#52) * * Revision 1.43  2006/03/06 19:40:47  strk * geos::util namespace. New GeometryCollection::iterator interface, many cleanups. * * Revision 1.42  2006/03/03 10:46:21  strk * Removed 'using namespace' from headers, added missing headers in .cpp files, removed useless includes in headers (bug#46) * * Revision 1.41  2006/03/02 12:12:01  strk * Renamed DEBUG macros to GEOS_DEBUG, all wrapped in #ifndef block to allow global override (bug#43) * * Revision 1.40  2006/02/28 17:44:27  strk * Added a check in SegmentNode::addSplitEdge to prevent attempts * to build SegmentString with less then 2 points. * This is a temporary fix for the buffer.xml assertion failure, temporary * as Martin Davis review would really be needed there. * * Revision 1.39  2006/02/28 14:34:05  strk * Added many assertions and debugging output hunting for a bug in BufferOp * * Revision 1.38  2006/02/23 20:05:21  strk * Fixed bug in MCIndexNoder constructor making memory checker go crazy, more * doxygen-friendly comments, miscellaneous cleanups * * Revision 1.37  2006/02/23 11:54:20  strk * - MCIndexPointSnapper * - MCIndexSnapRounder * - SnapRounding BufferOp * - ScaledNoder * - GEOSException hierarchy cleanups * - SpatialIndex memory-friendly query interface * - GeometryGraph::getBoundaryNodes memory-friendly * - NodeMap::getBoundaryNodes memory-friendly * - Cleanups in geomgraph::Edge * - Added an XML test for snaprounding buffer (shows leaks, working on it) * * Revision 1.36  2006/02/19 19:46:49  strk * Packages <-> namespaces mapping for most GEOS internal code (uncomplete, but working). Dir-level libs for index/ subdirs. * * Revision 1.35  2006/02/18 21:08:09  strk * - new CoordinateSequence::applyCoordinateFilter method (slow but useful) * - SegmentString::getCoordinates() doesn't return a clone anymore. * - SegmentString::getCoordinatesRO() obsoleted. * - SegmentString constructor does not promises constness of passed *   CoordinateSequence anymore. * - NEW ScaledNoder class * - Stubs for MCIndexPointSnapper and  MCIndexSnapRounder * - Simplified internal interaces of OffsetCurveBuilder and OffsetCurveSetBuilder * * Revision 1.34  2006/02/14 13:28:26  strk * New SnapRounding code ported from JTS-1.7 (not complete yet). * Buffer op optimized by using new snaprounding code. * Leaks fixed in XMLTester. * * Revision 1.33  2006/02/09 15:52:47  strk * GEOSException derived from std::exception; always thrown and cought by const ref. * * Revision 1.32  2006/02/08 17:18:28  strk * - New WKTWriter::toLineString and ::toPoint convenience methods * - New IsValidOp::setSelfTouchingRingFormingHoleValid method * - New Envelope::centre() * - New Envelope::intersection(Envelope) * - New Envelope::expandBy(distance, [ydistance]) * - New LineString::reverse() * - New MultiLineString::reverse() * - New Geometry::buffer(distance, quadSeg, endCapStyle) * - Obsoleted toInternalGeometry/fromInternalGeometry * - More const-correctness in Buffer "package" * * Revision 1.31  2006/01/31 19:07:34  strk * - Renamed DefaultCoordinateSequence to CoordinateArraySequence. * - Moved GetNumGeometries() and GetGeometryN() interfaces *   from GeometryCollection to Geometry class. * - Added getAt(int pos, Coordinate &to) funtion to CoordinateSequence class. * - Reworked automake scripts to produce a static lib for each subdir and *   then link all subsystem's libs togheter * - Moved C-API in it's own top-level dir capi/ * - Moved source/bigtest and source/test to tests/bigtest and test/xmltester * - Fixed PointLocator handling of LinearRings * - Changed CoordinateArrayFilter to reduce memory copies * - Changed UniqueCoordinateArrayFilter to reduce memory copies * - Added CGAlgorithms::isPointInRing() version working with *   Coordinate::ConstVect type (faster!) * - Ported JTS-1.7 version of ConvexHull with big attention to *   memory usage optimizations. * - Improved XMLTester output and user interface * - geos::geom::util namespace used for geom/util stuff * - Improved memory use in geos::geom::util::PolygonExtractor * - New ShortCircuitedGeometryVisitor class * - New operation/predicate package * * Revision 1.30  2005/11/21 16:03:20  strk * * Coordinate interface change: *         Removed setCoordinate call, use assignment operator *         instead. Provided a compile-time switch to *         make copy ctor and assignment operators non-inline *         to allow for more accurate profiling. * * Coordinate copies removal: *         NodeFactory::createNode() takes now a Coordinate reference *         rather then real value. This brings coordinate copies *         in the testLeaksBig.xml test from 654818 to 645991 *         (tested in 2.1 branch). In the head branch Coordinate *         copies are 222198. *         Removed useless coordinate copies in ConvexHull *         operations * * STL containers heap allocations reduction: *         Converted many containers element from *         pointers to real objects. *         Made some use of .reserve() or size *         initialization when final container size is known *         in advance. * * Stateless classes allocations reduction: *         Provided ::instance() function for *         NodeFactories, to avoid allocating *         more then one (they are all *         stateless). * * HCoordinate improvements: *         Changed HCoordinate constructor by HCoordinates *         take reference rather then real objects. *         Changed HCoordinate::intersection to avoid *         a new allocation but rather return into a provided *         storage. LineIntersector changed to reflect *         the above change. * * Revision 1.29  2005/11/14 18:14:04  strk * Reduced heap allocations made by TopologyLocation and Label objects. * Enforced const-correctness on GraphComponent. * Cleanups. * * Revision 1.28  2005/08/22 13:31:17  strk * Fixed comparator functions used with STL sort() algorithm to * implement StrictWeakOrdering semantic. * * Revision 1.27  2005/05/19 10:29:28  strk * Removed some CGAlgorithms instances substituting them with direct calls * to the static functions. Interfaces accepting CGAlgorithms pointers kept * for backward compatibility but modified to make the argument optional. * Fixed a small memory leak in OffsetCurveBuilder::getRingCurve. * Inlined some smaller functions encountered during bug hunting. * Updated Copyright notices in the touched files. * * Revision 1.26  2005/02/01 13:44:59  strk * More profiling labels. * * Revision 1.25  2004/12/08 13:54:43  strk * gcc warnings checked and fixed, general cleanups. * * Revision 1.24  2004/11/04 19:08:07  strk * Cleanups, initializers list, profiling. * **********************************************************************/

⌨️ 快捷键说明

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