WimaArea.h 3.52 KB
Newer Older
1
#pragma once
2

3
#include "QGCMapPolygon.h"
4
#include "QGCMapPolyline.h"
5 6 7
#include "Vehicle.h"
#include "qobject.h"
#include "WimaVehicle.h"
8 9 10 11
#include "WimaArea.h"
#include <QLineF>
#include <QPointF>
#include "QGCGeo.h"
12
#include <QPair>
13

14
class WimaArea : public QGCMapPolygon //abstract base class for all WimaAreas
15
{
16
    Q_OBJECT
17
public:
18 19
    WimaArea(QObject* parent = nullptr);
    WimaArea(const WimaArea& other, QObject* parent = nullptr);
20
    WimaArea &operator=(const WimaArea &other);
21 22


23 24 25
    Q_PROPERTY(double   maxAltitude     READ maxAltitude    WRITE setMaxAltitude    NOTIFY maxAltitudeChanged)
    Q_PROPERTY(QString  mapVisualQML    READ mapVisualQML                           CONSTANT)
    Q_PROPERTY(QString  editorQML       READ editorQML                              CONSTANT)
26 27

    //Property accessors
28
    double      maxAltitude         (void) const    { return _maxAltitude;}
29

30
    // overrides from WimaArea
Valentin Platzgummer's avatar
Valentin Platzgummer committed
31 32
    virtual QString                 mapVisualQML    (void) const { return "WimaAreaMapVisual.qml";}
    virtual QString                 editorQML       (void) const { return "WimaAreaEditor.qml";}
33 34

    // Member Methodes
35 36 37
    int             getClosestVertexIndex   (const QGeoCoordinate& coordinate) const;
    QGeoCoordinate  getClosestVertex        (const QGeoCoordinate& coordinate) const;
    QGCMapPolygon   toQGCPolygon            () const;
38
    bool            join                    (WimaArea &area);
39
    bool            join                    (WimaArea &area, QString &errorString);
40 41 42 43 44 45 46 47
    int             nextVertexIndex         (int index) const;
    int             previousVertexIndex     (int index) const;


    void saveToJson     (QJsonObject& jsonObject);
    bool loadFromJson   (const QJsonObject &jsonObject, QString& errorString);

    // static Methodes
48
    static QGCMapPolygon    toQGCPolygon        (const WimaArea& area);
49
    static bool             join                (WimaArea &area1, WimaArea &area2, WimaArea& joinedArea, QString &errorString);
50
    static bool             join                (WimaArea &area1, WimaArea &area2, WimaArea& joinedArea);
51 52
    static bool            intersects           (const QGCMapPolyline& line1, const QGCMapPolyline& line2,
                                                 QGeoCoordinate& intersectionPt);
53
    static bool            intersects           (const QGCMapPolyline& line, const WimaArea& area,
54 55
                                                 QList<QGeoCoordinate>& intersectionList,
                                                 QList<QPair<int, int>>& neighbourList);
56
    static double          distInsidePoly       (const QGeoCoordinate& c1, const QGeoCoordinate& c2, WimaArea area);
57
    static bool            dijkstraPath         (const QGeoCoordinate& c1, const QGeoCoordinate& c2,
58 59
                                                 const WimaArea& area, QList<QGeoCoordinate>& dijkstraPath, QString &errorstring);
    static bool            isSelfIntersecting   (const WimaArea& area);
60
           bool            isSelfIntersecting   ();
61

62 63 64 65
    // Friends
    friend void print(const WimaArea& area, QString& outputString);
    friend void print(const WimaArea& area);

66
    // static Members
67
    // Accurracy used to compute isDisjunct
68
    static const double epsilonMeter;
69 70 71
    static const char*  maxAltitudeName;
    static const char*  wimaAreaName;
    static const char*  areaTypeName;
72 73 74 75

signals:
    void    maxAltitudeChanged      (void);

76
public slots:
77
    void        setMaxAltitude     (double altitude);
78

79
private:
80
    double                  _maxAltitude;
81 82 83

private:
    void init();
84 85
};

86

87 88 89