Click here to Skip to main content
15,894,825 members
Articles / Web Development / HTML

Polyline Simplification

Rate me:
Please Sign up or sign in to vote.
4.93/5 (97 votes)
25 Jun 2011MPL28 min read 261.1K   12.4K   185  
A generic C++ implementation for n-dimensional Douglas-Peucker approximation
/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is
 * 'psimpl - generic n-dimensional polyline simplification'.
 *
 * The Initial Developer of the Original Code is
 * Elmar de Koning.
 * Portions created by the Initial Developer are Copyright (C) 2010-2011
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * ***** END LICENSE BLOCK ***** */

/*
    psimpl - generic n-dimensional polyline simplification
    Copyright (C) 2010-2011 Elmar de Koning, edekoning@gmail.com

    This file is part of psimpl, and is hosted at SourceForge:
    http://sourceforge.net/projects/psimpl/
*/

#ifndef RENDERAREA_H
#define RENDERAREA_H


#include <QtGui/QFrame>
#include <QtGui/QPainterPath>


namespace psimpl {

    /*!
        \brief A frame that can draw polylines and their simplification.
        
        Note that the point count of each polyline is always limited to 100.000 to speed up drawing.
    */
    class RenderArea : public QFrame
    {
    public:
        RenderArea (QWidget *inParent = 0, Qt::WindowFlags inFlags = 0);
        void SetGeneratedPolyline (QVector <qreal>& polyline);
        void SetSimplifiedPolyline (QVector <qreal>& polyline);
        void SetVisibleGeneratedPolyline (bool visible) { mDrawGeneratedPolyline = visible; }
        void SetVisibleSimplifiedPolyline (bool visible) { mDrawSimplifiedPolyline = visible; }
        void SetKeepAspectRatio (bool keep) { mKeepAspectRatio = keep; }

    protected:
        void paintEvent (QPaintEvent *inEvent);

    private:
        QPainterPath Convert (QVector <qreal>& polyline);

    private:
        QPainterPath mGeneratedPolyline;
        QPainterPath mSimplifiedPolyline;
        bool mDrawGeneratedPolyline;
        bool mDrawSimplifiedPolyline;
        bool mKeepAspectRatio;
    };

} // namespace psimpl


#endif // RENDERAREA_H

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Mozilla Public License 1.1 (MPL 1.1)


Written By
Software Developer Optiver
Netherlands Netherlands
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions