GEOS  3.3.7
TaggedLinesSimplifier.h
00001 /**********************************************************************
00002  * $Id: TaggedLinesSimplifier.h 2958 2010-03-29 11:29:40Z mloskot $
00003  *
00004  * GEOS - Geometry Engine Open Source
00005  * http://geos.refractions.net
00006  *
00007  * Copyright (C) 2006 Refractions Research Inc.
00008  *
00009  * This is free software; you can redistribute and/or modify it under
00010  * the terms of the GNU Lesser General Licence as published
00011  * by the Free Software Foundation. 
00012  * See the COPYING file for more information.
00013  *
00014  **********************************************************************
00015  *
00016  * Last port: simplify/TaggedLinesSimplifier.java rev. 1.4 (JTS-1.7.1)
00017  *
00018  **********************************************************************
00019  *
00020  * NOTES: changed from JTS design adding a private
00021  *        TaggedLineStringSimplifier member and making
00022  *        simplify(collection) method become a templated
00023  *        function.
00024  *
00025  **********************************************************************/
00026 
00027 #ifndef GEOS_SIMPLIFY_TAGGEDLINESSIMPLIFIER_H
00028 #define GEOS_SIMPLIFY_TAGGEDLINESSIMPLIFIER_H
00029 
00030 #include <geos/export.h>
00031 #include <vector>
00032 #include <memory>
00033 #include <cassert>
00034 
00035 #include <geos/simplify/LineSegmentIndex.h> // for templated function body
00036 #include <geos/simplify/TaggedLineStringSimplifier.h>
00037 
00038 #ifdef _MSC_VER
00039 #pragma warning(push)
00040 #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
00041 #endif
00042 
00043 // Forward declarations
00044 namespace geos {
00045         namespace simplify {
00046                 class TaggedLineString;
00047         }
00048 }
00049 
00050 namespace geos {
00051 namespace simplify { // geos::simplify
00052 
00057 class GEOS_DLL TaggedLinesSimplifier {
00058 
00059 public:
00060 
00061         TaggedLinesSimplifier();
00062 
00071         void setDistanceTolerance(double tolerance);
00072 
00086         template <class iterator_type>
00087         void simplify(
00088                 iterator_type begin,
00089                 iterator_type end)
00090         {
00091                 // add lines to the index
00092                 for (iterator_type it=begin; it != end; ++it) {
00093                         assert(*it);
00094                         inputIndex->add(*(*it));
00095                 }
00096 
00097                 // Simplify lines
00098                 for (iterator_type it=begin; it != end; ++it) {
00099                         assert(*it);
00100                         simplify(*(*it));
00101                 }
00102         }
00103 
00104 
00105 private:
00106 
00107         void simplify(TaggedLineString& line);
00108 
00109         std::auto_ptr<LineSegmentIndex> inputIndex;
00110 
00111         std::auto_ptr<LineSegmentIndex> outputIndex;
00112 
00113         std::auto_ptr<TaggedLineStringSimplifier> taggedlineSimplifier;
00114 };
00115 
00116 } // namespace geos::simplify
00117 } // namespace geos
00118 
00119 #ifdef _MSC_VER
00120 #pragma warning(pop)
00121 #endif
00122 
00123 #endif // GEOS_SIMPLIFY_TAGGEDLINESSIMPLIFIER_H
00124 
00125 /**********************************************************************
00126  * $Log$
00127  * Revision 1.4  2006/05/24 15:32:11  strk
00128  * * source/headers/geos/simplify/TaggedLinesSimplifier.h: added LineSegmentIndex.h include so that every use of the templated simplify() function get all the required definitions.
00129  *
00130  * Revision 1.3  2006/05/24 11:41:23  strk
00131  *         * source/headers/geos/simplify/TaggedLinesSimplifier.h,
00132  *         source/simplify/TaggedLinesSimplifier.cpp,
00133  *         source/simplify/TopologyPreservingSimplifier.cpp:
00134  *         fixed bug in TopologyPreservingSimplifier failing to
00135  *         detect intersections, refactored TaggedLinesSimplifier
00136  *         class to more closely match JTS and use templated
00137  *         functions.
00138  *
00139  * Revision 1.2  2006/04/13 14:25:17  strk
00140  * TopologyPreservingSimplifier initial port
00141  *
00142  * Revision 1.1  2006/04/13 10:39:12  strk
00143  * Initial implementation of TaggedLinesSimplifier class
00144  *
00145  **********************************************************************/