Browse Source

Merge pull request #7747 from DonLakeFlyer/CorridorScanVisual

Corridor scan visuals
QGC4.4
Don Gagne 6 years ago committed by GitHub
parent
commit
754a3ebbc5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      qgroundcontrol.qrc
  2. 4
      src/MissionManager/QGCMapPolylineVisuals.qml
  3. 99
      src/PlanView/CorridorScanMapVisual.qml
  4. 137
      src/PlanView/SurveyMapVisual.qml
  5. 157
      src/PlanView/TransectStyleMapVisuals.qml
  6. 1
      src/QmlControls/QGroundControl/Controls/qmldir

1
qgroundcontrol.qrc

@ -147,6 +147,7 @@
<file alias="QGroundControl/Controls/SurveyMapVisual.qml">src/PlanView/SurveyMapVisual.qml</file> <file alias="QGroundControl/Controls/SurveyMapVisual.qml">src/PlanView/SurveyMapVisual.qml</file>
<file alias="QGroundControl/Controls/ToolStrip.qml">src/QmlControls/ToolStrip.qml</file> <file alias="QGroundControl/Controls/ToolStrip.qml">src/QmlControls/ToolStrip.qml</file>
<file alias="QGroundControl/Controls/TransectStyleComplexItemStats.qml">src/PlanView/TransectStyleComplexItemStats.qml</file> <file alias="QGroundControl/Controls/TransectStyleComplexItemStats.qml">src/PlanView/TransectStyleComplexItemStats.qml</file>
<file alias="QGroundControl/Controls/TransectStyleMapVisuals.qml">src/PlanView/TransectStyleMapVisuals.qml</file>
<file alias="QGroundControl/Controls/VehicleRotationCal.qml">src/QmlControls/VehicleRotationCal.qml</file> <file alias="QGroundControl/Controls/VehicleRotationCal.qml">src/QmlControls/VehicleRotationCal.qml</file>
<file alias="QGroundControl/Controls/VehicleSummaryRow.qml">src/QmlControls/VehicleSummaryRow.qml</file> <file alias="QGroundControl/Controls/VehicleSummaryRow.qml">src/QmlControls/VehicleSummaryRow.qml</file>
<file alias="QGroundControl/Controls/ViewWidget.qml">src/ViewWidgets/ViewWidget.qml</file> <file alias="QGroundControl/Controls/ViewWidget.qml">src/ViewWidgets/ViewWidget.qml</file>

4
src/MissionManager/QGCMapPolylineVisuals.qml

@ -20,7 +20,7 @@ import QGroundControl.Controls 1.0
import QGroundControl.FlightMap 1.0 import QGroundControl.FlightMap 1.0
import QGroundControl.ShapeFileHelper 1.0 import QGroundControl.ShapeFileHelper 1.0
/// QGCmapPolyline map visuals /// QGCMapPolyline map visuals
Item { Item {
id: _root id: _root
@ -98,6 +98,8 @@ Item {
} }
} }
onVisibleChanged: _polylineComponent.visible = visible
Component.onCompleted: { Component.onCompleted: {
addVisuals() addVisuals()
if (interactive) { if (interactive) {

99
src/PlanView/CorridorScanMapVisual.qml

@ -16,107 +16,18 @@ import QGroundControl 1.0
import QGroundControl.Controls 1.0 import QGroundControl.Controls 1.0
/// Corridor Scan Complex Mission Item visuals /// Corridor Scan Complex Mission Item visuals
Item { TransectStyleMapVisuals {
id: _root property bool _currentItem: object.isCurrentItem
property var map ///< Map control to place item in Component.onCompleted: mapPolylineVisuals.addInitialPolyline()
property var _missionItem: object
property var _entryCoordinate
property var _exitCoordinate
property var _transectLines
signal clicked(int sequenceNumber)
function _addVisualElements() {
_entryCoordinate = entryPointComponent.createObject(map)
_exitCoordinate = exitPointComponent.createObject(map)
_transectLines = transectsComponent.createObject(map)
map.addMapItem(_entryCoordinate)
map.addMapItem(_exitCoordinate)
map.addMapItem(_transectLines)
}
function _destroyVisualElements() {
_entryCoordinate.destroy()
_exitCoordinate.destroy()
_transectLines.destroy()
}
Component.onCompleted: {
mapPolylineVisuals.addInitialPolyline()
_addVisualElements()
}
Component.onDestruction: {
_destroyVisualElements()
}
QGCMapPolygonVisuals {
mapControl: map
mapPolygon: object.surveyAreaPolygon
interactive: false
interiorColor: "green"
interiorOpacity: 0.25
}
QGCMapPolylineVisuals { QGCMapPolylineVisuals {
id: mapPolylineVisuals id: mapPolylineVisuals
mapControl: map mapControl: map
mapPolyline: object.corridorPolyline mapPolyline: object.corridorPolyline
interactive: _missionItem.isCurrentItem interactive: _currentItem
lineWidth: 3 lineWidth: 3
lineColor: "#be781c" lineColor: "#be781c"
} visible: _currentItem
// Entry point
Component {
id: entryPointComponent
MapQuickItem {
anchorPoint.x: sourceItem.anchorPointX
anchorPoint.y: sourceItem.anchorPointY
z: QGroundControl.zOrderMapItems
coordinate: _missionItem.coordinate
visible: _missionItem.coordinate.isValid
sourceItem: MissionItemIndexLabel {
index: _missionItem.sequenceNumber
label: "Entry"
checked: _missionItem.isCurrentItem
onClicked: _root.clicked(_missionItem.sequenceNumber)
}
}
}
// Exit point
Component {
id: exitPointComponent
MapQuickItem {
anchorPoint.x: sourceItem.anchorPointX
anchorPoint.y: sourceItem.anchorPointY
z: QGroundControl.zOrderMapItems
coordinate: _missionItem.exitCoordinate
visible: _missionItem.exitCoordinate.isValid
sourceItem: MissionItemIndexLabel {
index: _missionItem.lastSequenceNumber
label: "Exit"
checked: _missionItem.isCurrentItem
onClicked: _root.clicked(_missionItem.sequenceNumber)
}
}
}
// Transect lines
Component {
id: transectsComponent
MapPolyline {
line.color: "white"
line.width: 2
path: _missionItem.visualTransectPoints
}
} }
} }

137
src/PlanView/SurveyMapVisual.qml

@ -19,45 +19,8 @@ import QGroundControl.Controls 1.0
import QGroundControl.FlightMap 1.0 import QGroundControl.FlightMap 1.0
/// Survey Complex Mission Item visuals /// Survey Complex Mission Item visuals
Item { TransectStyleMapVisuals {
id: _root property var _mapPolygon: object.surveyAreaPolygon
property var map ///< Map control to place item in
property var _missionItem: object
property var _mapPolygon: object.surveyAreaPolygon
property bool _currentItem: object.isCurrentItem
property var _transectPoints: _missionItem.visualTransectPoints
property bool _showPartialEntryExit: !_currentItem && _missionItem.turnAroundDistance.rawValue != 0 &&_transectPoints.length > 1
property var _fullTransectsComponent: null
property var _entryTransectsComponent: null
property var _exitTransectsComponent: null
property var _entryCoordinate
property var _exitCoordinate
signal clicked(int sequenceNumber)
function _addVisualElements() {
_fullTransectsComponent = fullTransectsComponent.createObject(map)
_entryTransectsComponent = entryTransectComponent.createObject(map)
_exitTransectsComponent = exitTransectComponent.createObject(map)
_entryCoordinate = entryPointComponent.createObject(map)
_exitCoordinate = exitPointComponent.createObject(map)
map.addMapItem(_fullTransectsComponent)
map.addMapItem(_entryTransectsComponent)
map.addMapItem(_exitTransectsComponent)
map.addMapItem(_entryCoordinate)
map.addMapItem(_exitCoordinate)
}
function _destroyVisualElements() {
_fullTransectsComponent.destroy()
_entryTransectsComponent.destroy()
_exitTransectsComponent.destroy()
_entryCoordinate.destroy()
_exitCoordinate.destroy()
}
/// Add an initial 4 sided polygon if there is none /// Add an initial 4 sided polygon if there is none
function _addInitialPolygon() { function _addInitialPolygon() {
@ -90,99 +53,5 @@ Item {
} }
} }
Component.onCompleted: { Component.onCompleted: _addInitialPolygon()
_addInitialPolygon()
_addVisualElements()
}
Component.onDestruction: {
_destroyVisualElements()
}
QGCMapPolygonVisuals {
id: mapPolygonVisuals
mapControl: map
mapPolygon: _mapPolygon
interactive: _missionItem.isCurrentItem
borderWidth: 1
borderColor: "black"
interiorColor: "green"
interiorOpacity: 0.5
}
// Full set of transects lines. Shown when item is selected.
Component {
id: fullTransectsComponent
MapPolyline {
line.color: "white"
line.width: 2
path: _transectPoints
visible: _currentItem
}
}
// Entry and exit transect lines only. Used when item is not selected.
Component {
id: entryTransectComponent
MapPolyline {
line.color: "white"
line.width: 2
path: _showPartialEntryExit ? [ _transectPoints[0], _transectPoints[1] ] : []
visible: _showPartialEntryExit
}
}
Component {
id: exitTransectComponent
MapPolyline {
line.color: "white"
line.width: 2
path: _showPartialEntryExit ? [ _transectPoints[lastPointIndex - 1], _transectPoints[lastPointIndex] ] : []
visible: _showPartialEntryExit
property int lastPointIndex: _transectPoints.length - 1
}
}
// Entry point
Component {
id: entryPointComponent
MapQuickItem {
anchorPoint.x: sourceItem.anchorPointX
anchorPoint.y: sourceItem.anchorPointY
z: QGroundControl.zOrderMapItems
coordinate: _missionItem.coordinate
visible: _missionItem.exitCoordinate.isValid
sourceItem: MissionItemIndexLabel {
index: _missionItem.sequenceNumber
label: "Entry"
checked: _missionItem.isCurrentItem
onClicked: _root.clicked(_missionItem.sequenceNumber)
}
}
}
// Exit point
Component {
id: exitPointComponent
MapQuickItem {
anchorPoint.x: sourceItem.anchorPointX
anchorPoint.y: sourceItem.anchorPointY
z: QGroundControl.zOrderMapItems
coordinate: _missionItem.exitCoordinate
visible: _missionItem.exitCoordinate.isValid
sourceItem: MissionItemIndexLabel {
index: _missionItem.lastSequenceNumber
label: "Exit"
checked: _missionItem.isCurrentItem
onClicked: _root.clicked(_missionItem.sequenceNumber)
}
}
}
} }

157
src/PlanView/TransectStyleMapVisuals.qml

@ -0,0 +1,157 @@
/****************************************************************************
*
* (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.
*
****************************************************************************/
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
/// Base control for both Survey and Corridor Scan map visuals
Item {
id: _root
property var map ///< Map control to place item in
property var _missionItem: object
property var _mapPolygon: object.surveyAreaPolygon
property bool _currentItem: object.isCurrentItem
property var _transectPoints: _missionItem.visualTransectPoints
property bool _showPartialEntryExit: !_currentItem && _missionItem.turnAroundDistance.rawValue !== 0 &&_transectPoints.length >= 2
property var _fullTransectsComponent: null
property var _entryTransectsComponent: null
property var _exitTransectsComponent: null
property var _entryCoordinate
property var _exitCoordinate
signal clicked(int sequenceNumber)
function _addVisualElements() {
_fullTransectsComponent = fullTransectsComponent.createObject(map)
_entryTransectsComponent = entryTransectComponent.createObject(map)
_exitTransectsComponent = exitTransectComponent.createObject(map)
_entryCoordinate = entryPointComponent.createObject(map)
_exitCoordinate = exitPointComponent.createObject(map)
map.addMapItem(_fullTransectsComponent)
map.addMapItem(_entryTransectsComponent)
map.addMapItem(_exitTransectsComponent)
map.addMapItem(_entryCoordinate)
map.addMapItem(_exitCoordinate)
}
function _destroyVisualElements() {
_fullTransectsComponent.destroy()
_entryTransectsComponent.destroy()
_exitTransectsComponent.destroy()
_entryCoordinate.destroy()
_exitCoordinate.destroy()
}
Component.onCompleted: {
_addVisualElements()
}
Component.onDestruction: {
_destroyVisualElements()
}
// Area polygon
QGCMapPolygonVisuals {
id: mapPolygonVisuals
mapControl: map
mapPolygon: _mapPolygon
interactive: _missionItem.isCurrentItem
borderWidth: 1
borderColor: "black"
interiorColor: "green"
interiorOpacity: 0.5
}
// Full set of transects lines. Shown when item is selected.
Component {
id: fullTransectsComponent
MapPolyline {
line.color: "white"
line.width: 2
path: _transectPoints
visible: _currentItem
}
}
// Entry and exit transect lines only. Used when item is not selected.
Component {
id: entryTransectComponent
MapPolyline {
line.color: "white"
line.width: 2
path: _showPartialEntryExit ? [ _transectPoints[0], _transectPoints[1] ] : []
visible: _showPartialEntryExit
}
}
Component {
id: exitTransectComponent
MapPolyline {
line.color: "white"
line.width: 2
path: _showPartialEntryExit ? [ _transectPoints[lastPointIndex - 1], _transectPoints[lastPointIndex] ] : []
visible: _showPartialEntryExit
property int lastPointIndex: _transectPoints.length - 1
}
}
// Entry point
Component {
id: entryPointComponent
MapQuickItem {
anchorPoint.x: sourceItem.anchorPointX
anchorPoint.y: sourceItem.anchorPointY
z: QGroundControl.zOrderMapItems
coordinate: _missionItem.coordinate
visible: _missionItem.exitCoordinate.isValid
sourceItem: MissionItemIndexLabel {
index: _missionItem.sequenceNumber
label: qsTr("Entry")
checked: _missionItem.isCurrentItem
onClicked: _root.clicked(_missionItem.sequenceNumber)
}
}
}
// Exit point
Component {
id: exitPointComponent
MapQuickItem {
anchorPoint.x: sourceItem.anchorPointX
anchorPoint.y: sourceItem.anchorPointY
z: QGroundControl.zOrderMapItems
coordinate: _missionItem.exitCoordinate
visible: _missionItem.exitCoordinate.isValid
sourceItem: MissionItemIndexLabel {
index: _missionItem.lastSequenceNumber
label: qsTr("Exit")
checked: _missionItem.isCurrentItem
onClicked: _root.clicked(_missionItem.sequenceNumber)
}
}
}
}

1
src/QmlControls/QGroundControl/Controls/qmldir

@ -80,6 +80,7 @@ SliderSwitch 1.0 SliderSwitch.qml
SubMenuButton 1.0 SubMenuButton.qml SubMenuButton 1.0 SubMenuButton.qml
SurveyMapVisuals 1.0 SurveyMapVisuals.qml SurveyMapVisuals 1.0 SurveyMapVisuals.qml
TransectStyleComplexItemStats 1.0 TransectStyleComplexItemStats.qml TransectStyleComplexItemStats 1.0 TransectStyleComplexItemStats.qml
TransectStyleMapVisuals 1.0 TransectStyleMapVisuals.qml
ToolStrip 1.0 ToolStrip.qml ToolStrip 1.0 ToolStrip.qml
VehicleRotationCal 1.0 VehicleRotationCal.qml VehicleRotationCal 1.0 VehicleRotationCal.qml
VehicleSummaryRow 1.0 VehicleSummaryRow.qml VehicleSummaryRow 1.0 VehicleSummaryRow.qml

Loading…
Cancel
Save