Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qgroundcontrol
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Valentin Platzgummer
qgroundcontrol
Commits
36de7a37
Commit
36de7a37
authored
Dec 10, 2019
by
DonLakeFlyer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
parent
f9fed02a
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
110 additions
and
27 deletions
+110
-27
MissionLineView.qml
src/FlightMap/MapItems/MissionLineView.qml
+3
-3
MissionController.cc
src/MissionManager/MissionController.cc
+79
-16
MissionController.h
src/MissionManager/MissionController.h
+7
-1
PlanView.qml
src/PlanView/PlanView.qml
+2
-1
CoordinateVector.cc
src/QmlControls/CoordinateVector.cc
+8
-0
CoordinateVector.h
src/QmlControls/CoordinateVector.h
+11
-6
No files found.
src/FlightMap/MapItems/MissionLineView.qml
View file @
36de7a37
...
...
@@ -17,11 +17,11 @@ import QGroundControl.Palette 1.0
/// The MissionLineView control is used to add lines between mission items
MapItemView
{
property
bool
showSpecialVisual
:
false
delegate
:
MapPolyline
{
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
path
:
object
&&
object
.
coordinate1
.
isValid
&&
object
.
coordinate2
.
isValid
?
[
object
.
coordinate1
,
object
.
coordinate2
]
:
[]
path
:
object
&&
object
.
coordinate1
.
isValid
&&
object
.
coordinate2
.
isValid
?
[
object
.
coordinate1
,
object
.
coordinate2
]
:
[]
}
}
src/MissionManager/MissionController.cc
View file @
36de7a37
...
...
@@ -444,6 +444,7 @@ VisualMissionItem* MissionController::insertROIMissionItem(QGeoCoordinate coordi
simpleItem
->
setCommand
(
MAV_CMD_DO_SET_ROI
)
;
simpleItem
->
missionItem
().
setParam1
(
MAV_ROI_LOCATION
);
}
_recalcROISpecialVisuals
();
return
simpleItem
;
}
...
...
@@ -455,6 +456,7 @@ VisualMissionItem* MissionController::insertCancelROIMissionItem(int visualItemI
simpleItem
->
setCommand
(
MAV_CMD_DO_SET_ROI
)
;
simpleItem
->
missionItem
().
setParam1
(
MAV_ROI_NONE
);
}
_recalcROISpecialVisuals
();
return
simpleItem
;
}
...
...
@@ -555,15 +557,15 @@ void MissionController::_insertComplexMissionItemWorker(const QGeoCoordinate& ma
}
}
void
MissionController
::
removeMissionItem
(
int
i
ndex
)
void
MissionController
::
removeMissionItem
(
int
viI
ndex
)
{
if
(
index
<=
0
||
i
ndex
>=
_visualItems
->
count
())
{
qWarning
()
<<
"MissionController::removeMissionItem called with bad index - count:index"
<<
_visualItems
->
count
()
<<
i
ndex
;
if
(
viIndex
<=
0
||
viI
ndex
>=
_visualItems
->
count
())
{
qWarning
()
<<
"MissionController::removeMissionItem called with bad index - count:index"
<<
_visualItems
->
count
()
<<
viI
ndex
;
return
;
}
bool
removeSurveyStyle
=
_visualItems
->
value
<
SurveyComplexItem
*>
(
index
)
||
_visualItems
->
value
<
CorridorScanComplexItem
*>
(
i
ndex
);
VisualMissionItem
*
item
=
qobject_cast
<
VisualMissionItem
*>
(
_visualItems
->
removeAt
(
i
ndex
));
bool
removeSurveyStyle
=
_visualItems
->
value
<
SurveyComplexItem
*>
(
viIndex
)
||
_visualItems
->
value
<
CorridorScanComplexItem
*>
(
viI
ndex
);
VisualMissionItem
*
item
=
qobject_cast
<
VisualMissionItem
*>
(
_visualItems
->
removeAt
(
viI
ndex
));
_deinitVisualItem
(
item
);
item
->
deleteLater
();
...
...
@@ -1163,6 +1165,39 @@ CoordinateVector* MissionController::_addWaypointLineSegment(CoordVectHashTable&
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
)
{
VisualItemPair
lastSegmentVisualItemPair
;
...
...
@@ -1172,7 +1207,8 @@ void MissionController::_recalcWaypointLines(void)
bool
linkEndToHome
=
false
;
bool
linkStartToHome
=
_managerVehicle
->
rover
()
?
true
:
false
;
bool
foundRTL
=
false
;
bool
homePositionValid
=
_settingsItem
->
coordinate
().
isValid
();
bool
homePositionValid
=
_settingsItem
->
coordinate
().
isValid
();
bool
roiActive
=
false
;
qCDebug
(
MissionControllerLog
)
<<
"_recalcWaypointLines homePositionValid"
<<
homePositionValid
;
...
...
@@ -1190,10 +1226,20 @@ void MissionController::_recalcWaypointLines(void)
// Grovel through the list of items keeping track of things needed to correctly draw waypoints lines
for
(
int
i
=
1
;
i
<
_visualItems
->
count
();
i
++
)
{
VisualMissionItem
*
visualItem
=
qobject_cast
<
VisualMissionItem
*>
(
_visualItems
->
get
(
i
));
SimpleMissionItem
*
simpleItem
=
qobject_cast
<
SimpleMissionItem
*>
(
visualItem
);
VisualMissionItem
*
visualItem
=
qobject_cast
<
VisualMissionItem
*>
(
_visualItems
->
get
(
i
));
SimpleMissionItem
*
simpleItem
=
qobject_cast
<
SimpleMissionItem
*>
(
visualItem
);
if
(
simpleItem
)
{
if
(
roiActive
)
{
if
(
_isROICancelItem
(
simpleItem
))
{
roiActive
=
false
;
}
}
else
{
if
(
_isROIBeginItem
(
simpleItem
))
{
roiActive
=
true
;
}
}
MAV_CMD
command
=
simpleItem
->
mavCommand
();
switch
(
command
)
{
case
MAV_CMD_NAV_TAKEOFF
:
...
...
@@ -1235,6 +1281,7 @@ void MissionController::_recalcWaypointLines(void)
lastSegmentVisualItemPair
=
VisualItemPair
(
lastCoordinateItemBeforeRTL
,
visualItem
);
if
(
!
_flyView
||
addDirectionArrow
)
{
CoordinateVector
*
coordVector
=
_addWaypointLineSegment
(
old_table
,
lastSegmentVisualItemPair
);
coordVector
->
setSpecialVisual
(
roiActive
);
if
(
addDirectionArrow
)
{
_directionArrows
.
append
(
coordVector
);
}
...
...
@@ -1255,7 +1302,8 @@ void MissionController::_recalcWaypointLines(void)
if
(
_flyView
)
{
_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
...
...
@@ -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
)
{
if
(
_visualItems
&&
(
force
||
sequenceNumber
!=
_currentPlanViewSeqNum
))
{
...
...
@@ -2178,6 +2241,7 @@ void MissionController::setCurrentPlanViewSeqNum(int sequenceNumber, bool force)
_isInsertTakeoffValid
=
true
;
_isInsertLandValid
=
true
;
_isROIActive
=
false
;
_isROIBeginCurrentItem
=
false
;
_flyThroughCommandsAllowed
=
true
;
for
(
int
viIndex
=
0
;
viIndex
<
_visualItems
->
count
();
viIndex
++
)
{
...
...
@@ -2222,20 +2286,18 @@ void MissionController::setCurrentPlanViewSeqNum(int sequenceNumber, bool force)
if
(
simpleItem
)
{
if
(
pVI
->
sequenceNumber
()
<=
sequenceNumber
)
{
if
(
_isROIActive
)
{
if
(
simpleItem
->
mavCommand
()
==
MAV_CMD_DO_SET_ROI_NONE
||
(
simpleItem
->
mavCommand
()
==
MAV_CMD_DO_SET_ROI
&&
simpleItem
->
missionItem
().
param1
()
==
MAV_ROI_NONE
))
{
if
(
_isROICancelItem
(
simpleItem
))
{
_isROIActive
=
false
;
}
}
else
{
if
(
simpleItem
->
mavCommand
()
==
MAV_CMD_DO_SET_ROI_LOCATION
||
simpleItem
->
mavCommand
()
==
MAV_CMD_DO_SET_ROI_WPNEXT_OFFSET
||
(
simpleItem
->
mavCommand
()
==
MAV_CMD_DO_SET_ROI
&&
simpleItem
->
missionItem
().
param1
()
==
MAV_ROI_LOCATION
))
{
if
(
_isROIBeginItem
(
simpleItem
))
{
_isROIActive
=
true
;
}
}
}
if
(
pVI
->
sequenceNumber
()
==
sequenceNumber
&&
_isROIBeginItem
(
simpleItem
))
{
_isROIBeginCurrentItem
=
true
;
}
}
if
(
pVI
->
sequenceNumber
()
==
sequenceNumber
)
{
...
...
@@ -2287,6 +2349,7 @@ void MissionController::setCurrentPlanViewSeqNum(int sequenceNumber, bool force)
emit
isInsertTakeoffValidChanged
();
emit
isInsertLandValidChanged
();
emit
isROIActiveChanged
();
emit
isROIBeginCurrentItemChanged
();
emit
flyThroughCommandsAllowedChanged
();
}
}
...
...
src/MissionManager/MissionController.h
View file @
36de7a37
...
...
@@ -96,9 +96,10 @@ public:
Q_PROPERTY
(
bool
isInsertTakeoffValid
MEMBER
_isInsertTakeoffValid
NOTIFY
isInsertTakeoffValidChanged
)
Q_PROPERTY
(
bool
isInsertLandValid
MEMBER
_isInsertLandValid
NOTIFY
isInsertLandValidChanged
)
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_INVOKABLE
void
removeMissionItem
(
int
i
ndex
);
Q_INVOKABLE
void
removeMissionItem
(
int
viI
ndex
);
/// Add a new simple mission item to the list
/// @param coordinate: Coordinate for item
...
...
@@ -263,6 +264,7 @@ signals:
void
isInsertTakeoffValidChanged
(
void
);
void
isInsertLandValidChanged
(
void
);
void
isROIActiveChanged
(
void
);
void
isROIBeginCurrentItemChanged
(
void
);
void
flyThroughCommandsAllowedChanged
(
void
);
private
slots
:
...
...
@@ -286,6 +288,7 @@ private:
void
_recalcSequence
(
void
);
void
_recalcChildItems
(
void
);
void
_recalcAllWithCoordinate
(
const
QGeoCoordinate
&
coordinate
);
void
_recalcROISpecialVisuals
(
void
);
void
_initAllVisualItems
(
void
);
void
_deinitAllVisualItems
(
void
);
void
_initVisualItem
(
VisualMissionItem
*
item
);
...
...
@@ -317,6 +320,8 @@ private:
VisualMissionItem
*
_insertSimpleMissionItemWorker
(
QGeoCoordinate
coordinate
,
MAV_CMD
command
,
int
visualItemIndex
,
bool
makeCurrentItem
);
void
_insertComplexMissionItemWorker
(
const
QGeoCoordinate
&
mapCenterCoordinate
,
ComplexMissionItem
*
complexItem
,
int
visualItemIndex
,
bool
makeCurrentItem
);
void
_warnIfTerrainFrameUsed
(
void
);
bool
_isROIBeginItem
(
SimpleMissionItem
*
simpleItem
);
bool
_isROICancelItem
(
SimpleMissionItem
*
simpleItem
);
private:
MissionManager
*
_missionManager
;
...
...
@@ -344,6 +349,7 @@ private:
bool
_isInsertLandValid
=
true
;
bool
_isROIActive
=
false
;
bool
_flyThroughCommandsAllowed
=
true
;
bool
_isROIBeginCurrentItem
=
false
;
static
const
char
*
_settingsGroup
;
...
...
src/PlanView/PlanView.qml
View file @
36de7a37
...
...
@@ -430,7 +430,8 @@ Item {
// Add lines between waypoints
MissionLineView
{
model
:
_editingLayer
==
_layerMission
?
_missionController
.
waypointLines
:
undefined
showSpecialVisual
:
_missionController
.
isROIBeginCurrentItem
model
:
_editingLayer
==
_layerMission
?
_missionController
.
waypointLines
:
undefined
}
MapItemView
{
...
...
src/QmlControls/CoordinateVector.cc
View file @
36de7a37
...
...
@@ -44,3 +44,11 @@ void CoordinateVector::setCoordinate2(const QGeoCoordinate &coordinate)
emit
coordinate2Changed
(
_coordinate2
);
}
}
void
CoordinateVector
::
setSpecialVisual
(
bool
specialVisual
)
{
if
(
_specialVisual
!=
specialVisual
)
{
_specialVisual
=
specialVisual
;
emit
specialVisualChanged
(
specialVisual
);
}
}
src/QmlControls/CoordinateVector.h
View file @
36de7a37
...
...
@@ -21,25 +21,30 @@ public:
CoordinateVector
(
QObject
*
parent
=
nullptr
);
CoordinateVector
(
const
QGeoCoordinate
&
coordinate1
,
const
QGeoCoordinate
&
coordinate2
,
QObject
*
parent
=
nullptr
);
Q_PROPERTY
(
QGeoCoordinate
coordinate1
MEMBER
_coordinate1
NOTIFY
coordinate1Changed
)
Q_PROPERTY
(
QGeoCoordinate
coordinate2
MEMBER
_coordinate2
NOTIFY
coordinate2Changed
)
Q_PROPERTY
(
QGeoCoordinate
coordinate1
MEMBER
_coordinate1
NOTIFY
coordinate1Changed
)
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
coordinate2
(
void
)
const
{
return
_coordinate2
;
}
QGeoCoordinate
coordinate1
(
void
)
const
{
return
_coordinate1
;
}
QGeoCoordinate
coordinate2
(
void
)
const
{
return
_coordinate2
;
}
bool
specialVisual
(
void
)
const
{
return
_specialVisual
;
}
void
setCoordinates
(
const
QGeoCoordinate
&
coordinate1
,
const
QGeoCoordinate
&
coordinate2
);
void
setSpecialVisual
(
bool
specialVisual
);
public
slots
:
void
setCoordinate1
(
const
QGeoCoordinate
&
coordinate
);
void
setCoordinate2
(
const
QGeoCoordinate
&
coordinate
);
signals:
void
coordinate1Changed
(
QGeoCoordinate
coordinate
);
void
coordinate2Changed
(
QGeoCoordinate
coordinate
);
void
coordinate1Changed
(
QGeoCoordinate
coordinate
);
void
coordinate2Changed
(
QGeoCoordinate
coordinate
);
void
specialVisualChanged
(
bool
specialVisual
);
private:
QGeoCoordinate
_coordinate1
;
QGeoCoordinate
_coordinate2
;
bool
_specialVisual
=
false
;
};
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment