WimaMeasurementAreaMapVisual.qml 5.22 KB
Newer Older
1 2 3 4 5 6 7 8
/****************************************************************************
 *
 *   (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/
9

10 11 12 13 14 15 16 17 18 19 20 21
import QtQuick          2.3
import QtQuick.Controls 1.2
import QtLocation       5.3
import QtPositioning    5.3

import QGroundControl               1.0
import QGroundControl.ScreenTools   1.0
import QGroundControl.Palette       1.0
import QGroundControl.Controls      1.0
import QGroundControl.FlightMap     1.0

/// Wima Global Measurement Area visuals
22
Item {
23 24 25 26 27 28 29 30 31 32 33 34 35
    id: _root

    property var map        ///< Map control to place item in
    property var qgcView    ///< QGCView to use for popping dialogs

    property var areaItem:          object
    property var _polygon:          areaItem

    signal clicked(int sequenceNumber)

    /// Add an initial 4 sided polygon if there is none
    function _addInitialPolygon() {

36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
        // Initial polygon is inset to take 2/3rds space
        var rect = Qt.rect(map.centerViewport.x, map.centerViewport.y, map.centerViewport.width, map.centerViewport.height)
        rect.x += (rect.width * 0.25) / 2
        rect.y += (rect.height * 0.25) / 2
        rect.width *= 0.75
        rect.height *= 0.75

        var centerCoord =       map.toCoordinate(Qt.point(rect.x + (rect.width / 2), rect.y + (rect.height / 2)),   false /* clipToViewPort */)
        var topLeftCoord =      map.toCoordinate(Qt.point(rect.x, rect.y),                                          false /* clipToViewPort */)
        var topRightCoord =     map.toCoordinate(Qt.point(rect.x + rect.width, rect.y),                             false /* clipToViewPort */)
        var bottomLeftCoord =   map.toCoordinate(Qt.point(rect.x, rect.y + rect.height),                            false /* clipToViewPort */)
        var bottomRightCoord =  map.toCoordinate(Qt.point(rect.x + rect.width, rect.y + rect.height),               false /* clipToViewPort */)

        // Adjust polygon to max size
        var maxSize = 100
        var halfWidthMeters =   Math.min(topLeftCoord.distanceTo(topRightCoord), maxSize) / 2
        var halfHeightMeters =  Math.min(topLeftCoord.distanceTo(bottomLeftCoord), maxSize) / 2
        topLeftCoord =      centerCoord.atDistanceAndAzimuth(halfWidthMeters, -90).atDistanceAndAzimuth(halfHeightMeters, 0)
        topRightCoord =     centerCoord.atDistanceAndAzimuth(halfWidthMeters, 90).atDistanceAndAzimuth(halfHeightMeters, 0)
        bottomLeftCoord =   centerCoord.atDistanceAndAzimuth(halfWidthMeters, -90).atDistanceAndAzimuth(halfHeightMeters, 180)
        bottomRightCoord =  centerCoord.atDistanceAndAzimuth(halfWidthMeters, 90).atDistanceAndAzimuth(halfHeightMeters, 180)

        if (areaItem.showBorderPolygon.rawValue === true) {

            if (areaItem.borderPolygon.count < 3) {

                areaItem.borderPolygon.appendVertex(topLeftCoord)
                areaItem.borderPolygon.appendVertex(topRightCoord)
                areaItem.borderPolygon.appendVertex(bottomRightCoord)
                areaItem.borderPolygon.appendVertex(bottomLeftCoord)
            }
        } else {
            if (_polygon.count < 3) {

                _polygon.appendVertex(topLeftCoord)
                _polygon.appendVertex(topRightCoord)
                _polygon.appendVertex(bottomRightCoord)
                _polygon.appendVertex(bottomLeftCoord)
            }
        }
76 77


78
    }
79 80 81

    Component.onCompleted: {
        _addInitialPolygon()
Valentin Platzgummer's avatar
Valentin Platzgummer committed
82
        //_addInitialPolyline()
83 84 85 86 87
    }

    Component.onDestruction: {
    }

88
    // Polygon
89 90 91 92 93 94 95 96 97 98
    WimaMapPolygonVisuals {
        qgcView:            _root.qgcView
        mapControl:         map
        mapPolygon:         _polygon
        borderWidth:        1
        borderColor:        "black"
        interiorColor:      "green"
        interiorOpacity:    0.25
    }

99
    // Border Polygon
100 101 102
    WimaMapPolygonVisuals {
        qgcView:            _root.qgcView
        mapControl:         map
103
        mapPolygon:         areaItem.borderPolygon
104
        borderWidth:        1
105
        borderColor:        areaItem.borderPolygon.interactive ? "white" : "transparent"
106 107 108 109
        interiorColor:      "transparent"
        interiorOpacity:    1
    }

110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
    // Add Snake tiles to the map
    Component {
        id: tileComponent
        MapPolygon {
            color:          "transparent"
            opacity:        1
            border.color:   "black"
            border.width:   1
            path:           []
        }
    }

    Repeater {
        property bool enable: areaItem.showTiles.value
        model: enable ? areaItem.tiles : 0

        Item{
            property var _tileComponent
            function addVisuals() {
                _tileComponent = tileComponent.createObject(map)
                map.addMapItem(_tileComponent)
                _tileComponent.path = object.path
            }

            function removeVisuals() {
                _tileComponent.destroy()
            }

            Component.onCompleted: {
                addVisuals()
            }
            Component.onDestruction: {
                removeVisuals()
            }
        }
    }
146
}