WimaArea.h 4.84 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 15
#include "GeoUtilities.h"
#include "PolygonCalculus.h"
16
#include "PlanimetryCalculus.h"
17

18
class WimaArea : public QGCMapPolygon //abstract base class for all WimaAreas
19
{
20
    Q_OBJECT
21
public:
22 23
    WimaArea(QObject* parent = nullptr);
    WimaArea(const WimaArea& other, QObject* parent = nullptr);
24
    WimaArea &operator=(const WimaArea &other);
25 26


27 28 29 30 31 32 33
    Q_PROPERTY(double           maxAltitude             READ maxAltitude                WRITE setMaxAltitude            NOTIFY maxAltitudeChanged)
    Q_PROPERTY(QString          mapVisualQML            READ mapVisualQML                                               CONSTANT)
    Q_PROPERTY(QString          editorQML               READ editorQML                                                  CONSTANT)
    Q_PROPERTY(Fact*            borderPolygonOffset     READ borderPolygonOffsetFact                                    CONSTANT)
    Q_PROPERTY(QGCMapPolygon*   borderPolygon           READ borderPolygon                                              NOTIFY borderPolygonChanged)
    Q_PROPERTY(Fact*            showBorderPolygon       READ showBorderPolygon                                          CONSTANT)
    Q_PROPERTY(bool             wimaAreaInteractive     READ wimaAreaInteractive        WRITE setWimaAreaInteractive    NOTIFY wimaAreaInteractiveChanged)
34

35 36

    //Property accessors
37 38 39 40 41
    double          maxAltitude             (void) const    { return _maxAltitude;}
    Fact*           borderPolygonOffsetFact (void)          { return &_borderPolygonOffset;}
    Fact*           showBorderPolygon       (void)          { return &_showBorderPolygon;}
    double          borderPolygonOffset     (void) const    { return _borderPolygonOffset.rawValue().toDouble();}
    QGCMapPolygon*  borderPolygon           (void)          { return &_borderPolygon;}
42 43 44
    bool            wimaAreaInteractive     (void) const    { return _wimaAreaInteractive;}

    void            setWimaAreaInteractive          (bool interactive);
45

46
    // overrides from WimaArea
47 48
    virtual QString                 mapVisualQML    (void) const { return ""; }
    virtual QString                 editorQML       (void) const { return ""; }
49 50

    // Member Methodes
51 52 53
    int             getClosestVertexIndex   (const QGeoCoordinate& coordinate) const;
    QGeoCoordinate  getClosestVertex        (const QGeoCoordinate& coordinate) const;
    QGCMapPolygon   toQGCPolygon            () const;
54
    bool            join                    (WimaArea &area);
55
    bool            join                    (WimaArea &area, QString &errorString);
56 57
    int             nextVertexIndex         (int index) const;
    int             previousVertexIndex     (int index) const;
58 59
    bool            isSimplePolygon         () const;
    bool            containsCoordinate      (const QGeoCoordinate &coordinate) const;
60 61 62 63 64 65


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

    // static Methodes
66
    static QGCMapPolygon    toQGCPolygon        (const WimaArea& area);
67
    static bool             join                (const WimaArea &area1, const WimaArea &area2, WimaArea& joinedArea, QString &errorString);
Valentin Platzgummer's avatar
Valentin Platzgummer committed
68
    static bool             join                (const WimaArea &area1, const WimaArea &area2, WimaArea& joinedArea);
69

70

71 72 73 74
    // Friends
    friend void print(const WimaArea& area, QString& outputString);
    friend void print(const WimaArea& area);

75
    // static Members
76
    // Accurracy used to compute isDisjunct
77
    static const double epsilonMeter;
78 79
    static const char*  maxAltitudeName;
    static const char*  wimaAreaName;
80 81
    static const char*  areaTypeName;    
    static const char*  borderPolygonOffsetName;
82
    static const char*  showBorderPolygonName;
83
    static const char*  settingsGroup;
84 85

signals:
86
    void    maxAltitudeChanged              (void);
87 88
    void    borderPolygonChanged           (void);
    void    borderPolygonOffsetChanged     (void);
89
    void    wimaAreaInteractiveChanged             (void);
90

91
public slots:
92 93 94
    void setMaxAltitude         (double altitude);
    void setShowBorderPolygon   (bool showBorderPolygon);
    void setBorderPolygonOffset (double offset);
95

96
private slots:
97 98 99
    void recalcPolygons             (void);
    void updatePolygonConnections   (QVariant value);
    void recalcInteractivity        (void);
100

101 102 103

private:
    void init();
104 105 106 107 108 109 110 111

    double                          _maxAltitude;

    QMap<QString, FactMetaData*>    _metaDataMap;
    SettingsFact                    _borderPolygonOffset;
    SettingsFact                    _showBorderPolygon;

    QGCMapPolygon                   _borderPolygon;
112 113

    bool                            _wimaAreaInteractive;
114 115
};

116

117 118 119