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

📄 mcindexsnaprounder.cpp

📁 在Linux下做的QuadTree的程序
💻 CPP
字号:
/********************************************************************** * $Id: MCIndexSnapRounder.cpp 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 Licence as published * by the Free Software Foundation.  * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/snapround/MCIndexSnapRounder.java rev. 1.1 (JTS-1.7) * **********************************************************************/#include <geos/noding/MCIndexNoder.h>#include <geos/noding/snapround/MCIndexSnapRounder.h>#include <geos/noding/snapround/HotPixel.h>#include <geos/noding/IntersectionFinderAdder.h>#include <geos/noding/NodingValidator.h>#include <geos/geom/Coordinate.h>#include <geos/geom/CoordinateSequence.h>#include <geos/inline.h>#include <functional> // std::mem_fun, std::bind1st#include <algorithm> // std::for_each #include <vector>#ifndef GEOS_INLINE# include <geos/noding/snapround/MCIndexSnapRounder.inl>#endifusing namespace std;using namespace geos::geom;namespace geos {namespace noding { // geos.nodingnamespace snapround { // geos.noding.snapround/*private*/voidMCIndexSnapRounder::findInteriorIntersections(MCIndexNoder& noder,		SegmentString::NonConstVect* segStrings,		vector<Coordinate>& intersections){	IntersectionFinderAdder intFinderAdder(li, intersections);	noder.setSegmentIntersector(&intFinderAdder);	noder.computeNodes(segStrings);}/* private */voidMCIndexSnapRounder::computeIntersectionSnaps(vector<Coordinate>& snapPts){	for (vector<Coordinate>::iterator			it=snapPts.begin(), itEnd=snapPts.end();			it!=itEnd;			++it)	{		Coordinate& snapPt = *it;		HotPixel hotPixel(snapPt, scaleFactor, li);		pointSnapper->snap(hotPixel);	}}/*private*/voidMCIndexSnapRounder::computeEdgeVertexSnaps(SegmentString* e){	CoordinateSequence& pts0 = *(e->getCoordinates());	for (unsigned int i=0, n=pts0.size()-1; i<n; ++i)	{		HotPixel hotPixel(pts0[i], scaleFactor, li);		bool isNodeAdded = pointSnapper->snap(hotPixel, e, i);		// if a node is created for a vertex, that vertex must be noded too		if (isNodeAdded) {			e->addIntersection(pts0[i], i);		}	}}/*public*/voidMCIndexSnapRounder::computeVertexSnaps(SegmentString::NonConstVect& edges){	for_each(edges.begin(), edges.end(), bind1st(mem_fun(&MCIndexSnapRounder::computeEdgeVertexSnaps), this));}/*private*/voidMCIndexSnapRounder::snapRound(MCIndexNoder& noder, 		SegmentString::NonConstVect* segStrings){	vector<Coordinate> intersections; 	findInteriorIntersections(noder, segStrings, intersections);	computeIntersectionSnaps(intersections);	computeVertexSnaps(*segStrings);	}/*public*/voidMCIndexSnapRounder::computeNodes(SegmentString::NonConstVect* inputSegmentStrings){	nodedSegStrings = inputSegmentStrings;	MCIndexNoder noder;	pointSnapper.release(); // let it leak	pointSnapper.reset(new MCIndexPointSnapper(noder.getIndex()));	snapRound(noder, inputSegmentStrings);	// testing purposes only - remove in final version	assert(nodedSegStrings == inputSegmentStrings);	checkCorrectness(*inputSegmentStrings);}/*private*/voidMCIndexSnapRounder::checkCorrectness(	SegmentString::NonConstVect& inputSegmentStrings){	auto_ptr<SegmentString::NonConstVect> resultSegStrings(		SegmentString::getNodedSubstrings(inputSegmentStrings)	);	NodingValidator nv(*(resultSegStrings.get()));	try {		nv.checkValid();	} catch (const std::exception &ex) {		std::cerr << ex.what() << std::endl;		throw;	}}} // namespace geos.noding.snapround} // namespace geos.noding} // namespace geos/********************************************************************** * $Log$ * Revision 1.11  2006/05/05 15:40:39  strk * Had nodind validation error throw an exception for SimpleSnapRounder * and MCIndexSnapRounder * * Revision 1.10  2006/04/03 10:44:19  strk * Added missing headers * * Revision 1.9  2006/03/24 09:52:41  strk * USE_INLINE => GEOS_INLINE * * Revision 1.8  2006/03/22 18:12:32  strk * indexChain.h header split. * * Revision 1.7  2006/03/14 12:55:56  strk * Headers split: geomgraphindex.h, nodingSnapround.h * * Revision 1.6  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.5  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.4  2006/02/21 16:53:49  strk * MCIndexPointSnapper, MCIndexSnapRounder * * Revision 1.3  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.2  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.1  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. * **********************************************************************/

⌨️ 快捷键说明

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