Browse Source

Merge pull request #7764 from DonLakeFlyer/ObjectManager

New QGCDynamicObjectManager support
QGC4.4
Don Gagne 6 years ago committed by GitHub
parent
commit
980d4aa484
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      qgroundcontrol.qrc
  2. 29
      src/PlanView/FWLandingPatternMapVisual.qml
  3. 14
      src/PlanView/StructureScanMapVisual.qml
  4. 15
      src/PlanView/TransectStyleMapVisuals.qml
  5. 41
      src/QmlControls/QGCDynamicObjectManager.qml
  6. 1
      src/QmlControls/QGroundControl/Controls/qmldir

1
qgroundcontrol.qrc

@ -104,6 +104,7 @@ @@ -104,6 +104,7 @@
<file alias="QGroundControl/Controls/QGCCheckBox.qml">src/QmlControls/QGCCheckBox.qml</file>
<file alias="QGroundControl/Controls/QGCColoredImage.qml">src/QmlControls/QGCColoredImage.qml</file>
<file alias="QGroundControl/Controls/QGCComboBox.qml">src/QmlControls/QGCComboBox.qml</file>
<file alias="QGroundControl/Controls/QGCDynamicObjectManager.qml">src/QmlControls/QGCDynamicObjectManager.qml</file>
<file alias="QGroundControl/Controls/QGCFileDialog.qml">src/QmlControls/QGCFileDialog.qml</file>
<file alias="QGroundControl/Controls/QGCFlickable.qml">src/QmlControls/QGCFlickable.qml</file>
<file alias="QGroundControl/Controls/QGCFlickableHorizontalIndicator.qml">src/QmlControls/QGCFlickableHorizontalIndicator.qml</file>

29
src/PlanView/FWLandingPatternMapVisual.qml

@ -30,7 +30,6 @@ Item { @@ -30,7 +30,6 @@ Item {
readonly property real _landingLengthMeters: 100
property var _missionItem: object
property var _itemVisuals: [ ]
property var _mouseArea
property var _dragAreas: [ ]
property var _flightPath
@ -39,30 +38,16 @@ Item { @@ -39,30 +38,16 @@ Item {
property var _landingPointObject
function hideItemVisuals() {
for (var i=0; i<_itemVisuals.length; i++) {
_itemVisuals[i].destroy()
}
_itemVisuals = [ ]
objMgr.destroyObjects()
}
function showItemVisuals() {
if (_itemVisuals.length === 0) {
var itemVisual = loiterPointComponent.createObject(map)
map.addMapItem(itemVisual)
_itemVisuals.push(itemVisual)
_loiterPointObject = itemVisual
itemVisual = landingPointComponent.createObject(map)
map.addMapItem(itemVisual)
_itemVisuals.push(itemVisual)
_landingPointObject = itemVisual
if (objMgr.rgDynamicObjects.length === 0) {
_loiterPointObject = objMgr.createObject(loiterPointComponent, map, true /* parentObjectIsMap */)
_landingPointObject = objMgr.createObject(landingPointComponent, map, true /* parentObjectIsMap */)
var rgComponents = [ flightPathComponent, loiterRadiusComponent, landingAreaComponent, landingAreaLabelComponent, glideSlopeComponent, glideSlopeLabelComponent ]
for (var i=0; i<rgComponents.length; i++) {
var obj = rgComponents[i].createObject(map)
_itemVisuals.push(obj)
map.addMapItem(obj)
}
objMgr.createObjects(rgComponents, map, true /* parentObjectIsMap */)
}
}
@ -98,6 +83,10 @@ Item { @@ -98,6 +83,10 @@ Item {
_flightPath = [ _missionItem.loiterTangentCoordinate, _missionItem.landingCoordinate ]
}
QGCDynamicObjectManager {
id: objMgr
}
Component.onCompleted: {
if (_missionItem.landingCoordSet) {
showItemVisuals()

14
src/PlanView/StructureScanMapVisual.qml

@ -27,21 +27,15 @@ Item { @@ -27,21 +27,15 @@ Item {
property var _missionItem: object
property var _structurePolygon: object.structurePolygon
property var _flightPolygon: object.flightPolygon
property var _entryCoordinate
property var _exitCoordinate
signal clicked(int sequenceNumber)
function _addVisualElements() {
_entryCoordinate = entryPointComponent.createObject(map)
_exitCoordinate = exitPointComponent.createObject(map)
map.addMapItem(_entryCoordinate)
map.addMapItem(_exitCoordinate)
objMgr.createObjects([entryPointComponent, exitPointComponent], map, true /* parentObjectIsMap */)
}
function _destroyVisualElements() {
_entryCoordinate.destroy()
_exitCoordinate.destroy()
objMgr.destroyObjects()
}
/// Add an initial 4 sided polygon if there is none
@ -85,6 +79,10 @@ Item { @@ -85,6 +79,10 @@ Item {
_destroyVisualElements()
}
QGCDynamicObjectManager {
id: objMgr
}
QGCMapPolygonVisuals {
mapControl: map
mapPolygon: _structurePolygon

15
src/PlanView/TransectStyleMapVisuals.qml

@ -39,24 +39,17 @@ Item { @@ -39,24 +39,17 @@ Item {
property var _exitTransectsComponent: null
property var _entryCoordinate
property var _exitCoordinate
property var _dynamicComponents: [ ]
signal clicked(int sequenceNumber)
function _addVisualElements() {
var toAdd = [ fullTransectsComponent, entryTransectComponent, exitTransectComponent, entryPointComponent, exitPointComponent,
entryArrow1Component, entryArrow2Component, exitArrow1Component, exitArrow2Component ]
for (var i=0; i<toAdd.length; i++) {
_dynamicComponents.push(toAdd[i].createObject(map))
map.addMapItem(_dynamicComponents[_dynamicComponents.length -1])
}
objMgr.createObjects(toAdd, map, true /* parentObjectIsMap */)
}
function _destroyVisualElements() {
for (var i=0; i<_dynamicComponents.length; i++) {
_dynamicComponents[i].destroy()
}
_dynamicComponents = [ ]
objMgr.destroyObjects()
}
Component.onCompleted: {
@ -67,6 +60,10 @@ Item { @@ -67,6 +60,10 @@ Item {
_destroyVisualElements()
}
QGCDynamicObjectManager {
id: objMgr
}
// Area polygon
QGCMapPolygonVisuals {
id: mapPolygonVisuals

41
src/QmlControls/QGCDynamicObjectManager.qml

@ -0,0 +1,41 @@ @@ -0,0 +1,41 @@
import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.4
import QGroundControl.Palette 1.0
import QGroundControl.ScreenTools 1.0
/// Provides a standard set of tools for dynamically create/adding/removing Qml objects
Item {
visible: false
property var rgDynamicObjects: [ ]
function createObject(sourceComponent, parentObject, parentObjectIsMap) {
var obj = sourceComponent.createObject(parentObject)
rgDynamicObjects.push(obj)
if (arguments.length < 3) {
parentObjectIsMap = false
}
if (parentObjectIsMap) {
map.addMapItem(obj)
}
return obj
}
function createObjects(rgSourceComponents, parentObject, parentObjectIsMap) {
if (arguments.length < 3) {
parentObjectIsMap = false
}
for (var i=0; i<rgSourceComponents.length; i++) {
createObject(rgSourceComponents[i], parentObject, parentObjectIsMap)
}
}
function destroyObjects() {
for (var i=0; i<rgDynamicObjects.length; i++) {
rgDynamicObjects[i].destroy()
}
rgDynamicObjects = [ ]
}
}

1
src/QmlControls/QGroundControl/Controls/qmldir

@ -42,6 +42,7 @@ QGCButton 1.0 QGCButton.qml @@ -42,6 +42,7 @@ QGCButton 1.0 QGCButton.qml
QGCCheckBox 1.0 QGCCheckBox.qml
QGCColoredImage 1.0 QGCColoredImage.qml
QGCComboBox 1.0 QGCComboBox.qml
QGCDynamicObjectManager 1.0 QGCDynamicObjectManager.qml
QGCFileDialog 1.0 QGCFileDialog.qml
QGCFlickable 1.0 QGCFlickable.qml
QGCGroupBox 1.0 QGCGroupBox.qml

Loading…
Cancel
Save