Click here to Skip to main content
15,886,724 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 258.9K   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 MAINWINDOW_H
#define MAINWINDOW_H


#include <QtGui/QMainWindow>


namespace Ui {
    class MainWindow;
}


namespace psimpl {

    class DPWorker;

    typedef enum ALGORITHM
    {
        NTH_POINT,
        RADIAL_DISTANCE,
        PERPENDICULAR_DISTANCE,
        REUMANN_WITKAM,
        OPHEIM,
        LANG,
        DOUGLAS_PEUCKER,
        DOUGLAS_PEUCKER_VARIANT,
        DOUGLAS_PEUCKER_REFERENCE,
    } Algorithm;

    /*!
        \brief Mainwindow where polylines can be generated and simplified.
        
        Multiple simplification algorithms, implementations and container types can be experimented
        with.
    */
    class MainWindow : public QMainWindow {
        Q_OBJECT

    public:
        MainWindow (QWidget *parent = 0);
        ~MainWindow ();

    protected:
        void changeEvent (QEvent *e);

    private:
        void EnableButtons ();
        void DisableButtons ();

    private:
        Ui::MainWindow *ui;
        DPWorker* mWorker;

private slots:
    void on_simplifiedPolylineCheckBox_toggled(bool checked);
    void on_generatedPolylineCheckBox_toggled(bool checked);
    void on_keepAspectRatioCheckBox_toggled(bool checked);
    void on_simplifyPushButton_clicked ();
    void on_algorithmComboBox_currentIndexChanged(int index);
    void on_generatePushButton_clicked ();
    void SlotGeneratingPolyline ();
    void SlotConvertingPolyline ();
    void SlotSimplifyingPolyline ();
    void SlotCleaningConvertedPolyline ();
    void SlotGeneratedPolyline (int duration, QVector <qreal>& polyline);
    void SlotSimplifiedPolyline (int duration, QVector <qreal>& polyline);
    void SlotSimplifiedPolyline (int duration, QVector <qreal>& polyline, double max, double sum, double mean, double std);
};

} // namespace psimpl


#endif // MAINWINDOW_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