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
f7cef6a2
Commit
f7cef6a2
authored
Sep 17, 2011
by
LM
Browse files
Options
Browse Files
Download
Plain Diff
Merged
parents
f4c240a1
604d976a
Changes
16
Show whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
512 additions
and
109 deletions
+512
-109
MAVLinkProtocol.cc
src/comm/MAVLinkProtocol.cc
+9
-0
MAVLinkSimulationLink.cc
src/comm/MAVLinkSimulationLink.cc
+2
-1
UAS.cc
src/uas/UAS.cc
+2
-2
UASManager.cc
src/uas/UASManager.cc
+21
-0
UASManager.h
src/uas/UASManager.h
+36
-0
HSIDisplay.cc
src/ui/HSIDisplay.cc
+241
-70
HSIDisplay.h
src/ui/HSIDisplay.h
+37
-2
Linechart.ui
src/ui/Linechart.ui
+34
-22
QGCToolBar.cc
src/ui/QGCToolBar.cc
+1
-1
WaypointList.cc
src/ui/WaypointList.cc
+1
-1
QGCCommandButton.cc
src/ui/designer/QGCCommandButton.cc
+2
-0
LinechartPlot.cc
src/ui/linechart/LinechartPlot.cc
+3
-1
LinechartPlot.h
src/ui/linechart/LinechartPlot.h
+11
-0
LinechartWidget.cc
src/ui/linechart/LinechartWidget.cc
+103
-6
LinechartWidget.h
src/ui/linechart/LinechartWidget.h
+6
-0
UASListWidget.cc
src/ui/uas/UASListWidget.cc
+3
-3
No files found.
src/comm/MAVLinkProtocol.cc
View file @
f7cef6a2
...
@@ -207,6 +207,15 @@ void MAVLinkProtocol::receiveBytes(LinkInterface* link, QByteArray b)
...
@@ -207,6 +207,15 @@ void MAVLinkProtocol::receiveBytes(LinkInterface* link, QByteArray b)
// ORDER MATTERS HERE!
// ORDER MATTERS HERE!
// If the matching UAS object does not yet exist, it has to be created
// If the matching UAS object does not yet exist, it has to be created
// before emitting the packetReceived signal
// before emitting the packetReceived signal
// BIG NASTY HACK
//TODO
//BUG
//BAD
//FIXME
if
(
message
.
sysid
==
35
)
message
.
sysid
=
42
;
UASInterface
*
uas
=
UASManager
::
instance
()
->
getUASForId
(
message
.
sysid
);
UASInterface
*
uas
=
UASManager
::
instance
()
->
getUASForId
(
message
.
sysid
);
// Check and (if necessary) create UAS object
// Check and (if necessary) create UAS object
...
...
src/comm/MAVLinkSimulationLink.cc
View file @
f7cef6a2
...
@@ -379,7 +379,8 @@ void MAVLinkSimulationLink::mainloop()
...
@@ -379,7 +379,8 @@ void MAVLinkSimulationLink::mainloop()
// Send back new setpoint
// Send back new setpoint
mavlink_message_t
ret
;
mavlink_message_t
ret
;
mavlink_msg_local_position_setpoint_pack
(
systemId
,
componentId
,
&
ret
,
MAV_FRAME_LOCAL_NED
,
spX
,
spY
,
spZ
,
spYaw
);
mavlink_msg_local_position_setpoint_pack
(
systemId
,
componentId
,
&
ret
,
MAV_FRAME_LOCAL_NED
,
spX
,
spY
,
spZ
,
spYaw
);
// spYaw/180.0*M_PI);
mavlink_msg_local_position_setpoint_pack
(
systemId
,
componentId
,
&
ret
,
spX
,
spY
,
spZ
,
bufferlength
=
mavlink_msg_to_send_buffer
(
buffer
,
&
ret
);
bufferlength
=
mavlink_msg_to_send_buffer
(
buffer
,
&
ret
);
//add data into datastream
//add data into datastream
memcpy
(
stream
+
streampointer
,
buffer
,
bufferlength
);
memcpy
(
stream
+
streampointer
,
buffer
,
bufferlength
);
...
...
src/uas/UAS.cc
View file @
f7cef6a2
...
@@ -72,7 +72,7 @@ pitch(0.0),
...
@@ -72,7 +72,7 @@ pitch(0.0),
yaw
(
0.0
),
yaw
(
0.0
),
statusTimeout
(
new
QTimer
(
this
)),
statusTimeout
(
new
QTimer
(
this
)),
paramsOnceRequested
(
false
),
paramsOnceRequested
(
false
),
airframe
(
0
),
airframe
(
QGC_AIRFRAME_EASYSTAR
),
attitudeKnown
(
false
),
attitudeKnown
(
false
),
paramManager
(
NULL
),
paramManager
(
NULL
),
attitudeStamped
(
false
),
attitudeStamped
(
false
),
...
@@ -957,7 +957,7 @@ void UAS::setLocalPositionSetpoint(float x, float y, float z, float yaw)
...
@@ -957,7 +957,7 @@ void UAS::setLocalPositionSetpoint(float x, float y, float z, float yaw)
{
{
#ifdef MAVLINK_ENABLED_PIXHAWK
#ifdef MAVLINK_ENABLED_PIXHAWK
mavlink_message_t
msg
;
mavlink_message_t
msg
;
mavlink_msg_
position_control_setpoint_set_pack
(
mavlink
->
getSystemId
(),
mavlink
->
getComponentId
(),
&
msg
,
uasId
,
0
,
0
,
x
,
y
,
z
,
yaw
);
mavlink_msg_
local_position_setpoint_set_pack
(
mavlink
->
getSystemId
(),
mavlink
->
getComponentId
(),
&
msg
,
uasId
,
0
,
x
,
y
,
z
,
yaw
/
M_PI
*
180.0
);
sendMessage
(
msg
);
sendMessage
(
msg
);
#else
#else
Q_UNUSED
(
x
);
Q_UNUSED
(
x
);
...
...
src/uas/UASManager.cc
View file @
f7cef6a2
...
@@ -96,6 +96,26 @@ bool UASManager::setHomePosition(double lat, double lon, double alt)
...
@@ -96,6 +96,26 @@ bool UASManager::setHomePosition(double lat, double lon, double alt)
return
changed
;
return
changed
;
}
}
/**
* @param x1 Point 1 coordinate in x dimension
* @param y1 Point 1 coordinate in y dimension
* @param z1 Point 1 coordinate in z dimension
*
* @param x2 Point 2 coordinate in x dimension
* @param y2 Point 2 coordinate in y dimension
* @param z2 Point 2 coordinate in z dimension
*/
void
UASManager
::
setLocalNEDSafetyBorders
(
double
x1
,
double
y1
,
double
z1
,
double
x2
,
double
y2
,
double
z2
)
{
nedSafetyLimitPosition1
.
x
()
=
x1
;
nedSafetyLimitPosition1
.
y
()
=
y1
;
nedSafetyLimitPosition1
.
z
()
=
z1
;
nedSafetyLimitPosition2
.
x
()
=
x2
;
nedSafetyLimitPosition2
.
y
()
=
y2
;
nedSafetyLimitPosition2
.
z
()
=
z2
;
}
void
UASManager
::
initReference
(
const
double
&
latitude
,
const
double
&
longitude
,
const
double
&
altitude
)
void
UASManager
::
initReference
(
const
double
&
latitude
,
const
double
&
longitude
,
const
double
&
altitude
)
{
{
...
@@ -198,6 +218,7 @@ UASManager::UASManager() :
...
@@ -198,6 +218,7 @@ UASManager::UASManager() :
{
{
start
(
QThread
::
LowPriority
);
start
(
QThread
::
LowPriority
);
loadSettings
();
loadSettings
();
setLocalNEDSafetyBorders
(
1
,
-
1
,
0
,
-
1
,
1
,
-
1
);
}
}
UASManager
::~
UASManager
()
UASManager
::~
UASManager
()
...
...
src/uas/UASManager.h
View file @
f7cef6a2
...
@@ -92,6 +92,37 @@ public:
...
@@ -92,6 +92,37 @@ public:
/** @brief Convert WGS84 lat/lon coordinates to carthesian coordinates with home position as origin */
/** @brief Convert WGS84 lat/lon coordinates to carthesian coordinates with home position as origin */
void
wgs84ToEnu
(
const
double
&
lat
,
const
double
&
lon
,
const
double
&
alt
,
double
*
east
,
double
*
north
,
double
*
up
);
void
wgs84ToEnu
(
const
double
&
lat
,
const
double
&
lon
,
const
double
&
alt
,
double
*
east
,
double
*
north
,
double
*
up
);
void
getLocalNEDSafetyLimits
(
double
*
x1
,
double
*
y1
,
double
*
z1
,
double
*
x2
,
double
*
y2
,
double
*
z2
)
{
*
x1
=
nedSafetyLimitPosition1
.
x
();
*
y1
=
nedSafetyLimitPosition1
.
y
();
*
z1
=
nedSafetyLimitPosition1
.
z
();
*
x2
=
nedSafetyLimitPosition2
.
x
();
*
y2
=
nedSafetyLimitPosition2
.
y
();
*
z2
=
nedSafetyLimitPosition2
.
z
();
}
/** @brief Check if a position is in the local NED safety limits */
bool
isInLocalNEDSafetyLimits
(
double
x
,
double
y
,
double
z
)
{
if
(
x
<
nedSafetyLimitPosition1
.
x
()
&&
y
>
nedSafetyLimitPosition1
.
y
()
&&
z
<
nedSafetyLimitPosition1
.
z
()
&&
x
>
nedSafetyLimitPosition2
.
x
()
&&
y
<
nedSafetyLimitPosition2
.
y
()
&&
z
>
nedSafetyLimitPosition2
.
z
())
{
// Within limits
return
true
;
}
else
{
// Not within limits
return
false
;
}
}
// void wgs84ToNed(const double& lat, const double& lon, const double& alt, double* north, double* east, double* down);
// void wgs84ToNed(const double& lat, const double& lon, const double& alt, double* north, double* east, double* down);
...
@@ -188,6 +219,9 @@ public slots:
...
@@ -188,6 +219,9 @@ public slots:
/** @brief Set the current home position on all UAVs*/
/** @brief Set the current home position on all UAVs*/
bool
setHomePosition
(
double
lat
,
double
lon
,
double
alt
);
bool
setHomePosition
(
double
lat
,
double
lon
,
double
alt
);
/** @brief Set the safety limits in local position frame */
void
setLocalNEDSafetyBorders
(
double
x1
,
double
y1
,
double
z1
,
double
x2
,
double
y2
,
double
z2
);
/** @brief Update home position based on the position from one of the UAVs */
/** @brief Update home position based on the position from one of the UAVs */
void
uavChangedHomePosition
(
int
uav
,
double
lat
,
double
lon
,
double
alt
);
void
uavChangedHomePosition
(
int
uav
,
double
lat
,
double
lon
,
double
alt
);
...
@@ -207,6 +241,8 @@ protected:
...
@@ -207,6 +241,8 @@ protected:
double
homeAlt
;
double
homeAlt
;
Eigen
::
Quaterniond
ecef_ref_orientation_
;
Eigen
::
Quaterniond
ecef_ref_orientation_
;
Eigen
::
Vector3d
ecef_ref_point_
;
Eigen
::
Vector3d
ecef_ref_point_
;
Eigen
::
Vector3d
nedSafetyLimitPosition1
;
Eigen
::
Vector3d
nedSafetyLimitPosition2
;
void
initReference
(
const
double
&
latitude
,
const
double
&
longitude
,
const
double
&
altitude
);
void
initReference
(
const
double
&
latitude
,
const
double
&
longitude
,
const
double
&
altitude
);
...
...
src/ui/HSIDisplay.cc
View file @
f7cef6a2
...
@@ -85,7 +85,7 @@ HSIDisplay::HSIDisplay(QWidget *parent) :
...
@@ -85,7 +85,7 @@ HSIDisplay::HSIDisplay(QWidget *parent) :
bodyYawSet
(
0.0
f
),
bodyYawSet
(
0.0
f
),
uiXSetCoordinate
(
0.0
f
),
uiXSetCoordinate
(
0.0
f
),
uiYSetCoordinate
(
0.0
f
),
uiYSetCoordinate
(
0.0
f
),
uiZSetCoordinate
(
0.0
f
),
uiZSetCoordinate
(
-
0.51
f
),
uiYawSet
(
0.0
f
),
uiYawSet
(
0.0
f
),
metricWidth
(
4.0
),
metricWidth
(
4.0
),
positionLock
(
false
),
positionLock
(
false
),
...
@@ -100,7 +100,11 @@ HSIDisplay::HSIDisplay(QWidget *parent) :
...
@@ -100,7 +100,11 @@ HSIDisplay::HSIDisplay(QWidget *parent) :
mavInitialized
(
false
),
mavInitialized
(
false
),
bottomMargin
(
10.0
f
),
bottomMargin
(
10.0
f
),
topMargin
(
12.0
f
),
topMargin
(
12.0
f
),
userSetPointSet
(
false
)
userSetPointSet
(
false
),
dragStarted
(
false
),
leftDragStarted
(
false
),
mouseHasMoved
(
false
),
actionPending
(
false
)
{
{
refreshTimer
->
setInterval
(
updateInterval
);
refreshTimer
->
setInterval
(
updateInterval
);
...
@@ -121,6 +125,14 @@ HSIDisplay::HSIDisplay(QWidget *parent) :
...
@@ -121,6 +125,14 @@ HSIDisplay::HSIDisplay(QWidget *parent) :
// Do first update
// Do first update
setMetricWidth
(
metricWidth
);
setMetricWidth
(
metricWidth
);
// Set tooltip
setToolTip
(
tr
(
"View from top in body frame. Scroll with mouse wheel to change the horizontal field of view of the widget."
));
setStatusTip
(
tr
(
"View from top in body frame. Scroll with mouse wheel to change the horizontal field of view of the widget."
));
connect
(
&
statusClearTimer
,
SIGNAL
(
timeout
()),
this
,
SLOT
(
clearStatusMessage
()));
statusClearTimer
.
start
(
3000
);
setFocusPolicy
(
Qt
::
StrongFocus
);
}
}
void
HSIDisplay
::
resetMAVState
()
void
HSIDisplay
::
resetMAVState
()
...
@@ -200,8 +212,9 @@ void HSIDisplay::renderOverlay()
...
@@ -200,8 +212,9 @@ void HSIDisplay::renderOverlay()
painter
.
setPen
(
pen
);
painter
.
setPen
(
pen
);
const
int
ringCount
=
2
;
const
int
ringCount
=
2
;
for
(
int
i
=
0
;
i
<
ringCount
;
i
++
)
{
for
(
int
i
=
0
;
i
<
ringCount
;
i
++
)
{
float
radius
=
(
vwidth
-
(
topMargin
+
bottomMargin
)
*
0.3
f
)
/
(
1.3
f
*
i
+
1
)
/
2.0
f
-
bottomMargin
/
2.0
f
;
float
radius
=
(
vwidth
-
(
topMargin
+
bottomMargin
)
*
0.3
f
)
/
(
1.3
5
f
*
i
+
1
)
/
2.0
f
-
bottomMargin
/
2.0
f
;
drawCircle
(
xCenterPos
,
yCenterPos
,
radius
,
0.1
f
,
ringColor
,
&
painter
);
drawCircle
(
xCenterPos
,
yCenterPos
,
radius
,
0.1
f
,
ringColor
,
&
painter
);
paintText
(
tr
(
"%1 m"
).
arg
(
refToMetric
(
radius
),
5
,
'f'
,
1
,
' '
),
QGC
::
colorCyan
,
1.6
f
,
vwidth
/
2
-
4
,
vheight
/
2
+
radius
+
2.2
,
&
painter
);
}
}
// Draw orientation labels
// Draw orientation labels
...
@@ -217,6 +230,15 @@ void HSIDisplay::renderOverlay()
...
@@ -217,6 +230,15 @@ void HSIDisplay::renderOverlay()
painter
.
rotate
(
+
yawRotate
);
painter
.
rotate
(
+
yawRotate
);
painter
.
translate
(
-
(
xCenterPos
)
*
scalingFactor
,
-
(
yCenterPos
)
*
scalingFactor
);
painter
.
translate
(
-
(
xCenterPos
)
*
scalingFactor
,
-
(
yCenterPos
)
*
scalingFactor
);
// Draw trail
// QPointF m(bodyXSetCoordinate, bodyYSetCoordinate);
// // Transform from body to world coordinates
// m = metricWorldToBody(m);
// // Scale from metric body to screen reference units
// QPointF s = metricBodyToRef(m);
// drawLine(s.x(), s.y(), xCenterPos, yCenterPos, 1.5f, uas->getColor(), &painter);
// Draw center indicator
// Draw center indicator
// QPolygonF p(3);
// QPolygonF p(3);
// p.replace(0, QPointF(xCenterPos, yCenterPos-4.0f));
// p.replace(0, QPointF(xCenterPos, yCenterPos-4.0f));
...
@@ -252,28 +274,41 @@ void HSIDisplay::renderOverlay()
...
@@ -252,28 +274,41 @@ void HSIDisplay::renderOverlay()
// Draw position setpoints in body coordinates
// Draw position setpoints in body coordinates
if
(
userSetPointSet
)
{
float
xSpDiff
=
uiXSetCoordinate
-
bodyXSetCoordinate
;
float
ySpDiff
=
uiYSetCoordinate
-
bodyYSetCoordinate
;
float
zSpDiff
=
uiZSetCoordinate
-
bodyZSetCoordinate
;
float
setPointDist
=
sqrt
(
xSpDiff
*
xSpDiff
+
ySpDiff
*
ySpDiff
+
zSpDiff
*
zSpDiff
);
float
angleDiff
=
uiYawSet
-
bodyYawSet
;
float
normAngleDiff
=
fabs
(
atan2
(
sin
(
angleDiff
),
cos
(
angleDiff
)));
if
(
userSetPointSet
&&
setPointDist
>
0.08
f
||
normAngleDiff
>
0.05
f
||
dragStarted
)
{
QColor
spColor
(
150
,
150
,
150
);
QColor
spColor
(
150
,
150
,
150
);
drawSetpointXY
(
uiXSetCoordinate
,
uiY
SetCoordinate
,
uiYawSet
,
spColor
,
painter
);
drawSetpointXY
ZYaw
(
uiXSetCoordinate
,
uiYSetCoordinate
,
uiZ
SetCoordinate
,
uiYawSet
,
spColor
,
painter
);
}
}
if
(
positionSetPointKnown
)
{
// Labels on outer part and bottom
// Draw waypoints
drawWaypoints
(
painter
);
// Draw setpoint over waypoints
if
(
positionSetPointKnown
)
{
// Draw setpoint
// Draw setpoint
drawSetpointXY
(
bodyXSetCoordinate
,
bodyYSetCoordinate
,
bodyYawSet
,
QGC
::
colorCyan
,
painter
);
drawSetpointXY
ZYaw
(
bodyXSetCoordinate
,
bodyYSetCoordinate
,
bodyZSetCoordinate
,
bodyYawSet
,
uas
->
getColor
()
,
painter
);
// Draw travel direction line
// Draw travel direction line
QPointF
m
(
bodyXSetCoordinate
,
bodyYSetCoordinate
);
QPointF
m
(
bodyXSetCoordinate
,
bodyYSetCoordinate
);
// Transform from body to world coordinates
// Transform from body to world coordinates
m
=
metricWorldToBody
(
m
);
m
=
metricWorldToBody
(
m
);
// Scale from metric body to screen reference units
// Scale from metric body to screen reference units
QPointF
s
=
metricBodyToRef
(
m
);
QPointF
s
=
metricBodyToRef
(
m
);
drawLine
(
s
.
x
(),
s
.
y
(),
xCenterPos
,
yCenterPos
,
1.5
f
,
QGC
::
colorCyan
,
&
painter
);
drawLine
(
s
.
x
(),
s
.
y
(),
xCenterPos
,
yCenterPos
,
1.5
f
,
uas
->
getColor
()
,
&
painter
);
}
}
// Labels on outer part and bottom
// Draw waypoints
drawWaypoints
(
painter
);
// Draw status flags
// Draw status flags
drawStatusFlag
(
2
,
1
,
tr
(
"ATT"
),
attControlEnabled
,
attControlKnown
,
painter
);
drawStatusFlag
(
2
,
1
,
tr
(
"ATT"
),
attControlEnabled
,
attControlKnown
,
painter
);
drawStatusFlag
(
22
,
1
,
tr
(
"PXY"
),
xyControlEnabled
,
xyControlKnown
,
painter
);
drawStatusFlag
(
22
,
1
,
tr
(
"PXY"
),
xyControlEnabled
,
xyControlKnown
,
painter
);
...
@@ -300,20 +335,25 @@ void HSIDisplay::renderOverlay()
...
@@ -300,20 +335,25 @@ void HSIDisplay::renderOverlay()
// Position
// Position
QString
str
;
QString
str
;
str
.
sprintf
(
"%05.2f %05.2f %05.2f m"
,
x
,
y
,
z
);
str
.
sprintf
(
"%05.2f %05.2f %05.2f m"
,
x
,
y
,
z
);
paintText
(
tr
(
"POS"
),
QGC
::
colorCyan
,
2.6
f
,
2
,
vheight
-
5
.0
f
,
&
painter
);
paintText
(
tr
(
"POS"
),
QGC
::
colorCyan
,
2.6
f
,
2
,
vheight
-
4
.0
f
,
&
painter
);
paintText
(
str
,
Qt
::
white
,
2.6
f
,
10
,
vheight
-
5
.0
f
,
&
painter
);
paintText
(
str
,
Qt
::
white
,
2.6
f
,
10
,
vheight
-
4
.0
f
,
&
painter
);
}
}
if
(
globalAvailable
>
0
)
{
if
(
globalAvailable
>
0
)
{
// Position
// Position
QString
str
;
QString
str
;
str
.
sprintf
(
"lat: %05.2f lon: %06.2f alt: %06.2f"
,
lat
,
lon
,
alt
);
str
.
sprintf
(
"lat: %05.2f lon: %06.2f alt: %06.2f"
,
lat
,
lon
,
alt
);
paintText
(
tr
(
"GPS"
),
QGC
::
colorCyan
,
2.6
f
,
2
,
vheight
-
5
.0
f
,
&
painter
);
paintText
(
tr
(
"GPS"
),
QGC
::
colorCyan
,
2.6
f
,
2
,
vheight
-
4
.0
f
,
&
painter
);
paintText
(
str
,
Qt
::
white
,
2.6
f
,
10
,
vheight
-
5
.0
f
,
&
painter
);
paintText
(
str
,
Qt
::
white
,
2.6
f
,
10
,
vheight
-
4
.0
f
,
&
painter
);
}
}
// Draw Field of view to bottom right
// Draw Safety
paintText
(
tr
(
"FOV %1 m"
).
arg
(
metricWidth
,
5
,
'f'
,
1
,
' '
),
QGC
::
colorCyan
,
2.6
f
,
55
,
vheight
-
5.0
f
,
&
painter
);
double
x1
,
y1
,
z1
,
x2
,
y2
,
z2
;
UASManager
::
instance
()
->
getLocalNEDSafetyLimits
(
&
x1
,
&
y1
,
&
z1
,
&
x2
,
&
y2
,
&
z2
);
// drawSafetyArea(QPointF(x1, y1), QPointF(x2, y2), QGC::colorYellow, painter);
// Draw status message
paintText
(
statusMessage
,
QGC
::
colorOrange
,
2.4
f
,
8
,
15
,
&
painter
);
}
}
void
HSIDisplay
::
drawStatusFlag
(
float
x
,
float
y
,
QString
label
,
bool
status
,
bool
known
,
QPainter
&
painter
)
void
HSIDisplay
::
drawStatusFlag
(
float
x
,
float
y
,
QString
label
,
bool
status
,
bool
known
,
QPainter
&
painter
)
...
@@ -333,7 +373,8 @@ void HSIDisplay::drawStatusFlag(float x, float y, QString label, bool status, bo
...
@@ -333,7 +373,8 @@ void HSIDisplay::drawStatusFlag(float x, float y, QString label, bool status, bo
painter
.
drawRect
(
QRect
(
refToScreenX
(
x
+
7.3
f
),
refToScreenY
(
y
+
0.05
),
indicatorWidth
,
indicatorHeight
));
painter
.
drawRect
(
QRect
(
refToScreenX
(
x
+
7.3
f
),
refToScreenY
(
y
+
0.05
),
indicatorWidth
,
indicatorHeight
));
paintText
((
status
)
?
tr
(
"ON"
)
:
tr
(
"OFF"
),
statusColor
,
2.6
f
,
x
+
7.9
f
,
y
+
0.8
f
,
&
painter
);
paintText
((
status
)
?
tr
(
"ON"
)
:
tr
(
"OFF"
),
statusColor
,
2.6
f
,
x
+
7.9
f
,
y
+
0.8
f
,
&
painter
);
// Cross out instrument if state unknown
// Cross out instrument if state unknown
if
(
!
known
)
{
if
(
!
known
)
{
QPen
pen
(
Qt
::
yellow
);
QPen
pen
(
Qt
::
yellow
);
pen
.
setWidth
(
2
);
pen
.
setWidth
(
2
);
painter
.
setPen
(
pen
);
painter
.
setPen
(
pen
);
...
@@ -466,13 +507,13 @@ QPointF HSIDisplay::metricBodyToWorld(QPointF body)
...
@@ -466,13 +507,13 @@ QPointF HSIDisplay::metricBodyToWorld(QPointF body)
{
{
// First rotate into world coordinates
// First rotate into world coordinates
// then translate to world position
// then translate to world position
QPointF
result
((
cos
(
yaw
)
*
body
.
x
())
+
(
sin
(
yaw
)
*
body
.
y
())
+
x
,
(
-
sin
(
yaw
)
*
body
.
x
())
+
(
cos
(
yaw
)
*
body
.
y
())
+
y
);
QPointF
result
((
cos
(
-
yaw
)
*
body
.
x
())
+
(
sin
(
-
yaw
)
*
body
.
y
())
+
x
,
(
-
sin
(
-
yaw
)
*
body
.
x
())
+
(
cos
(
-
yaw
)
*
body
.
y
())
+
y
);
return
result
;
return
result
;
}
}
QPointF
HSIDisplay
::
screenToMetricBody
(
QPointF
ref
)
QPointF
HSIDisplay
::
screenToMetricBody
(
QPointF
ref
)
{
{
return
QPointF
(
-
((
screenToRefY
(
ref
.
y
())
-
yCenterPos
)
/
vwidth
)
*
metricWidth
-
x
,
((
screenToRefX
(
ref
.
x
())
-
xCenterPos
)
/
vwidth
)
*
metricWidth
-
y
);
return
QPointF
(
-
((
screenToRefY
(
ref
.
y
())
-
yCenterPos
)
/
vwidth
)
*
metricWidth
,
((
screenToRefX
(
ref
.
x
())
-
xCenterPos
)
/
vwidth
)
*
metricWidth
);
}
}
QPointF
HSIDisplay
::
refToMetricBody
(
QPointF
&
ref
)
QPointF
HSIDisplay
::
refToMetricBody
(
QPointF
&
ref
)
...
@@ -488,6 +529,16 @@ QPointF HSIDisplay::metricBodyToRef(QPointF &metric)
...
@@ -488,6 +529,16 @@ QPointF HSIDisplay::metricBodyToRef(QPointF &metric)
return
QPointF
(((
metric
.
y
())
/
metricWidth
)
*
vwidth
+
xCenterPos
,
((
-
metric
.
x
())
/
metricWidth
)
*
vwidth
+
yCenterPos
);
return
QPointF
(((
metric
.
y
())
/
metricWidth
)
*
vwidth
+
xCenterPos
,
((
-
metric
.
x
())
/
metricWidth
)
*
vwidth
+
yCenterPos
);
}
}
double
HSIDisplay
::
metricToRef
(
double
metric
)
{
return
(
metric
/
metricWidth
)
*
vwidth
;
}
double
HSIDisplay
::
refToMetric
(
double
ref
)
{
return
(
ref
/
vwidth
)
*
metricWidth
;
}
QPointF
HSIDisplay
::
metricBodyToScreen
(
QPointF
metric
)
QPointF
HSIDisplay
::
metricBodyToScreen
(
QPointF
metric
)
{
{
QPointF
ref
=
metricBodyToRef
(
metric
);
QPointF
ref
=
metricBodyToRef
(
metric
);
...
@@ -498,30 +549,93 @@ QPointF HSIDisplay::metricBodyToScreen(QPointF metric)
...
@@ -498,30 +549,93 @@ QPointF HSIDisplay::metricBodyToScreen(QPointF metric)
void
HSIDisplay
::
mouseDoubleClickEvent
(
QMouseEvent
*
event
)
void
HSIDisplay
::
mouseDoubleClickEvent
(
QMouseEvent
*
event
)
{
{
static
bool
dragStarted
;
if
(
event
->
type
()
==
QMouseEvent
::
MouseButtonDblClick
)
static
float
startX
;
{
if
(
event
->
MouseButtonDblClick
)
{
//setBodySetpointCoordinateXY(-refToMetric(screenToRefY(event->y()) - yCenterPos), refToMetric(screenToRefX(event->x()) - xCenterPos));
QPointF
p
=
screenToMetricBody
(
event
->
posF
());
QPointF
p
=
screenToMetricBody
(
event
->
posF
());
setBodySetpointCoordinateXY
(
p
.
x
(),
p
.
y
());
setBodySetpointCoordinateXY
(
p
.
x
(),
p
.
y
());
qDebug
()
<<
"Double click at x: "
<<
screenToRefX
(
event
->
x
())
-
xCenterPos
<<
"y:"
<<
screenToRefY
(
event
->
y
())
-
yCenterPos
;
// qDebug() << "Double click at x: " << screenToRefX(event->x()) - xCenterPos << "y:" << screenToRefY(event->y()) - yCenterPos;
}
else
if
(
event
->
MouseButtonPress
)
{
}
startX
=
event
->
globalX
();
}
if
(
event
->
button
()
==
Qt
::
RightButton
)
{
void
HSIDisplay
::
mouseReleaseEvent
(
QMouseEvent
*
event
)
{
if
(
mouseHasMoved
)
{
if
(
event
->
type
()
==
QMouseEvent
::
MouseButtonRelease
&&
event
->
button
()
==
Qt
::
RightButton
)
{
if
(
dragStarted
)
{
setBodySetpointCoordinateYaw
(
uiYawSet
);
dragStarted
=
false
;
}
}
if
(
event
->
type
()
==
QMouseEvent
::
MouseButtonRelease
&&
event
->
button
()
==
Qt
::
LeftButton
)
{
if
(
leftDragStarted
)
{
setBodySetpointCoordinateZ
(
uiZSetCoordinate
);
leftDragStarted
=
false
;
}
}
}
mouseHasMoved
=
false
;
}
void
HSIDisplay
::
mousePressEvent
(
QMouseEvent
*
event
)
{
if
(
event
->
type
()
==
QMouseEvent
::
MouseButtonPress
)
{
if
(
event
->
button
()
==
Qt
::
RightButton
)
{
startX
=
event
->
x
();
// Start tracking mouse move
// Start tracking mouse move
dragStarted
=
true
;
dragStarted
=
true
;
}
else
if
(
event
->
button
()
==
Qt
::
LeftButton
)
{
}
else
if
(
event
->
button
()
==
Qt
::
LeftButton
)
{
startY
=
event
->
y
();
leftDragStarted
=
true
;
}
}
mouseHasMoved
=
false
;
}
void
HSIDisplay
::
mouseMoveEvent
(
QMouseEvent
*
event
)
{
if
(
event
->
type
()
==
QMouseEvent
::
MouseMove
)
{
if
(
dragStarted
)
uiYawSet
-=
0.06
f
*
(
startX
-
event
->
x
())
/
this
->
frameSize
().
width
();
if
(
leftDragStarted
)
{
// uiZSetCoordinate -= 0.06f*(startY - event->y()) / this->frameSize().height();
// setBodySetpointCoordinateZ(uiZSetCoordinate);
}
}
}
else
if
(
event
->
MouseButtonRelease
)
{
dragStarted
=
false
;
if
(
leftDragStarted
||
dragStarted
)
mouseHasMoved
=
true
;
}
else
if
(
event
->
MouseMove
)
{
if
(
dragStarted
)
uiYawSet
+=
(
startX
-
event
->
globalX
())
/
this
->
frameSize
().
width
();
}
}
}
}
void
HSIDisplay
::
keyPressEvent
(
QKeyEvent
*
event
)
{
if
((
event
->
key
()
==
Qt
::
Key_Enter
||
event
->
key
()
==
Qt
::
Key_Return
)
&&
actionPending
)
{
actionPending
=
false
;
statusMessage
=
"SETPOINT SENT"
;
statusClearTimer
.
start
();
sendBodySetPointCoordinates
();
}
else
{
HDDisplay
::
keyPressEvent
(
event
);
}
}
void
HSIDisplay
::
contextMenuEvent
(
QContextMenuEvent
*
event
)
{
event
->
ignore
();
}
void
HSIDisplay
::
setMetricWidth
(
double
width
)
void
HSIDisplay
::
setMetricWidth
(
double
width
)
{
{
if
(
width
!=
metricWidth
)
{
if
(
width
!=
metricWidth
)
{
...
@@ -593,6 +707,8 @@ void HSIDisplay::updateSpeed(UASInterface* uas, double vx, double vy, double vz,
...
@@ -593,6 +707,8 @@ void HSIDisplay::updateSpeed(UASInterface* uas, double vx, double vy, double vz,
void
HSIDisplay
::
setBodySetpointCoordinateXY
(
double
x
,
double
y
)
void
HSIDisplay
::
setBodySetpointCoordinateXY
(
double
x
,
double
y
)
{
{
userSetPointSet
=
true
;
userXYSetPointSet
=
true
;
// Set coordinates and send them out to MAV
// Set coordinates and send them out to MAV
QPointF
sp
(
x
,
y
);
QPointF
sp
(
x
,
y
);
...
@@ -602,21 +718,66 @@ void HSIDisplay::setBodySetpointCoordinateXY(double x, double y)
...
@@ -602,21 +718,66 @@ void HSIDisplay::setBodySetpointCoordinateXY(double x, double y)
qDebug
()
<<
"Attempting to set new setpoint at x: "
<<
x
<<
"metric y:"
<<
y
;
qDebug
()
<<
"Attempting to set new setpoint at x: "
<<
x
<<
"metric y:"
<<
y
;
if
(
uas
&&
mavInitialized
)
{
if
(
uas
&&
mavInitialized
)
uas
->
setLocalPositionSetpoint
(
uiXSetCoordinate
,
uiYSetCoordinate
,
uiZSetCoordinate
,
uiYawSet
);
{
qDebug
()
<<
"Setting new setpoint at x: "
<<
x
<<
"metric y:"
<<
y
;
//sendBodySetPointCoordinates();
statusMessage
=
"POSITION SET, PRESS <ENTER> TO SEND"
;
actionPending
=
true
;
statusClearTimer
.
start
();
}
}
}
}
void
HSIDisplay
::
setBodySetpointCoordinateZ
(
double
z
)
void
HSIDisplay
::
setBodySetpointCoordinateZ
(
double
z
)
{
{
userSetPointSet
=
true
;
// Set coordinates and send them out to MAV
// Set coordinates and send them out to MAV
uiZSetCoordinate
=
z
;
uiZSetCoordinate
=
z
;
statusMessage
=
"Z SET, PRESS <ENTER> TO SEND"
;
actionPending
=
true
;
statusClearTimer
.
start
();
//sendBodySetPointCoordinates();
}
void
HSIDisplay
::
setBodySetpointCoordinateYaw
(
double
yaw
)
{
if
(
!
userXYSetPointSet
&&
setPointKnown
)
{
uiXSetCoordinate
=
bodyXSetCoordinate
;
uiYSetCoordinate
=
bodyYSetCoordinate
;
}
else
if
(
!
userXYSetPointSet
&&
mavInitialized
)
{
QPointF
coord
=
metricBodyToWorld
(
QPointF
(
0.0
,
0.0
));
uiXSetCoordinate
=
coord
.
x
();
uiYSetCoordinate
=
coord
.
y
();
}
userSetPointSet
=
true
;
// Set coordinates and send them out to MAV
uiYawSet
=
atan2
(
sin
(
yaw
),
cos
(
yaw
));
statusMessage
=
"YAW SET, PRESS <ENTER> TO SEND"
;
statusClearTimer
.
start
();
actionPending
=
true
;
//sendBodySetPointCoordinates();
}
}
void
HSIDisplay
::
sendBodySetPointCoordinates
()
void
HSIDisplay
::
sendBodySetPointCoordinates
()
{
{
// Send the coordinates to the MAV
// Send the coordinates to the MAV
if
(
uas
&&
mavInitialized
)
{
double
dx
=
uiXSetCoordinate
-
uas
->
getLocalX
();
double
dy
=
uiYSetCoordinate
-
uas
->
getLocalY
();
double
dz
=
uiZSetCoordinate
-
uas
->
getLocalZ
();
bool
valid
=
(
sqrt
(
dx
*
dx
+
dy
*
dy
+
dz
*
dz
)
<
1.0
);
//UASManager::instance()->isInLocalNEDSafetyLimits(uiXSetCoordinate, uiYSetCoordinate, uiZSetCoordinate);
if
(
valid
)
{
uas
->
setLocalPositionSetpoint
(
uiXSetCoordinate
,
uiYSetCoordinate
,
uiZSetCoordinate
,
uiYawSet
);
}
else
{
setStatusMessage
(
"REJECTED NEW SETPOINT: OUT OF BOUNDS"
);
}
}
}
}
void
HSIDisplay
::
updateAttitudeSetpoints
(
UASInterface
*
uas
,
double
rollDesired
,
double
pitchDesired
,
double
yawDesired
,
double
thrustDesired
,
quint64
usec
)
void
HSIDisplay
::
updateAttitudeSetpoints
(
UASInterface
*
uas
,
double
rollDesired
,
double
pitchDesired
,
double
yawDesired
,
double
thrustDesired
,
quint64
usec
)
...
@@ -650,11 +811,13 @@ void HSIDisplay::updatePositionSetpoints(int uasid, float xDesired, float yDesir
...
@@ -650,11 +811,13 @@ void HSIDisplay::updatePositionSetpoints(int uasid, float xDesired, float yDesir
setPointKnown
=
true
;
setPointKnown
=
true
;
positionSetPointKnown
=
true
;
positionSetPointKnown
=
true
;
// qDebug() << "Received setpoint at x: " << x << "metric y:" << y;
if
(
!
userSetPointSet
&&
!
dragStarted
)
// posXSet = xDesired;
{
// posYSet = yDesired;
uiXSetCoordinate
=
bodyXSetCoordinate
;
// posZSet = zDesired;
uiYSetCoordinate
=
bodyYSetCoordinate
;
// posYawSet = yawDesired;
// uiZSetCoordinate = bodyZSetCoordinate;
uiYawSet
=
bodyYawSet
;
}
}
}
void
HSIDisplay
::
updateLocalPosition
(
UASInterface
*
,
double
x
,
double
y
,
double
z
,
quint64
usec
)
void
HSIDisplay
::
updateLocalPosition
(
UASInterface
*
,
double
x
,
double
y
,
double
z
,
quint64
usec
)
...
@@ -748,10 +911,10 @@ QColor HSIDisplay::getColorForSNR(float snr)
...
@@ -748,10 +911,10 @@ QColor HSIDisplay::getColorForSNR(float snr)
return
color
;
return
color
;
}
}
void
HSIDisplay
::
drawSetpointXY
(
float
x
,
float
y
,
float
yaw
,
const
QColor
&
color
,
QPainter
&
painter
)
void
HSIDisplay
::
drawSetpointXY
ZYaw
(
float
x
,
float
y
,
float
z
,
float
yaw
,
const
QColor
&
color
,
QPainter
&
painter
)
{
{
if
(
setPointKnown
)
{
if
(
setPointKnown
&&
uas
)
{
float
radius
=
vwidth
/
20
.0
f
;
float
radius
=
vwidth
/
18
.0
f
;
QPen
pen
(
color
);
QPen
pen
(
color
);
pen
.
setWidthF
(
refLineWidthToPen
(
0.4
f
));
pen
.
setWidthF
(
refLineWidthToPen
(
0.4
f
));
pen
.
setColor
(
color
);
pen
.
setColor
(
color
);
...
@@ -762,9 +925,25 @@ void HSIDisplay::drawSetpointXY(float x, float y, float yaw, const QColor &color
...
@@ -762,9 +925,25 @@ void HSIDisplay::drawSetpointXY(float x, float y, float yaw, const QColor &color
in
=
metricWorldToBody
(
in
);
in
=
metricWorldToBody
(
in
);
// Scale from metric to screen reference coordinates
// Scale from metric to screen reference coordinates
QPointF
p
=
metricBodyToRef
(
in
);
QPointF
p
=
metricBodyToRef
(
in
);
drawCircle
(
p
.
x
(),
p
.
y
(),
radius
,
0.4
f
,
color
,
&
painter
);
QPolygonF
poly
(
4
);
// Top point
poly
.
replace
(
0
,
QPointF
(
p
.
x
()
-
radius
,
p
.
y
()
-
radius
));
// Right point
poly
.
replace
(
1
,
QPointF
(
p
.
x
()
+
radius
,
p
.
y
()
-
radius
));
// Bottom point
poly
.
replace
(
2
,
QPointF
(
p
.
x
()
+
radius
,
p
.
y
()
+
radius
));
poly
.
replace
(
3
,
QPointF
(
p
.
x
()
-
radius
,
p
.
y
()
+
radius
));
// Label
paintText
(
QString
(
"z: %1 m"
).
arg
(
z
),
color
,
1.2
f
,
p
.
x
()
-
radius
,
p
.
y
()
-
radius
-
2.0
f
,
&
painter
);
drawPolygon
(
poly
,
&
painter
);
radius
*=
0.8
f
;
radius
*=
0.8
f
;
drawLine
(
p
.
x
(),
p
.
y
(),
p
.
x
()
+
sin
(
yaw
)
*
radius
,
p
.
y
()
-
cos
(
yaw
)
*
radius
,
refLineWidthToPen
(
0.4
f
),
color
,
&
painter
);
drawLine
(
p
.
x
(),
p
.
y
(),
p
.
x
()
+
sin
(
-
yaw
+
uas
->
getYaw
()
+
M_PI
)
*
radius
,
p
.
y
()
+
cos
(
-
yaw
+
uas
->
getYaw
()
+
M_PI
)
*
radius
,
refLineWidthToPen
(
0.4
f
),
color
,
&
painter
);
// Draw center dot
painter
.
setBrush
(
color
);
painter
.
setBrush
(
color
);
drawCircle
(
p
.
x
(),
p
.
y
(),
radius
*
0.1
f
,
0.1
f
,
color
,
&
painter
);
drawCircle
(
p
.
x
(),
p
.
y
(),
radius
*
0.1
f
,
0.1
f
,
color
,
&
painter
);
}
}
...
@@ -772,20 +951,9 @@ void HSIDisplay::drawSetpointXY(float x, float y, float yaw, const QColor &color
...
@@ -772,20 +951,9 @@ void HSIDisplay::drawSetpointXY(float x, float y, float yaw, const QColor &color
void
HSIDisplay
::
drawWaypoints
(
QPainter
&
painter
)
void
HSIDisplay
::
drawWaypoints
(
QPainter
&
painter
)
{
{
if
(
uas
)
{
if
(
uas
)
{
const
QVector
<
Waypoint
*>&
list
=
uas
->
getWaypointManager
()
->
getWaypointList
();
const
QVector
<
Waypoint
*>&
list
=
uas
->
getWaypointManager
()
->
getWaypointList
();
// for (int i = 0; i < list.size(); i++)
// {
// QPointF in(list.at(i)->getX(), list.at(i)->getY());
// // Transform from world to body coordinates
// in = metricWorldToBody(in);
// // Scale from metric to screen reference coordinates
// QPointF p = metricBodyToRef(in);
// Waypoint2DIcon* wp = new Waypoint2DIcon();
// wp->setLocalPosition(list.at(i)->getX(), list.at(i)->getY());
// wp->setPos(0, 0);
// scene()->addItem(wp);
// }
QColor
color
;
QColor
color
;
painter
.
setBrush
(
Qt
::
NoBrush
);
painter
.
setBrush
(
Qt
::
NoBrush
);
...
@@ -814,7 +982,6 @@ void HSIDisplay::drawWaypoints(QPainter& painter)
...
@@ -814,7 +982,6 @@ void HSIDisplay::drawWaypoints(QPainter& painter)
painter
.
setBrush
(
Qt
::
NoBrush
);
painter
.
setBrush
(
Qt
::
NoBrush
);
// DRAW WAYPOINT
// DRAW WAYPOINT
//drawCircle(p.x(), p.y(), radius, 0.4f, color, &painter);
float
waypointSize
=
vwidth
/
20.0
f
*
2.0
f
;
float
waypointSize
=
vwidth
/
20.0
f
*
2.0
f
;
QPolygonF
poly
(
4
);
QPolygonF
poly
(
4
);
// Top point
// Top point
...
@@ -827,25 +994,28 @@ void HSIDisplay::drawWaypoints(QPainter& painter)
...
@@ -827,25 +994,28 @@ void HSIDisplay::drawWaypoints(QPainter& painter)
// Select color based on if this is the current waypoint
// Select color based on if this is the current waypoint
if
(
list
.
at
(
i
)
->
getCurrent
())
{
if
(
list
.
at
(
i
)
->
getCurrent
())
{
color
=
QGC
::
color
Cyan
;
//uas->getColor();
color
=
QGC
::
color
Yellow
;
//uas->getColor();
pen
.
setWidthF
(
refLineWidthToPen
(
0.8
f
));
pen
.
setWidthF
(
refLineWidthToPen
(
0.8
f
));
}
else
{
}
else
{
color
=
uas
->
getColor
()
;
color
=
QGC
::
colorCyan
;
pen
.
setWidthF
(
refLineWidthToPen
(
0.4
f
));
pen
.
setWidthF
(
refLineWidthToPen
(
0.4
f
));
}
}
pen
.
setColor
(
color
);
pen
.
setColor
(
color
);
painter
.
setPen
(
pen
);
painter
.
setPen
(
pen
);
float
radius
=
(
waypointSize
/
2.0
f
)
*
0.8
*
(
1
/
sqrt
(
2.0
f
));
float
radius
=
(
waypointSize
/
2.0
f
)
*
0.8
*
(
1
/
sqrt
(
2.0
f
));
drawLine
(
p
.
x
(),
p
.
y
(),
p
.
x
()
+
sin
(
list
.
at
(
i
)
->
getYaw
()
+
yaw
)
*
radius
,
p
.
y
()
-
cos
(
list
.
at
(
i
)
->
getYaw
()
+
yaw
)
*
radius
,
refLineWidthToPen
(
0.4
f
),
color
,
&
painter
);
drawLine
(
p
.
x
(),
p
.
y
(),
p
.
x
()
+
sin
(
list
.
at
(
i
)
->
getYaw
()
/
180.0
*
M_PI
-
yaw
)
*
radius
,
p
.
y
()
-
cos
(
list
.
at
(
i
)
->
getYaw
()
/
180.0
*
M_PI
-
yaw
)
*
radius
,
refLineWidthToPen
(
0.4
f
),
color
,
&
painter
);
drawPolygon
(
poly
,
&
painter
);
drawPolygon
(
poly
,
&
painter
);
float
acceptRadius
=
list
.
at
(
i
)
->
getAcceptanceRadius
();
drawCircle
(
p
.
x
(),
p
.
y
(),
metricToRef
(
acceptRadius
),
1.0
,
Qt
::
green
,
&
painter
);
// DRAW CONNECTING LINE
// DRAW CONNECTING LINE
// Draw line from last waypoint to this one
// Draw line from last waypoint to this one
if
(
!
lastWaypoint
.
isNull
())
{
if
(
!
lastWaypoint
.
isNull
())
{
pen
.
setWidthF
(
refLineWidthToPen
(
0.4
f
));
pen
.
setWidthF
(
refLineWidthToPen
(
0.4
f
));
painter
.
setPen
(
pen
);
painter
.
setPen
(
pen
);
color
=
uas
->
getColor
()
;
color
=
QGC
::
colorCyan
;
drawLine
(
lastWaypoint
.
x
(),
lastWaypoint
.
y
(),
p
.
x
(),
p
.
y
(),
refLineWidthToPen
(
0.4
f
),
color
,
&
painter
);
drawLine
(
lastWaypoint
.
x
(),
lastWaypoint
.
y
(),
p
.
x
(),
p
.
y
(),
refLineWidthToPen
(
0.4
f
),
color
,
&
painter
);
}
}
lastWaypoint
=
p
;
lastWaypoint
=
p
;
...
@@ -858,6 +1028,7 @@ void HSIDisplay::drawSafetyArea(const QPointF &topLeft, const QPointF &bottomRig
...
@@ -858,6 +1028,7 @@ void HSIDisplay::drawSafetyArea(const QPointF &topLeft, const QPointF &bottomRig
QPen
pen
(
color
);
QPen
pen
(
color
);
pen
.
setWidthF
(
refLineWidthToPen
(
0.1
f
));
pen
.
setWidthF
(
refLineWidthToPen
(
0.1
f
));
pen
.
setColor
(
color
);
pen
.
setColor
(
color
);
pen
.
setBrush
(
Qt
::
NoBrush
);
painter
.
setPen
(
pen
);
painter
.
setPen
(
pen
);
painter
.
drawRect
(
QRectF
(
metricBodyToScreen
(
metricWorldToBody
(
topLeft
)),
metricBodyToScreen
(
metricWorldToBody
(
bottomRight
))));
painter
.
drawRect
(
QRectF
(
metricBodyToScreen
(
metricWorldToBody
(
topLeft
)),
metricBodyToScreen
(
metricWorldToBody
(
bottomRight
))));
}
}
...
@@ -1026,7 +1197,7 @@ void HSIDisplay::wheelEvent(QWheelEvent* event)
...
@@ -1026,7 +1197,7 @@ void HSIDisplay::wheelEvent(QWheelEvent* event)
// Increase width -> Zoom out
// Increase width -> Zoom out
metricWidth
-=
event
->
delta
()
*
zoomScale
;
metricWidth
-=
event
->
delta
()
*
zoomScale
;
}
}
metricWidth
=
qBound
(
0.
1
,
metricWidth
,
9999.0
);
metricWidth
=
qBound
(
0.
5
,
metricWidth
,
9999.0
);
emit
metricWidthChanged
(
metricWidth
);
emit
metricWidthChanged
(
metricWidth
);
}
}
...
...
src/ui/HSIDisplay.h
View file @
f7cef6a2
...
@@ -85,6 +85,14 @@ public slots:
...
@@ -85,6 +85,14 @@ public slots:
void
pressKey
(
int
key
);
void
pressKey
(
int
key
);
/** @brief Reset the state of the view */
/** @brief Reset the state of the view */
void
resetMAVState
();
void
resetMAVState
();
/** @brief Clear the status message */
void
clearStatusMessage
()
{
statusMessage
=
""
;
if
(
actionPending
)
statusMessage
=
"TIMED OUT, NO ACTION"
;
statusClearTimer
.
start
();
actionPending
=
false
;
}
signals:
signals:
void
metricWidthChanged
(
double
width
);
void
metricWidthChanged
(
double
width
);
...
@@ -101,19 +109,33 @@ protected slots:
...
@@ -101,19 +109,33 @@ protected slots:
/** @brief Draw a position lock indicator */
/** @brief Draw a position lock indicator */
void
drawPositionLock
(
float
x
,
float
y
,
QString
label
,
int
status
,
bool
known
,
QPainter
&
painter
);
void
drawPositionLock
(
float
x
,
float
y
,
QString
label
,
int
status
,
bool
known
,
QPainter
&
painter
);
void
setBodySetpointCoordinateXY
(
double
x
,
double
y
);
void
setBodySetpointCoordinateXY
(
double
x
,
double
y
);
void
setBodySetpointCoordinateYaw
(
double
yaw
);
void
setBodySetpointCoordinateZ
(
double
z
);
void
setBodySetpointCoordinateZ
(
double
z
);
/** @brief Send the current ui setpoint coordinates as new setpoint to the MAV */
/** @brief Send the current ui setpoint coordinates as new setpoint to the MAV */
void
sendBodySetPointCoordinates
();
void
sendBodySetPointCoordinates
();
/** @brief Draw one setpoint */
/** @brief Draw one setpoint */
void
drawSetpointXY
(
float
x
,
float
y
,
float
yaw
,
const
QColor
&
color
,
QPainter
&
painter
);
void
drawSetpointXY
ZYaw
(
float
x
,
float
y
,
float
z
,
float
yaw
,
const
QColor
&
color
,
QPainter
&
painter
);
/** @brief Draw waypoints of this system */
/** @brief Draw waypoints of this system */
void
drawWaypoints
(
QPainter
&
painter
);
void
drawWaypoints
(
QPainter
&
painter
);
/** @brief Draw the limiting safety area */
/** @brief Draw the limiting safety area */
void
drawSafetyArea
(
const
QPointF
&
topLeft
,
const
QPointF
&
bottomRight
,
const
QColor
&
color
,
QPainter
&
painter
);
void
drawSafetyArea
(
const
QPointF
&
topLeft
,
const
QPointF
&
bottomRight
,
const
QColor
&
color
,
QPainter
&
painter
);
/** @brief Receive mouse clicks */
/** @brief Receive mouse clicks */
void
mouseDoubleClickEvent
(
QMouseEvent
*
event
);
void
mouseDoubleClickEvent
(
QMouseEvent
*
event
);
void
mousePressEvent
(
QMouseEvent
*
event
);
void
mouseReleaseEvent
(
QMouseEvent
*
event
);
void
mouseMoveEvent
(
QMouseEvent
*
event
);
/** @brief Receive mouse wheel events */
/** @brief Receive mouse wheel events */
void
wheelEvent
(
QWheelEvent
*
event
);
void
wheelEvent
(
QWheelEvent
*
event
);
/** @brief Read out send keys */
void
keyPressEvent
(
QKeyEvent
*
event
);
/** @brief Ignore context menu event */
void
contextMenuEvent
(
QContextMenuEvent
*
event
);
/** @brief Set status message on screen */
void
setStatusMessage
(
const
QString
&
message
)
{
statusMessage
=
message
;
statusClearTimer
.
start
();
}
protected:
protected:
...
@@ -131,6 +153,10 @@ protected:
...
@@ -131,6 +153,10 @@ protected:
QPointF
refToMetricBody
(
QPointF
&
ref
);
QPointF
refToMetricBody
(
QPointF
&
ref
);
/** @brief Metric coordinates to reference coordinates */
/** @brief Metric coordinates to reference coordinates */
QPointF
metricBodyToRef
(
QPointF
&
metric
);
QPointF
metricBodyToRef
(
QPointF
&
metric
);
/** @brief Metric length to reference coordinates */
double
metricToRef
(
double
metric
);
/** @bried Reference coordinates to metric length */
double
refToMetric
(
double
ref
);
/** @brief Metric body coordinates to screen coordinates */
/** @brief Metric body coordinates to screen coordinates */
QPointF
metricBodyToScreen
(
QPointF
metric
);
QPointF
metricBodyToScreen
(
QPointF
metric
);
QMap
<
int
,
QString
>
objectNames
;
QMap
<
int
,
QString
>
objectNames
;
...
@@ -138,6 +164,14 @@ protected:
...
@@ -138,6 +164,14 @@ protected:
QMap
<
int
,
float
>
objectQualities
;
QMap
<
int
,
float
>
objectQualities
;
QMap
<
int
,
float
>
objectBearings
;
QMap
<
int
,
float
>
objectBearings
;
QMap
<
int
,
float
>
objectDistances
;
QMap
<
int
,
float
>
objectDistances
;
bool
dragStarted
;
bool
leftDragStarted
;
bool
mouseHasMoved
;
float
startX
;
float
startY
;
QTimer
statusClearTimer
;
QString
statusMessage
;
bool
actionPending
;
/**
/**
* @brief Private data container class to be used within the HSI widget
* @brief Private data container class to be used within the HSI widget
...
@@ -254,7 +288,8 @@ protected:
...
@@ -254,7 +288,8 @@ protected:
// Data indicators
// Data indicators
bool
setPointKnown
;
///< Controller setpoint known status flag
bool
setPointKnown
;
///< Controller setpoint known status flag
bool
positionSetPointKnown
;
///< Position setpoint known status flag
bool
positionSetPointKnown
;
///< Position setpoint known status flag
bool
userSetPointSet
;
bool
userSetPointSet
;
///< User set X, Y and Z
bool
userXYSetPointSet
;
///< User set the X/Y position already
private:
private:
};
};
...
...
src/ui/Linechart.ui
View file @
f7cef6a2
...
@@ -6,8 +6,8 @@
...
@@ -6,8 +6,8 @@
<rect>
<rect>
<x>
0
</x>
<x>
0
</x>
<y>
0
</y>
<y>
0
</y>
<width>
662
</width>
<width>
833
</width>
<height>
381
</height>
<height>
585
</height>
</rect>
</rect>
</property>
</property>
<property
name=
"sizePolicy"
>
<property
name=
"sizePolicy"
>
...
@@ -25,23 +25,8 @@
...
@@ -25,23 +25,8 @@
<property
name=
"windowTitle"
>
<property
name=
"windowTitle"
>
<string>
Form
</string>
<string>
Form
</string>
</property>
</property>
<layout
class=
"QHBoxLayout"
name=
"horizontalLayout_2"
stretch=
"10,20"
>
<layout
class=
"QGridLayout"
name=
"gridLayout"
columnstretch=
"5,5,5,5,100"
>
<property
name=
"spacing"
>
<item
row=
"0"
column=
"0"
colspan=
"4"
>
<number>
3
</number>
</property>
<property
name=
"leftMargin"
>
<number>
2
</number>
</property>
<property
name=
"topMargin"
>
<number>
0
</number>
</property>
<property
name=
"rightMargin"
>
<number>
2
</number>
</property>
<property
name=
"bottomMargin"
>
<number>
2
</number>
</property>
<item>
<widget
class=
"QGroupBox"
name=
"curveGroupBox"
>
<widget
class=
"QGroupBox"
name=
"curveGroupBox"
>
<property
name=
"sizePolicy"
>
<property
name=
"sizePolicy"
>
<sizepolicy
hsizetype=
"Expanding"
vsizetype=
"MinimumExpanding"
>
<sizepolicy
hsizetype=
"Expanding"
vsizetype=
"MinimumExpanding"
>
...
@@ -114,8 +99,8 @@
...
@@ -114,8 +99,8 @@
<rect>
<rect>
<x>
0
</x>
<x>
0
</x>
<y>
0
</y>
<y>
0
</y>
<width>
2
10
</width>
<width>
2
32
</width>
<height>
361
</height>
<height>
516
</height>
</rect>
</rect>
</property>
</property>
</widget>
</widget>
...
@@ -124,7 +109,7 @@
...
@@ -124,7 +109,7 @@
</layout>
</layout>
</widget>
</widget>
</item>
</item>
<item>
<item
row=
"0"
column=
"4"
rowspan=
"2"
>
<widget
class=
"QGroupBox"
name=
"diagramGroupBox"
>
<widget
class=
"QGroupBox"
name=
"diagramGroupBox"
>
<property
name=
"sizePolicy"
>
<property
name=
"sizePolicy"
>
<sizepolicy
hsizetype=
"MinimumExpanding"
vsizetype=
"MinimumExpanding"
>
<sizepolicy
hsizetype=
"MinimumExpanding"
vsizetype=
"MinimumExpanding"
>
...
@@ -149,6 +134,33 @@
...
@@ -149,6 +134,33 @@
</property>
</property>
</widget>
</widget>
</item>
</item>
<item
row=
"1"
column=
"0"
>
<widget
class=
"QCheckBox"
name=
"shortNameCheckBox"
>
<property
name=
"text"
>
<string>
Short Names
</string>
</property>
</widget>
</item>
<item
row=
"1"
column=
"2"
colspan=
"2"
>
<widget
class=
"QPushButton"
name=
"recolorButton"
>
<property
name=
"text"
>
<string>
Recolor
</string>
</property>
</widget>
</item>
<item
row=
"1"
column=
"1"
>
<spacer
name=
"horizontalSpacer"
>
<property
name=
"orientation"
>
<enum>
Qt::Horizontal
</enum>
</property>
<property
name=
"sizeHint"
stdset=
"0"
>
<size>
<width>
40
</width>
<height>
20
</height>
</size>
</property>
</spacer>
</item>
</layout>
</layout>
</widget>
</widget>
<resources/>
<resources/>
...
...
src/ui/QGCToolBar.cc
View file @
f7cef6a2
...
@@ -64,7 +64,7 @@ QGCToolBar::QGCToolBar(QWidget *parent) :
...
@@ -64,7 +64,7 @@ QGCToolBar::QGCToolBar(QWidget *parent) :
toolBarBatteryBar
->
setMinimum
(
0
);
toolBarBatteryBar
->
setMinimum
(
0
);
toolBarBatteryBar
->
setMaximum
(
100
);
toolBarBatteryBar
->
setMaximum
(
100
);
toolBarBatteryBar
->
setMinimumWidth
(
20
);
toolBarBatteryBar
->
setMinimumWidth
(
20
);
toolBarBatteryBar
->
setMaximumWidth
(
2
00
);
toolBarBatteryBar
->
setMaximumWidth
(
1
00
);
toolBarBatteryVoltageLabel
=
new
QLabel
(
"xx.x V"
);
toolBarBatteryVoltageLabel
=
new
QLabel
(
"xx.x V"
);
toolBarBatteryVoltageLabel
->
setStyleSheet
(
QString
(
"QLabel { margin: 0px 0px 0px 4px; font: 14px; color: %1; }"
).
arg
(
QColor
(
Qt
::
green
).
name
()));
toolBarBatteryVoltageLabel
->
setStyleSheet
(
QString
(
"QLabel { margin: 0px 0px 0px 4px; font: 14px; color: %1; }"
).
arg
(
QColor
(
Qt
::
green
).
name
()));
symbolButton
->
setStyleSheet
(
"QWidget { background-color: #050508; color: #DDDDDF; background-clip: border; } QToolButton { font-weight: bold; font-size: 12px; border: 0px solid #999999; border-radius: 5px; min-width:22px; max-width: 22px; min-height: 22px; max-height: 22px; padding: 0px; margin: 0px 0px 0px 20px; background-color: none; }"
);
symbolButton
->
setStyleSheet
(
"QWidget { background-color: #050508; color: #DDDDDF; background-clip: border; } QToolButton { font-weight: bold; font-size: 12px; border: 0px solid #999999; border-radius: 5px; min-width:22px; max-width: 22px; min-height: 22px; max-height: 22px; padding: 0px; margin: 0px 0px 0px 20px; background-color: none; }"
);
...
...
src/ui/WaypointList.cc
View file @
f7cef6a2
...
@@ -210,7 +210,7 @@ void WaypointList::addCurrentPositonWaypoint()
...
@@ -210,7 +210,7 @@ void WaypointList::addCurrentPositonWaypoint()
yawGlobal
=
last
->
getYaw
();
yawGlobal
=
last
->
getYaw
();
}
}
// Create global frame waypoint per default
// Create global frame waypoint per default
wp
=
new
Waypoint
(
0
,
uas
->
getLatitude
(),
uas
->
getLongitude
(),
uas
->
getAltitude
(),
yawGlobal
,
acceptanceRadiusGlobal
,
holdTime
,
0.0
,
true
,
true
,
MAV_FRAME_GLOBAL_RELATIVE_ALT
,
MAV_CMD_NAV_WAYPOINT
);
wp
=
new
Waypoint
(
0
,
uas
->
getLatitude
(),
uas
->
getLongitude
(),
uas
->
getAltitude
(),
0
,
acceptanceRadiusGlobal
,
holdTime
,
yawGlobal
,
true
,
true
,
MAV_FRAME_GLOBAL_RELATIVE_ALT
,
MAV_CMD_NAV_WAYPOINT
);
uas
->
getWaypointManager
()
->
addWaypoint
(
wp
);
uas
->
getWaypointManager
()
->
addWaypoint
(
wp
);
updateStatusLabel
(
tr
(
"Added GLOBAL, ALTITUDE OVER GROUND waypoint"
));
updateStatusLabel
(
tr
(
"Added GLOBAL, ALTITUDE OVER GROUND waypoint"
));
}
}
...
...
src/ui/designer/QGCCommandButton.cc
View file @
f7cef6a2
...
@@ -53,6 +53,7 @@ QGCCommandButton::QGCCommandButton(QWidget *parent) :
...
@@ -53,6 +53,7 @@ QGCCommandButton::QGCCommandButton(QWidget *parent) :
ui
->
editCommandComboBox
->
addItem
(
"CUSTOM 13"
,
13
);
ui
->
editCommandComboBox
->
addItem
(
"CUSTOM 13"
,
13
);
ui
->
editCommandComboBox
->
addItem
(
"CUSTOM 14"
,
14
);
ui
->
editCommandComboBox
->
addItem
(
"CUSTOM 14"
,
14
);
ui
->
editCommandComboBox
->
addItem
(
"CUSTOM 15"
,
15
);
ui
->
editCommandComboBox
->
addItem
(
"CUSTOM 15"
,
15
);
ui
->
editCommandComboBox
->
addItem
(
"NAV_WAYPOINT"
,
16
);
ui
->
editCommandComboBox
->
setEditable
(
true
);
ui
->
editCommandComboBox
->
setEditable
(
true
);
}
}
...
@@ -75,6 +76,7 @@ void QGCCommandButton::sendCommand()
...
@@ -75,6 +76,7 @@ void QGCCommandButton::sendCommand()
int
component
=
ui
->
editComponentSpinBox
->
value
();
int
component
=
ui
->
editComponentSpinBox
->
value
();
QGCToolWidgetItem
::
uas
->
executeCommand
(
command
,
confirm
,
param1
,
param2
,
param3
,
param4
,
component
);
QGCToolWidgetItem
::
uas
->
executeCommand
(
command
,
confirm
,
param1
,
param2
,
param3
,
param4
,
component
);
qDebug
()
<<
__FILE__
<<
__LINE__
<<
"SENDING COMMAND"
<<
index
;
}
else
{
}
else
{
qDebug
()
<<
__FILE__
<<
__LINE__
<<
"NO UAS SET, DOING NOTHING"
;
qDebug
()
<<
__FILE__
<<
__LINE__
<<
"NO UAS SET, DOING NOTHING"
;
}
}
...
...
src/ui/linechart/LinechartPlot.cc
View file @
f7cef6a2
...
@@ -127,6 +127,7 @@ LinechartPlot::LinechartPlot(QWidget *parent, int plotid, quint64 interval): Qwt
...
@@ -127,6 +127,7 @@ LinechartPlot::LinechartPlot(QWidget *parent, int plotid, quint64 interval): Qwt
//updateTimer->start(DEFAULT_REFRESH_RATE);
//updateTimer->start(DEFAULT_REFRESH_RATE);
connect
(
&
timeoutTimer
,
SIGNAL
(
timeout
()),
this
,
SLOT
(
removeTimedOutCurves
()));
connect
(
&
timeoutTimer
,
SIGNAL
(
timeout
()),
this
,
SLOT
(
removeTimedOutCurves
()));
//timeoutTimer.start(5000);
}
}
LinechartPlot
::~
LinechartPlot
()
LinechartPlot
::~
LinechartPlot
()
...
@@ -208,7 +209,7 @@ void LinechartPlot::removeTimedOutCurves()
...
@@ -208,7 +209,7 @@ void LinechartPlot::removeTimedOutCurves()
foreach
(
QString
key
,
lastUpdate
.
keys
())
foreach
(
QString
key
,
lastUpdate
.
keys
())
{
{
quint64
time
=
lastUpdate
.
value
(
key
);
quint64
time
=
lastUpdate
.
value
(
key
);
if
(
QGC
::
groundTimeMilliseconds
()
-
time
>
2
0000
)
if
(
QGC
::
groundTimeMilliseconds
()
-
time
>
1
0000
)
{
{
// Remove this curve
// Remove this curve
// Delete curves
// Delete curves
...
@@ -227,6 +228,7 @@ void LinechartPlot::removeTimedOutCurves()
...
@@ -227,6 +228,7 @@ void LinechartPlot::removeTimedOutCurves()
delete
d
;
delete
d
;
// Set the pointer null
// Set the pointer null
d
=
NULL
;
d
=
NULL
;
emit
curveRemoved
(
key
);
}
}
}
}
}
}
...
...
src/ui/linechart/LinechartPlot.h
View file @
f7cef6a2
...
@@ -269,6 +269,17 @@ public slots:
...
@@ -269,6 +269,17 @@ public slots:
void
setAverageWindow
(
int
windowSize
);
void
setAverageWindow
(
int
windowSize
);
void
removeTimedOutCurves
();
void
removeTimedOutCurves
();
/** @brief Reset color map */
void
shuffleColors
()
{
foreach
(
QwtPlotCurve
*
curve
,
curves
)
{
QPen
pen
(
curve
->
pen
());
pen
.
setColor
(
getNextColor
());
curve
->
setPen
(
pen
);
}
}
public:
public:
QColor
getColorForCurve
(
QString
id
);
QColor
getColorForCurve
(
QString
id
);
...
...
src/ui/linechart/LinechartWidget.cc
View file @
f7cef6a2
...
@@ -76,7 +76,7 @@ LinechartWidget::LinechartWidget(int systemid, QWidget *parent) : QWidget(parent
...
@@ -76,7 +76,7 @@ LinechartWidget::LinechartWidget(int systemid, QWidget *parent) : QWidget(parent
{
{
// Add elements defined in Qt Designer
// Add elements defined in Qt Designer
ui
.
setupUi
(
this
);
ui
.
setupUi
(
this
);
this
->
setMinimumSize
(
300
,
20
0
);
this
->
setMinimumSize
(
200
,
15
0
);
// Add and customize curve list elements (left side)
// Add and customize curve list elements (left side)
curvesWidget
=
new
QWidget
(
ui
.
curveListWidget
);
curvesWidget
=
new
QWidget
(
ui
.
curveListWidget
);
...
@@ -104,7 +104,8 @@ LinechartWidget::LinechartWidget(int systemid, QWidget *parent) : QWidget(parent
...
@@ -104,7 +104,8 @@ LinechartWidget::LinechartWidget(int systemid, QWidget *parent) : QWidget(parent
QLabel
*
mean
;
QLabel
*
mean
;
QLabel
*
variance
;
QLabel
*
variance
;
//horizontalLayout->addWidget(checkBox);
connect
(
ui
.
recolorButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
recolor
()));
connect
(
ui
.
shortNameCheckBox
,
SIGNAL
(
clicked
(
bool
)),
this
,
SLOT
(
setShortNames
(
bool
)));
int
labelRow
=
curvesWidgetLayout
->
rowCount
();
int
labelRow
=
curvesWidgetLayout
->
rowCount
();
...
@@ -170,6 +171,7 @@ void LinechartWidget::writeSettings()
...
@@ -170,6 +171,7 @@ void LinechartWidget::writeSettings()
settings
.
beginGroup
(
"LINECHART"
);
settings
.
beginGroup
(
"LINECHART"
);
if
(
timeButton
)
settings
.
setValue
(
"ENFORCE_GROUNDTIME"
,
timeButton
->
isChecked
());
if
(
timeButton
)
settings
.
setValue
(
"ENFORCE_GROUNDTIME"
,
timeButton
->
isChecked
());
if
(
unitsCheckBox
)
settings
.
setValue
(
"SHOW_UNITS"
,
unitsCheckBox
->
isChecked
());
if
(
unitsCheckBox
)
settings
.
setValue
(
"SHOW_UNITS"
,
unitsCheckBox
->
isChecked
());
if
(
ui
.
shortNameCheckBox
)
settings
.
setValue
(
"SHORT_NAMES"
,
ui
.
shortNameCheckBox
->
isChecked
());
settings
.
endGroup
();
settings
.
endGroup
();
settings
.
sync
();
settings
.
sync
();
}
}
...
@@ -183,7 +185,8 @@ void LinechartWidget::readSettings()
...
@@ -183,7 +185,8 @@ void LinechartWidget::readSettings()
timeButton
->
setChecked
(
settings
.
value
(
"ENFORCE_GROUNDTIME"
,
timeButton
->
isChecked
()).
toBool
());
timeButton
->
setChecked
(
settings
.
value
(
"ENFORCE_GROUNDTIME"
,
timeButton
->
isChecked
()).
toBool
());
activePlot
->
enforceGroundTime
(
settings
.
value
(
"ENFORCE_GROUNDTIME"
,
timeButton
->
isChecked
()).
toBool
());
activePlot
->
enforceGroundTime
(
settings
.
value
(
"ENFORCE_GROUNDTIME"
,
timeButton
->
isChecked
()).
toBool
());
}
}
if
(
unitsCheckBox
)
unitsCheckBox
->
setChecked
(
settings
.
value
(
"SHOW_UNITS"
).
toBool
());
if
(
unitsCheckBox
)
unitsCheckBox
->
setChecked
(
settings
.
value
(
"SHOW_UNITS"
,
unitsCheckBox
->
isChecked
()).
toBool
());
if
(
ui
.
shortNameCheckBox
)
ui
.
shortNameCheckBox
->
setChecked
(
settings
.
value
(
"SHORT_NAMES"
,
ui
.
shortNameCheckBox
->
isChecked
()).
toBool
());
settings
.
endGroup
();
settings
.
endGroup
();
}
}
...
@@ -280,7 +283,8 @@ void LinechartWidget::createLayout()
...
@@ -280,7 +283,8 @@ void LinechartWidget::createLayout()
connect
(
this
,
SIGNAL
(
curveRemoved
(
QString
)),
activePlot
,
SLOT
(
hideCurve
(
QString
)));
connect
(
this
,
SIGNAL
(
curveRemoved
(
QString
)),
activePlot
,
SLOT
(
hideCurve
(
QString
)));
// Update scrollbar when plot window changes (via translator method setPlotWindowPosition()
// Update scrollbar when plot window changes (via translator method setPlotWindowPosition()
connect
(
activePlot
,
SIGNAL
(
windowPositionChanged
(
quint64
)),
this
,
SLOT
(
setPlotWindowPosition
(
quint64
)));
// connect(activePlot, SIGNAL(windowPositionChanged(quint64)), this, SLOT(setPlotWindowPosition(quint64)));
connect
(
activePlot
,
SIGNAL
(
curveRemoved
(
QString
)),
this
,
SLOT
(
removeCurve
(
QString
)));
// Update plot when scrollbar is moved (via translator method setPlotWindowPosition()
// Update plot when scrollbar is moved (via translator method setPlotWindowPosition()
connect
(
this
,
SIGNAL
(
plotWindowPositionUpdated
(
quint64
)),
activePlot
,
SLOT
(
setWindowPosition
(
quint64
)));
connect
(
this
,
SIGNAL
(
plotWindowPositionUpdated
(
quint64
)),
activePlot
,
SLOT
(
setWindowPosition
(
quint64
)));
...
@@ -614,6 +618,8 @@ void LinechartWidget::addCurve(const QString& curve, const QString& unit)
...
@@ -614,6 +618,8 @@ void LinechartWidget::addCurve(const QString& curve, const QString& unit)
QLabel
*
mean
;
QLabel
*
mean
;
QLabel
*
variance
;
QLabel
*
variance
;
curveNames
.
insert
(
curve
+
unit
,
curve
);
int
labelRow
=
curvesWidgetLayout
->
rowCount
();
int
labelRow
=
curvesWidgetLayout
->
rowCount
();
checkBox
=
new
QCheckBox
(
this
);
checkBox
=
new
QCheckBox
(
this
);
...
@@ -642,6 +648,9 @@ void LinechartWidget::addCurve(const QString& curve, const QString& unit)
...
@@ -642,6 +648,9 @@ void LinechartWidget::addCurve(const QString& curve, const QString& unit)
colorIcon
->
setStyleSheet
(
colorstyle
);
colorIcon
->
setStyleSheet
(
colorstyle
);
colorIcon
->
setAutoFillBackground
(
true
);
colorIcon
->
setAutoFillBackground
(
true
);
// Label
curveNameLabels
.
insert
(
curve
+
unit
,
label
);
// Value
// Value
value
=
new
QLabel
(
this
);
value
=
new
QLabel
(
this
);
value
->
setNum
(
0.00
);
value
->
setNum
(
0.00
);
...
@@ -720,8 +729,96 @@ void LinechartWidget::addCurve(const QString& curve, const QString& unit)
...
@@ -720,8 +729,96 @@ void LinechartWidget::addCurve(const QString& curve, const QString& unit)
void
LinechartWidget
::
removeCurve
(
QString
curve
)
void
LinechartWidget
::
removeCurve
(
QString
curve
)
{
{
Q_UNUSED
(
curve
)
Q_UNUSED
(
curve
)
//TODO @todo Ensure that the button for a curve gets deleted when the original curve is deleted
// Remove name
QWidget
*
widget
=
NULL
;
widget
=
curveLabels
->
take
(
curve
);
curvesWidgetLayout
->
removeWidget
(
widget
);
widget
->
deleteLater
();
widget
=
curveMeans
->
take
(
curve
);
curvesWidgetLayout
->
removeWidget
(
widget
);
widget
->
deleteLater
();
widget
=
curveMedians
->
take
(
curve
);
curvesWidgetLayout
->
removeWidget
(
widget
);
widget
->
deleteLater
();
widget
=
curveVariances
->
take
(
curve
);
curvesWidgetLayout
->
removeWidget
(
widget
);
widget
->
deleteLater
();
// widget = colorIcons->take(curve);
// curvesWidgetLayout->removeWidget(colorIcons->take(curve));
widget
->
deleteLater
();
// intData->remove(curve);
}
void
LinechartWidget
::
recolor
()
{
activePlot
->
shuffleColors
();
foreach
(
QString
key
,
colorIcons
.
keys
())
{
// FIXME
// if (activePlot)
QString
colorstyle
;
QColor
color
=
activePlot
->
getColorForCurve
(
key
);
colorstyle
=
colorstyle
.
sprintf
(
"QWidget { background-color: #%X%X%X; }"
,
color
.
red
(),
color
.
green
(),
color
.
blue
());
QWidget
*
colorIcon
=
colorIcons
.
value
(
key
,
0
);
if
(
colorIcon
)
{
colorIcon
->
setStyleSheet
(
colorstyle
);
colorIcon
->
setAutoFillBackground
(
true
);
}
}
}
void
LinechartWidget
::
setShortNames
(
bool
enable
)
{
foreach
(
QString
key
,
curveNames
.
keys
())
{
QString
name
;
if
(
enable
)
{
QStringList
parts
=
curveNames
.
value
(
key
).
split
(
"."
);
if
(
parts
.
length
()
>
1
)
{
name
=
parts
.
at
(
1
);
}
else
{
name
=
parts
.
at
(
0
);
}
const
unsigned
int
sizeLimit
=
10
;
// Replace known words with abbreviations
if
(
name
.
length
()
>
sizeLimit
)
{
name
.
replace
(
"gyroscope"
,
"gyro"
);
name
.
replace
(
"accelerometer"
,
"acc"
);
name
.
replace
(
"magnetometer"
,
"mag"
);
name
.
replace
(
"distance"
,
"dist"
);
name
.
replace
(
"altitude"
,
"alt"
);
name
.
replace
(
"waypoint"
,
"wp"
);
name
.
replace
(
"error"
,
"err"
);
name
.
replace
(
"message"
,
"msg"
);
name
.
replace
(
"source"
,
"src"
);
}
// Check if sub-part is still exceeding N chars
if
(
name
.
length
()
>
sizeLimit
)
{
name
.
replace
(
"a"
,
""
);
name
.
replace
(
"e"
,
""
);
name
.
replace
(
"i"
,
""
);
name
.
replace
(
"o"
,
""
);
name
.
replace
(
"u"
,
""
);
}
}
else
{
name
=
curveNames
.
value
(
key
);
}
curveNameLabels
.
value
(
key
)
->
setText
(
name
);
}
}
}
void
LinechartWidget
::
showEvent
(
QShowEvent
*
event
)
void
LinechartWidget
::
showEvent
(
QShowEvent
*
event
)
...
...
src/ui/linechart/LinechartWidget.h
View file @
f7cef6a2
...
@@ -73,6 +73,10 @@ public:
...
@@ -73,6 +73,10 @@ public:
public
slots
:
public
slots
:
void
addCurve
(
const
QString
&
curve
,
const
QString
&
unit
);
void
addCurve
(
const
QString
&
curve
,
const
QString
&
unit
);
void
removeCurve
(
QString
curve
);
void
removeCurve
(
QString
curve
);
/** @brief Recolor all curves */
void
recolor
();
/** @brief Set short names for curves */
void
setShortNames
(
bool
enable
);
/** @brief Append data without unit */
/** @brief Append data without unit */
void
appendData
(
int
uasId
,
QString
curve
,
double
data
,
quint64
usec
);
void
appendData
(
int
uasId
,
QString
curve
,
double
data
,
quint64
usec
);
/** @brief Append data with unit */
/** @brief Append data with unit */
...
@@ -130,6 +134,8 @@ protected:
...
@@ -130,6 +134,8 @@ protected:
int
curveListCounter
;
///< Counter of curves in curve list
int
curveListCounter
;
///< Counter of curves in curve list
QList
<
QString
>*
listedCurves
;
///< Curves listed
QList
<
QString
>*
listedCurves
;
///< Curves listed
QMap
<
QString
,
QLabel
*>*
curveLabels
;
///< References to the curve labels
QMap
<
QString
,
QLabel
*>*
curveLabels
;
///< References to the curve labels
QMap
<
QString
,
QLabel
*>
curveNameLabels
;
///< References to the curve labels
QMap
<
QString
,
QString
>
curveNames
;
///< Full curve names
QMap
<
QString
,
QLabel
*>*
curveMeans
;
///< References to the curve means
QMap
<
QString
,
QLabel
*>*
curveMeans
;
///< References to the curve means
QMap
<
QString
,
QLabel
*>*
curveMedians
;
///< References to the curve medians
QMap
<
QString
,
QLabel
*>*
curveMedians
;
///< References to the curve medians
QMap
<
QString
,
QLabel
*>*
curveVariances
;
///< References to the curve variances
QMap
<
QString
,
QLabel
*>*
curveVariances
;
///< References to the curve variances
...
...
src/ui/uas/UASListWidget.cc
View file @
f7cef6a2
...
@@ -114,8 +114,8 @@ void UASListWidget::activeUAS(UASInterface* uas)
...
@@ -114,8 +114,8 @@ void UASListWidget::activeUAS(UASInterface* uas)
void
UASListWidget
::
removeUAS
(
UASInterface
*
uas
)
void
UASListWidget
::
removeUAS
(
UASInterface
*
uas
)
{
{
uasViews
.
remove
(
uas
);
//
uasViews.remove(uas);
listLayout
->
removeWidget
(
uasViews
.
value
(
uas
));
//
listLayout->removeWidget(uasViews.value(uas));
uasViews
.
value
(
uas
)
->
deleteLater
();
//
uasViews.value(uas)->deleteLater();
}
}
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