Browse Source

Allow split of current segment

QGC4.4
Don Gagne 6 years ago
parent
commit
2916ae4c83
  1. 1
      qgroundcontrol.qrc
  2. 50
      src/FlightMap/MapItems/SplitIndicator.qml
  3. 16
      src/MissionManager/MissionController.cc
  4. 3
      src/MissionManager/MissionController.h
  5. 41
      src/PlanView/PlanView.qml
  6. 1
      src/QmlControls/QGroundControl/FlightMap/qmldir

1
qgroundcontrol.qrc

@ -202,6 +202,7 @@ @@ -202,6 +202,7 @@
<file alias="QGroundControl/FlightMap/QGCPitchIndicator.qml">src/FlightMap/Widgets/QGCPitchIndicator.qml</file>
<file alias="QGroundControl/FlightMap/QGCVideoBackground.qml">src/FlightMap/QGCVideoBackground.qml</file>
<file alias="QGroundControl/FlightMap/qmldir">src/QmlControls/QGroundControl/FlightMap/qmldir</file>
<file alias="QGroundControl/FlightMap/SplitIndicator.qml">src/FlightMap/MapItems/SplitIndicator.qml</file>
<file alias="QGroundControl/FlightMap/VehicleMapItem.qml">src/FlightMap/MapItems/VehicleMapItem.qml</file>
<file alias="QGroundControl/ScreenTools/qmldir">src/QmlControls/QGroundControl/ScreenTools/qmldir</file>
<file alias="QGroundControl/ScreenTools/ScreenTools.qml">src/QmlControls/ScreenTools.qml</file>

50
src/FlightMap/MapItems/SplitIndicator.qml

@ -0,0 +1,50 @@ @@ -0,0 +1,50 @@
/****************************************************************************
*
* (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.11
import QtQuick.Controls 2.4
import QGroundControl.ScreenTools 1.0
import QGroundControl.Controls 1.0
Rectangle {
id: _root
width: ScreenTools.defaultFontPixelHeight * 1.5
height: width
radius: width / 2
border.color: indicatorColor
color: "transparent"
property color indicatorColor: "white"
signal clicked
Rectangle {
anchors.margins: _root.height / 6
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
width: 1
color: indicatorColor
}
Rectangle {
anchors.margins: _root.height / 6
anchors.left: parent.left
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
height: 1
color: indicatorColor
}
QGCMouseArea {
fillItem: parent
onClicked: _root.clicked()
}
}

16
src/MissionManager/MissionController.cc

@ -69,6 +69,7 @@ MissionController::MissionController(PlanMasterController* masterController, QOb @@ -69,6 +69,7 @@ MissionController::MissionController(PlanMasterController* masterController, QOb
, _progressPct (0)
, _currentPlanViewIndex (-1)
, _currentPlanViewItem (nullptr)
, _splitSegment (nullptr)
{
_resetMissionFlightStatus();
managerVehicleChanged(_managerVehicle);
@ -2106,6 +2107,7 @@ VisualMissionItem* MissionController::currentPlanViewItem(void) const @@ -2106,6 +2107,7 @@ VisualMissionItem* MissionController::currentPlanViewItem(void) const
void MissionController::setCurrentPlanViewIndex(int sequenceNumber, bool force)
{
if(_visualItems && (force || sequenceNumber != _currentPlanViewIndex)) {
_splitSegment = nullptr;
_currentPlanViewItem = nullptr;
_currentPlanViewIndex = -1;
for (int i = 0; i < _visualItems->count(); i++) {
@ -2114,12 +2116,26 @@ void MissionController::setCurrentPlanViewIndex(int sequenceNumber, bool force) @@ -2114,12 +2116,26 @@ void MissionController::setCurrentPlanViewIndex(int sequenceNumber, bool force)
pVI->setIsCurrentItem(true);
_currentPlanViewItem = pVI;
_currentPlanViewIndex = sequenceNumber;
if (pVI->specifiesCoordinate() && !pVI->isStandaloneCoordinate()) {
// Determine split segment used to display line split editing ui.
for (int j=i-1; j>0; j--) {
VisualMissionItem* pPrev = qobject_cast<VisualMissionItem*>(_visualItems->get(j));
if (pPrev->specifiesCoordinate() && !pPrev->isStandaloneCoordinate()) {
VisualItemPair splitPair(pPrev, pVI);
if (_linesTable.contains(splitPair)) {
_splitSegment = _linesTable[splitPair];
}
}
}
}
} else {
pVI->setIsCurrentItem(false);
}
}
emit currentPlanViewIndexChanged();
emit currentPlanViewItemChanged();
emit splitSegmentChanged();
}
}

3
src/MissionManager/MissionController.h

@ -73,6 +73,7 @@ public: @@ -73,6 +73,7 @@ public:
Q_PROPERTY(QmlObjectListModel* directionArrows READ directionArrows CONSTANT)
Q_PROPERTY(QStringList complexMissionItemNames READ complexMissionItemNames NOTIFY complexMissionItemNamesChanged)
Q_PROPERTY(QGeoCoordinate plannedHomePosition READ plannedHomePosition NOTIFY plannedHomePositionChanged)
Q_PROPERTY(CoordinateVector* splitSegment MEMBER _splitSegment NOTIFY splitSegmentChanged) ///< Segment which show show + split ui element
Q_PROPERTY(double progressPct READ progressPct NOTIFY progressPctChanged)
@ -207,6 +208,7 @@ public: @@ -207,6 +208,7 @@ public:
signals:
void visualItemsChanged (void);
void waypointPathChanged (void);
void splitSegmentChanged (void);
void newItemsFromVehicle (void);
void missionDistanceChanged (double missionDistance);
void missionTimeChanged (void);
@ -302,6 +304,7 @@ private: @@ -302,6 +304,7 @@ private:
QTimer _updateTimer;
QGCGeoBoundingCube _travelBoundingCube;
QGeoCoordinate _takeoffCoordinate;
CoordinateVector* _splitSegment;
static const char* _settingsGroup;

41
src/PlanView/PlanView.qml

@ -7,7 +7,6 @@ @@ -7,7 +7,6 @@
*
****************************************************************************/
import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Dialogs 1.2
@ -28,8 +27,6 @@ import QGroundControl.ShapeFileHelper 1.0 @@ -28,8 +27,6 @@ import QGroundControl.ShapeFileHelper 1.0
import QGroundControl.Airspace 1.0
import QGroundControl.Airmap 1.0
/// Mission Editor
Item {
property bool planControlColapsed: false
@ -258,6 +255,7 @@ Item { @@ -258,6 +255,7 @@ Item {
Connections {
target: _missionController
onNewItemsFromVehicle: {
if (_visualItems && _visualItems.count !== 1) {
mapFitFunctions.fitMapViewportToMissionItems()
@ -478,8 +476,41 @@ Item { @@ -478,8 +476,41 @@ Item {
delegate: MapLineArrow {
fromCoord: object ? object.coordinate1 : undefined
toCoord: object ? object.coordinate2 : undefined
arrowPosition: 2
z: QGroundControl.zOrderWaypointLines
arrowPosition: 3
z: QGroundControl.zOrderWaypointLines + 1
}
}
// UI for splitting the current segment
MapQuickItem {
id: splitSegmentItem
anchorPoint.x: sourceItem.width / 2
anchorPoint.y: sourceItem.height / 2
z: QGroundControl.zOrderWaypointLines + 1
sourceItem: SplitIndicator {
onClicked: insertSimpleMissionItem(splitSegmentItem.coordinate, _missionController.currentPlanViewIndex)
}
function _updateSplitCoord() {
if (_missionController.splitSegment) {
var distance = _missionController.splitSegment.coordinate1.distanceTo(_missionController.splitSegment.coordinate2)
var azimuth = _missionController.splitSegment.coordinate1.azimuthTo(_missionController.splitSegment.coordinate2)
splitSegmentItem.coordinate = _missionController.splitSegment.coordinate1.atDistanceAndAzimuth(distance / 2, azimuth)
} else {
coordinate = QtPositioning.coordinate()
}
}
Connections {
target: _missionController
onSplitSegmentChanged: splitSegmentItem._updateSplitCoord()
}
Connections {
target: _missionController.splitSegment
onCoordinate1Changed: splitSegmentItem._updateSplitCoord()
onCoordinate2Changed: splitSegmentItem._updateSplitCoord()
}
}

1
src/QmlControls/QGroundControl/FlightMap/qmldir

@ -27,4 +27,5 @@ MissionItemView 1.0 MissionItemView.qml @@ -27,4 +27,5 @@ MissionItemView 1.0 MissionItemView.qml
MissionLineView 1.0 MissionLineView.qml
PlanMapItems 1.0 PlanMapItems.qml
PolygonEditor 1.0 PolygonEditor.qml
SplitIndicator 1.0 SplitIndicator.qml
VehicleMapItem 1.0 VehicleMapItem.qml

Loading…
Cancel
Save