StructureScanEditor.qml 8.84 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
import QtQuick          2.3
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.4
import QtQuick.Dialogs  1.2
import QtQuick.Extras   1.4
import QtQuick.Layouts  1.2

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

// Editor for Survery mission items
Rectangle {
    id:         _root
    height:     visible ? (editorColumn.height + (_margin * 2)) : 0
    width:      availableWidth
    color:      qgcPal.windowShadeDark
    radius:     _radius

    // The following properties must be available up the hierarchy chain
    //property real   availableWidth    ///< Width for control
    //property var    missionItem       ///< Mission Item for editor

28 29 30 31
    property real   _margin:                    ScreenTools.defaultFontPixelWidth / 2
    property real   _fieldWidth:                ScreenTools.defaultFontPixelWidth * 10.5
    property var    _vehicle:                   QGroundControl.multiVehicleManager.activeVehicle ? QGroundControl.multiVehicleManager.activeVehicle : QGroundControl.multiVehicleManager.offlineEditingVehicle
    property real   _cameraMinTriggerInterval:  missionItem.cameraCalc.minTriggerInterval.rawValue
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59

    function polygonCaptureStarted() {
        missionItem.clearPolygon()
    }

    function polygonCaptureFinished(coordinates) {
        for (var i=0; i<coordinates.length; i++) {
            missionItem.addPolygonCoordinate(coordinates[i])
        }
    }

    function polygonAdjustVertex(vertexIndex, vertexCoordinate) {
        missionItem.adjustPolygonCoordinate(vertexIndex, vertexCoordinate)
    }

    function polygonAdjustStarted() { }
    function polygonAdjustFinished() { }

    QGCPalette { id: qgcPal; colorGroupEnabled: true }

    Column {
        id:                 editorColumn
        anchors.margins:    _margin
        anchors.top:        parent.top
        anchors.left:       parent.left
        anchors.right:      parent.right
        spacing:            _margin

60 61
        QGCTabBar {
            id:             tabBar
62 63
            anchors.left:   parent.left
            anchors.right:  parent.right
64

65
            Component.onCompleted: currentIndex = 0
66

67 68
            QGCTabButton { text: qsTr("Grid") }
            QGCTabButton { text: qsTr("Camera") }
69
        }
70

71
        Column {
72 73 74 75
            anchors.left:       parent.left
            anchors.right:      parent.right
            spacing:            _margin
            visible:            tabBar.currentIndex == 0
76

77
            QGCLabel {
78 79
                anchors.left:   parent.left
                anchors.right:  parent.right
80 81 82 83
                text:           qsTr("Note: Polygon respresents structure surface not vehicle flight path.")
                wrapMode:       Text.WordWrap
                font.pointSize: ScreenTools.smallFontPointSize
            }
84

85 86 87 88 89 90 91 92
            QGCLabel {
                anchors.left:   parent.left
                anchors.right:  parent.right
                text:           qsTr("WARNING: Photo interval is below minimum interval (%1 secs) supported by camera.").arg(_cameraMinTriggerInterval.toFixed(1))
                wrapMode:       Text.WordWrap
                color:          qgcPal.warningText
                visible:        missionItem.cameraShots > 0 && _cameraMinTriggerInterval !== 0 && _cameraMinTriggerInterval > missionItem.timeBetweenShots
            }
93

94 95 96 97 98 99 100 101
            CameraCalcGrid {
                cameraCalc:                     missionItem.cameraCalc
                vehicleFlightIsFrontal:         false
                distanceToSurfaceLabel:         qsTr("Scan Distance")
                distanceToSurfaceAltitudeMode:  QGroundControl.AltitudeModeNone
                frontalDistanceLabel:           qsTr("Layer Height")
                sideDistanceLabel:              qsTr("Trigger Distance")
            }
DonLakeFlyer's avatar
DonLakeFlyer committed
102

103 104 105 106
            SectionHeader {
                id:         scanHeader
                text:       qsTr("Scan")
            }
107

108 109 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 146 147 148 149 150 151 152 153 154 155 156 157 158 159
            Column {
                anchors.left:   parent.left
                anchors.right:  parent.right
                spacing:        _margin
                visible:        scanHeader.checked

                GridLayout {
                    anchors.left:   parent.left
                    anchors.right:  parent.right
                    columnSpacing:  _margin
                    rowSpacing:     _margin
                    columns:        2

                    FactComboBox {
                        fact:               missionItem.startFromTop
                        indexModel:         true
                        model:              [ qsTr("Start Scan From Bottom"), qsTr("Start Scan From Top") ]
                        Layout.columnSpan:  2
                        Layout.fillWidth:   true
                    }

                    QGCLabel {
                        text:       qsTr("Structure Height")
                    }
                    FactTextField {
                        fact:               missionItem.structureHeight
                        Layout.fillWidth:   true
                    }

                    QGCLabel { text: qsTr("Scan Bottom Alt") }
                    AltitudeFactTextField {
                        fact:               missionItem.scanBottomAlt
                        altitudeMode:       QGroundControl.AltitudeModeRelative
                        Layout.fillWidth:   true
                    }

                    QGCLabel { text: qsTr("Entrance/Exit Alt") }
                    AltitudeFactTextField {
                        fact:               missionItem.entranceAlt
                        altitudeMode:       QGroundControl.AltitudeModeRelative
                        Layout.fillWidth:   true
                    }

                    QGCLabel {
                        text:       qsTr("Gimbal Pitch")
                        visible:    missionItem.cameraCalc.isManualCamera
                    }
                    FactTextField {
                        fact:               missionItem.gimbalPitch
                        Layout.fillWidth:   true
                        visible:            missionItem.cameraCalc.isManualCamera
                    }
160 161
                }

162 163 164
                Item {
                    height: ScreenTools.defaultFontPixelHeight / 2
                    width:  1
165
                }
166

167 168 169 170 171
                QGCButton {
                    text:       qsTr("Rotate entry point")
                    onClicked:  missionItem.rotateEntryPoint()
                }
            } // Column - Scan
172

173 174 175
            SectionHeader {
                id:     statsHeader
                text:   qsTr("Statistics")
176 177
            }

178 179 180 181
            Grid {
                columns:        2
                columnSpacing:  ScreenTools.defaultFontPixelWidth
                visible:        statsHeader.checked
182

183 184
                QGCLabel { text: qsTr("Layers") }
                QGCLabel { text: missionItem.layers.valueString }
185

186 187
                QGCLabel { text: qsTr("Layer Height") }
                QGCLabel { text: missionItem.cameraCalc.adjustedFootprintFrontal.valueString + " " + QGroundControl.appSettingsDistanceUnitsString }
188

189 190
                QGCLabel { text: qsTr("Top Layer Alt") }
                QGCLabel { text: QGroundControl.metersToAppSettingsDistanceUnits(missionItem.topFlightAlt).toFixed(1) + " " + QGroundControl.appSettingsDistanceUnitsString }
191

192 193
                QGCLabel { text: qsTr("Bottom Layer Alt") }
                QGCLabel { text: QGroundControl.metersToAppSettingsDistanceUnits(missionItem.bottomFlightAlt).toFixed(1) + " " + QGroundControl.appSettingsDistanceUnitsString }
194

195 196
                QGCLabel { text: qsTr("Photo Count") }
                QGCLabel { text: missionItem.cameraShots }
197

198 199
                QGCLabel { text: qsTr("Photo Interval") }
                QGCLabel { text: missionItem.timeBetweenShots.toFixed(1) + " " + qsTr("secs") }
200

201 202 203 204
                QGCLabel { text: qsTr("Trigger Distance") }
                QGCLabel { text: missionItem.cameraCalc.adjustedFootprintSide.valueString + " " + QGroundControl.appSettingsDistanceUnitsString }
            }
        } // Grid Column
205

206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221
        Column {
            anchors.left:       parent.left
            anchors.right:      parent.right
            spacing:            _margin
            visible:            tabBar.currentIndex == 1

            CameraCalcCamera {
                cameraCalc:                     missionItem.cameraCalc
                vehicleFlightIsFrontal:         false
                distanceToSurfaceLabel:         qsTr("Scan Distance")
                distanceToSurfaceAltitudeMode:  QGroundControl.AltitudeModeNone
                frontalDistanceLabel:           qsTr("Layer Height")
                sideDistanceLabel:              qsTr("Trigger Distance")
            }
        } // Camera Column
    }
222
} // Rectangle