Commit 36de7a37 authored by DonLakeFlyer's avatar DonLakeFlyer

parent f9fed02a
...@@ -17,11 +17,11 @@ import QGroundControl.Palette 1.0 ...@@ -17,11 +17,11 @@ import QGroundControl.Palette 1.0
/// The MissionLineView control is used to add lines between mission items /// The MissionLineView control is used to add lines between mission items
MapItemView { MapItemView {
property bool showSpecialVisual: false
delegate: MapPolyline { delegate: MapPolyline {
line.width: 3 line.width: 3
line.color: "#be781c" // Hack, can't get palette to work in here line.color: object && showSpecialVisual && object.specialVisual ? "green" : "#be781c" // Hack, can't get palette to work in here
z: QGroundControl.zOrderWaypointLines z: QGroundControl.zOrderWaypointLines
path: object && object.coordinate1.isValid && object.coordinate2.isValid ? [ object.coordinate1, object.coordinate2 ] : []
path: object && object.coordinate1.isValid && object.coordinate2.isValid ? [ object.coordinate1, object.coordinate2 ] : []
} }
} }
...@@ -444,6 +444,7 @@ VisualMissionItem* MissionController::insertROIMissionItem(QGeoCoordinate coordi ...@@ -444,6 +444,7 @@ VisualMissionItem* MissionController::insertROIMissionItem(QGeoCoordinate coordi
simpleItem->setCommand(MAV_CMD_DO_SET_ROI) ; simpleItem->setCommand(MAV_CMD_DO_SET_ROI) ;
simpleItem->missionItem().setParam1(MAV_ROI_LOCATION); simpleItem->missionItem().setParam1(MAV_ROI_LOCATION);
} }
_recalcROISpecialVisuals();
return simpleItem; return simpleItem;
} }
...@@ -455,6 +456,7 @@ VisualMissionItem* MissionController::insertCancelROIMissionItem(int visualItemI ...@@ -455,6 +456,7 @@ VisualMissionItem* MissionController::insertCancelROIMissionItem(int visualItemI
simpleItem->setCommand(MAV_CMD_DO_SET_ROI) ; simpleItem->setCommand(MAV_CMD_DO_SET_ROI) ;
simpleItem->missionItem().setParam1(MAV_ROI_NONE); simpleItem->missionItem().setParam1(MAV_ROI_NONE);
} }
_recalcROISpecialVisuals();
return simpleItem; return simpleItem;
} }
...@@ -555,15 +557,15 @@ void MissionController::_insertComplexMissionItemWorker(const QGeoCoordinate& ma ...@@ -555,15 +557,15 @@ void MissionController::_insertComplexMissionItemWorker(const QGeoCoordinate& ma
} }
} }
void MissionController::removeMissionItem(int index) void MissionController::removeMissionItem(int viIndex)
{ {
if (index <= 0 || index >= _visualItems->count()) { if (viIndex <= 0 || viIndex >= _visualItems->count()) {
qWarning() << "MissionController::removeMissionItem called with bad index - count:index" << _visualItems->count() << index; qWarning() << "MissionController::removeMissionItem called with bad index - count:index" << _visualItems->count() << viIndex;
return; return;
} }
bool removeSurveyStyle = _visualItems->value<SurveyComplexItem*>(index) || _visualItems->value<CorridorScanComplexItem*>(index); bool removeSurveyStyle = _visualItems->value<SurveyComplexItem*>(viIndex) || _visualItems->value<CorridorScanComplexItem*>(viIndex);
VisualMissionItem* item = qobject_cast<VisualMissionItem*>(_visualItems->removeAt(index)); VisualMissionItem* item = qobject_cast<VisualMissionItem*>(_visualItems->removeAt(viIndex));
_deinitVisualItem(item); _deinitVisualItem(item);
item->deleteLater(); item->deleteLater();
...@@ -1163,6 +1165,39 @@ CoordinateVector* MissionController::_addWaypointLineSegment(CoordVectHashTable& ...@@ -1163,6 +1165,39 @@ CoordinateVector* MissionController::_addWaypointLineSegment(CoordVectHashTable&
return coordVector; return coordVector;
} }
void MissionController::_recalcROISpecialVisuals(void)
{
return;
VisualMissionItem* lastCoordinateItem = qobject_cast<VisualMissionItem*>(_visualItems->get(0));
bool roiActive = false;
for (int i=1; i<_visualItems->count(); i++) {
VisualMissionItem* visualItem = qobject_cast<VisualMissionItem*>(_visualItems->get(i));
SimpleMissionItem* simpleItem = qobject_cast<SimpleMissionItem*>(visualItem);
VisualItemPair viPair;
if (simpleItem) {
if (roiActive) {
if (_isROICancelItem(simpleItem)) {
roiActive = false;
}
} else {
if (_isROIBeginItem(simpleItem)) {
roiActive = true;
}
}
}
if (visualItem->specifiesCoordinate() && !visualItem->isStandaloneCoordinate()) {
viPair = VisualItemPair(lastCoordinateItem, visualItem);
if (_linesTable.contains(viPair)) {
_linesTable[viPair]->setSpecialVisual(roiActive);
}
lastCoordinateItem = visualItem;
}
}
}
void MissionController::_recalcWaypointLines(void) void MissionController::_recalcWaypointLines(void)
{ {
VisualItemPair lastSegmentVisualItemPair; VisualItemPair lastSegmentVisualItemPair;
...@@ -1172,7 +1207,8 @@ void MissionController::_recalcWaypointLines(void) ...@@ -1172,7 +1207,8 @@ void MissionController::_recalcWaypointLines(void)
bool linkEndToHome = false; bool linkEndToHome = false;
bool linkStartToHome = _managerVehicle->rover() ? true : false; bool linkStartToHome = _managerVehicle->rover() ? true : false;
bool foundRTL = false; bool foundRTL = false;
bool homePositionValid = _settingsItem->coordinate().isValid(); bool homePositionValid = _settingsItem->coordinate().isValid();
bool roiActive = false;
qCDebug(MissionControllerLog) << "_recalcWaypointLines homePositionValid" << homePositionValid; qCDebug(MissionControllerLog) << "_recalcWaypointLines homePositionValid" << homePositionValid;
...@@ -1190,10 +1226,20 @@ void MissionController::_recalcWaypointLines(void) ...@@ -1190,10 +1226,20 @@ void MissionController::_recalcWaypointLines(void)
// Grovel through the list of items keeping track of things needed to correctly draw waypoints lines // Grovel through the list of items keeping track of things needed to correctly draw waypoints lines
for (int i=1; i<_visualItems->count(); i++) { for (int i=1; i<_visualItems->count(); i++) {
VisualMissionItem* visualItem = qobject_cast<VisualMissionItem*>(_visualItems->get(i)); VisualMissionItem* visualItem = qobject_cast<VisualMissionItem*>(_visualItems->get(i));
SimpleMissionItem* simpleItem = qobject_cast<SimpleMissionItem*>(visualItem); SimpleMissionItem* simpleItem = qobject_cast<SimpleMissionItem*>(visualItem);
if (simpleItem) { if (simpleItem) {
if (roiActive) {
if (_isROICancelItem(simpleItem)) {
roiActive = false;
}
} else {
if (_isROIBeginItem(simpleItem)) {
roiActive = true;
}
}
MAV_CMD command = simpleItem->mavCommand(); MAV_CMD command = simpleItem->mavCommand();
switch (command) { switch (command) {
case MAV_CMD_NAV_TAKEOFF: case MAV_CMD_NAV_TAKEOFF:
...@@ -1235,6 +1281,7 @@ void MissionController::_recalcWaypointLines(void) ...@@ -1235,6 +1281,7 @@ void MissionController::_recalcWaypointLines(void)
lastSegmentVisualItemPair = VisualItemPair(lastCoordinateItemBeforeRTL, visualItem); lastSegmentVisualItemPair = VisualItemPair(lastCoordinateItemBeforeRTL, visualItem);
if (!_flyView || addDirectionArrow) { if (!_flyView || addDirectionArrow) {
CoordinateVector* coordVector = _addWaypointLineSegment(old_table, lastSegmentVisualItemPair); CoordinateVector* coordVector = _addWaypointLineSegment(old_table, lastSegmentVisualItemPair);
coordVector->setSpecialVisual(roiActive);
if (addDirectionArrow) { if (addDirectionArrow) {
_directionArrows.append(coordVector); _directionArrows.append(coordVector);
} }
...@@ -1255,7 +1302,8 @@ void MissionController::_recalcWaypointLines(void) ...@@ -1255,7 +1302,8 @@ void MissionController::_recalcWaypointLines(void)
if (_flyView) { if (_flyView) {
_waypointPath.append(QVariant::fromValue(_settingsItem->coordinate())); _waypointPath.append(QVariant::fromValue(_settingsItem->coordinate()));
} }
_addWaypointLineSegment(old_table, lastSegmentVisualItemPair); CoordinateVector* coordVector = _addWaypointLineSegment(old_table, lastSegmentVisualItemPair);
coordVector->setSpecialVisual(roiActive);
} }
// Add direction arrow to last segment // Add direction arrow to last segment
...@@ -2164,6 +2212,21 @@ void MissionController::_managerRemoveAllComplete(bool error) ...@@ -2164,6 +2212,21 @@ void MissionController::_managerRemoveAllComplete(bool error)
} }
} }
bool MissionController::_isROIBeginItem(SimpleMissionItem* simpleItem)
{
return simpleItem->mavCommand() == MAV_CMD_DO_SET_ROI_LOCATION ||
simpleItem->mavCommand() == MAV_CMD_DO_SET_ROI_WPNEXT_OFFSET ||
(simpleItem->mavCommand() == MAV_CMD_DO_SET_ROI &&
static_cast<int>(simpleItem->missionItem().param1()) == MAV_ROI_LOCATION);
}
bool MissionController::_isROICancelItem(SimpleMissionItem* simpleItem)
{
return simpleItem->mavCommand() == MAV_CMD_DO_SET_ROI_NONE ||
(simpleItem->mavCommand() == MAV_CMD_DO_SET_ROI &&
static_cast<int>(simpleItem->missionItem().param1()) == MAV_ROI_NONE);
}
void MissionController::setCurrentPlanViewSeqNum(int sequenceNumber, bool force) void MissionController::setCurrentPlanViewSeqNum(int sequenceNumber, bool force)
{ {
if (_visualItems && (force || sequenceNumber != _currentPlanViewSeqNum)) { if (_visualItems && (force || sequenceNumber != _currentPlanViewSeqNum)) {
...@@ -2178,6 +2241,7 @@ void MissionController::setCurrentPlanViewSeqNum(int sequenceNumber, bool force) ...@@ -2178,6 +2241,7 @@ void MissionController::setCurrentPlanViewSeqNum(int sequenceNumber, bool force)
_isInsertTakeoffValid = true; _isInsertTakeoffValid = true;
_isInsertLandValid = true; _isInsertLandValid = true;
_isROIActive = false; _isROIActive = false;
_isROIBeginCurrentItem = false;
_flyThroughCommandsAllowed = true; _flyThroughCommandsAllowed = true;
for (int viIndex=0; viIndex<_visualItems->count(); viIndex++) { for (int viIndex=0; viIndex<_visualItems->count(); viIndex++) {
...@@ -2222,20 +2286,18 @@ void MissionController::setCurrentPlanViewSeqNum(int sequenceNumber, bool force) ...@@ -2222,20 +2286,18 @@ void MissionController::setCurrentPlanViewSeqNum(int sequenceNumber, bool force)
if (simpleItem) { if (simpleItem) {
if (pVI->sequenceNumber() <= sequenceNumber) { if (pVI->sequenceNumber() <= sequenceNumber) {
if (_isROIActive) { if (_isROIActive) {
if (simpleItem->mavCommand() == MAV_CMD_DO_SET_ROI_NONE || if (_isROICancelItem(simpleItem)) {
(simpleItem->mavCommand() == MAV_CMD_DO_SET_ROI &&
simpleItem->missionItem().param1() == MAV_ROI_NONE)) {
_isROIActive = false; _isROIActive = false;
} }
} else { } else {
if (simpleItem->mavCommand() == MAV_CMD_DO_SET_ROI_LOCATION || if (_isROIBeginItem(simpleItem)) {
simpleItem->mavCommand() == MAV_CMD_DO_SET_ROI_WPNEXT_OFFSET ||
(simpleItem->mavCommand() == MAV_CMD_DO_SET_ROI &&
simpleItem->missionItem().param1() == MAV_ROI_LOCATION)) {
_isROIActive = true; _isROIActive = true;
} }
} }
} }
if (pVI->sequenceNumber() == sequenceNumber && _isROIBeginItem(simpleItem)) {
_isROIBeginCurrentItem = true;
}
} }
if (pVI->sequenceNumber() == sequenceNumber) { if (pVI->sequenceNumber() == sequenceNumber) {
...@@ -2287,6 +2349,7 @@ void MissionController::setCurrentPlanViewSeqNum(int sequenceNumber, bool force) ...@@ -2287,6 +2349,7 @@ void MissionController::setCurrentPlanViewSeqNum(int sequenceNumber, bool force)
emit isInsertTakeoffValidChanged(); emit isInsertTakeoffValidChanged();
emit isInsertLandValidChanged(); emit isInsertLandValidChanged();
emit isROIActiveChanged(); emit isROIActiveChanged();
emit isROIBeginCurrentItemChanged();
emit flyThroughCommandsAllowedChanged(); emit flyThroughCommandsAllowedChanged();
} }
} }
......
...@@ -96,9 +96,10 @@ public: ...@@ -96,9 +96,10 @@ public:
Q_PROPERTY(bool isInsertTakeoffValid MEMBER _isInsertTakeoffValid NOTIFY isInsertTakeoffValidChanged) Q_PROPERTY(bool isInsertTakeoffValid MEMBER _isInsertTakeoffValid NOTIFY isInsertTakeoffValidChanged)
Q_PROPERTY(bool isInsertLandValid MEMBER _isInsertLandValid NOTIFY isInsertLandValidChanged) Q_PROPERTY(bool isInsertLandValid MEMBER _isInsertLandValid NOTIFY isInsertLandValidChanged)
Q_PROPERTY(bool isROIActive MEMBER _isROIActive NOTIFY isROIActiveChanged) Q_PROPERTY(bool isROIActive MEMBER _isROIActive NOTIFY isROIActiveChanged)
Q_PROPERTY(bool isROIBeginCurrentItem MEMBER _isROIBeginCurrentItem NOTIFY isROIBeginCurrentItemChanged)
Q_PROPERTY(bool flyThroughCommandsAllowed MEMBER _flyThroughCommandsAllowed NOTIFY flyThroughCommandsAllowedChanged) Q_PROPERTY(bool flyThroughCommandsAllowed MEMBER _flyThroughCommandsAllowed NOTIFY flyThroughCommandsAllowedChanged)
Q_INVOKABLE void removeMissionItem(int index); Q_INVOKABLE void removeMissionItem(int viIndex);
/// Add a new simple mission item to the list /// Add a new simple mission item to the list
/// @param coordinate: Coordinate for item /// @param coordinate: Coordinate for item
...@@ -263,6 +264,7 @@ signals: ...@@ -263,6 +264,7 @@ signals:
void isInsertTakeoffValidChanged (void); void isInsertTakeoffValidChanged (void);
void isInsertLandValidChanged (void); void isInsertLandValidChanged (void);
void isROIActiveChanged (void); void isROIActiveChanged (void);
void isROIBeginCurrentItemChanged (void);
void flyThroughCommandsAllowedChanged (void); void flyThroughCommandsAllowedChanged (void);
private slots: private slots:
...@@ -286,6 +288,7 @@ private: ...@@ -286,6 +288,7 @@ private:
void _recalcSequence(void); void _recalcSequence(void);
void _recalcChildItems(void); void _recalcChildItems(void);
void _recalcAllWithCoordinate(const QGeoCoordinate& coordinate); void _recalcAllWithCoordinate(const QGeoCoordinate& coordinate);
void _recalcROISpecialVisuals(void);
void _initAllVisualItems(void); void _initAllVisualItems(void);
void _deinitAllVisualItems(void); void _deinitAllVisualItems(void);
void _initVisualItem(VisualMissionItem* item); void _initVisualItem(VisualMissionItem* item);
...@@ -317,6 +320,8 @@ private: ...@@ -317,6 +320,8 @@ private:
VisualMissionItem* _insertSimpleMissionItemWorker(QGeoCoordinate coordinate, MAV_CMD command, int visualItemIndex, bool makeCurrentItem); VisualMissionItem* _insertSimpleMissionItemWorker(QGeoCoordinate coordinate, MAV_CMD command, int visualItemIndex, bool makeCurrentItem);
void _insertComplexMissionItemWorker(const QGeoCoordinate& mapCenterCoordinate, ComplexMissionItem* complexItem, int visualItemIndex, bool makeCurrentItem); void _insertComplexMissionItemWorker(const QGeoCoordinate& mapCenterCoordinate, ComplexMissionItem* complexItem, int visualItemIndex, bool makeCurrentItem);
void _warnIfTerrainFrameUsed(void); void _warnIfTerrainFrameUsed(void);
bool _isROIBeginItem(SimpleMissionItem* simpleItem);
bool _isROICancelItem(SimpleMissionItem* simpleItem);
private: private:
MissionManager* _missionManager; MissionManager* _missionManager;
...@@ -344,6 +349,7 @@ private: ...@@ -344,6 +349,7 @@ private:
bool _isInsertLandValid = true; bool _isInsertLandValid = true;
bool _isROIActive = false; bool _isROIActive = false;
bool _flyThroughCommandsAllowed = true; bool _flyThroughCommandsAllowed = true;
bool _isROIBeginCurrentItem = false;
static const char* _settingsGroup; static const char* _settingsGroup;
......
...@@ -430,7 +430,8 @@ Item { ...@@ -430,7 +430,8 @@ Item {
// Add lines between waypoints // Add lines between waypoints
MissionLineView { MissionLineView {
model: _editingLayer == _layerMission ? _missionController.waypointLines : undefined showSpecialVisual: _missionController.isROIBeginCurrentItem
model: _editingLayer == _layerMission ? _missionController.waypointLines : undefined
} }
MapItemView { MapItemView {
......
...@@ -44,3 +44,11 @@ void CoordinateVector::setCoordinate2(const QGeoCoordinate &coordinate) ...@@ -44,3 +44,11 @@ void CoordinateVector::setCoordinate2(const QGeoCoordinate &coordinate)
emit coordinate2Changed(_coordinate2); emit coordinate2Changed(_coordinate2);
} }
} }
void CoordinateVector::setSpecialVisual(bool specialVisual)
{
if (_specialVisual != specialVisual) {
_specialVisual = specialVisual;
emit specialVisualChanged(specialVisual);
}
}
...@@ -21,25 +21,30 @@ public: ...@@ -21,25 +21,30 @@ public:
CoordinateVector(QObject* parent = nullptr); CoordinateVector(QObject* parent = nullptr);
CoordinateVector(const QGeoCoordinate& coordinate1, const QGeoCoordinate& coordinate2, QObject* parent = nullptr); CoordinateVector(const QGeoCoordinate& coordinate1, const QGeoCoordinate& coordinate2, QObject* parent = nullptr);
Q_PROPERTY(QGeoCoordinate coordinate1 MEMBER _coordinate1 NOTIFY coordinate1Changed) Q_PROPERTY(QGeoCoordinate coordinate1 MEMBER _coordinate1 NOTIFY coordinate1Changed)
Q_PROPERTY(QGeoCoordinate coordinate2 MEMBER _coordinate2 NOTIFY coordinate2Changed) Q_PROPERTY(QGeoCoordinate coordinate2 MEMBER _coordinate2 NOTIFY coordinate2Changed)
Q_PROPERTY(bool specialVisual READ specialVisual WRITE setSpecialVisual NOTIFY specialVisualChanged)
QGeoCoordinate coordinate1(void) const { return _coordinate1; } QGeoCoordinate coordinate1(void) const { return _coordinate1; }
QGeoCoordinate coordinate2(void) const { return _coordinate2; } QGeoCoordinate coordinate2(void) const { return _coordinate2; }
bool specialVisual(void) const { return _specialVisual; }
void setCoordinates(const QGeoCoordinate& coordinate1, const QGeoCoordinate& coordinate2); void setCoordinates(const QGeoCoordinate& coordinate1, const QGeoCoordinate& coordinate2);
void setSpecialVisual(bool specialVisual);
public slots: public slots:
void setCoordinate1(const QGeoCoordinate& coordinate); void setCoordinate1(const QGeoCoordinate& coordinate);
void setCoordinate2(const QGeoCoordinate& coordinate); void setCoordinate2(const QGeoCoordinate& coordinate);
signals: signals:
void coordinate1Changed(QGeoCoordinate coordinate); void coordinate1Changed (QGeoCoordinate coordinate);
void coordinate2Changed(QGeoCoordinate coordinate); void coordinate2Changed (QGeoCoordinate coordinate);
void specialVisualChanged (bool specialVisual);
private: private:
QGeoCoordinate _coordinate1; QGeoCoordinate _coordinate1;
QGeoCoordinate _coordinate2; QGeoCoordinate _coordinate2;
bool _specialVisual = false;
}; };
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment