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
c6e9ece0
Commit
c6e9ece0
authored
Jun 06, 2010
by
pixhawk
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Prepared horizontal situation indicator display
parent
ee0616c9
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
251 additions
and
0 deletions
+251
-0
HSIDisplay.cc
src/ui/HSIDisplay.cc
+186
-0
HSIDisplay.h
src/ui/HSIDisplay.h
+65
-0
No files found.
src/ui/HSIDisplay.cc
0 → 100644
View file @
c6e9ece0
/*=====================================================================
PIXHAWK Micro Air Vehicle Flying Robotics Toolkit
(c) 2009, 2010 PIXHAWK PROJECT <http://pixhawk.ethz.ch>
This file is part of the PIXHAWK project
PIXHAWK is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
PIXHAWK is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with PIXHAWK. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
/**
* @file
* @brief Implementation of Horizontal Situation Indicator class
*
* @author Lorenz Meier <mavteam@student.ethz.ch>
*
*/
#include <QFile>
#include <QStringList>
#include "UASManager.h"
#include "HSIDisplay.h"
#include "MG.h"
#include <QDebug>
HSIDisplay
::
HSIDisplay
(
QStringList
*
plotList
,
QWidget
*
parent
)
:
HDDisplay
(
plotList
,
parent
),
{
}
void
HSIDisplay
::
paintDisplay
()
{
quint64
refreshInterval
=
100
;
quint64
currTime
=
MG
::
TIME
::
getGroundTimeNow
();
if
(
currTime
-
lastPaintTime
<
refreshInterval
)
{
// FIXME Need to find the source of the spurious paint events
//return;
}
lastPaintTime
=
currTime
;
// Draw instruments
// TESTING THIS SHOULD BE MOVED INTO A QGRAPHICSVIEW
// Update scaling factor
// adjust scaling to fit both horizontally and vertically
scalingFactor
=
this
->
width
()
/
vwidth
;
double
scalingFactorH
=
this
->
height
()
/
vheight
;
if
(
scalingFactorH
<
scalingFactor
)
scalingFactor
=
scalingFactorH
;
QPainter
painter
(
this
);
painter
.
setRenderHint
(
QPainter
::
Antialiasing
,
true
);
painter
.
setRenderHint
(
QPainter
::
HighQualityAntialiasing
,
true
);
painter
.
fillRect
(
QRect
(
0
,
0
,
width
(),
height
()),
backgroundColor
);
const
int
columns
=
3
;
const
float
spacing
=
0.4
f
;
// 40% of width
const
float
gaugeWidth
=
vwidth
/
(((
float
)
columns
)
+
(((
float
)
columns
+
1
)
*
spacing
+
spacing
*
0.1
f
));
const
QColor
gaugeColor
=
QColor
(
200
,
200
,
200
);
//drawSystemIndicator(10.0f-gaugeWidth/2.0f, 20.0f, 10.0f, 40.0f, 15.0f, &painter);
//drawGauge(15.0f, 15.0f, gaugeWidth/2.0f, 0, 1.0f, "thrust", values.value("thrust", 0.0f), gaugeColor, &painter, qMakePair(0.45f, 0.8f), qMakePair(0.8f, 1.0f), true);
//drawGauge(15.0f+gaugeWidth*1.7f, 15.0f, gaugeWidth/2.0f, 0, 10.0f, "altitude", values.value("altitude", 0.0f), gaugeColor, &painter, qMakePair(1.0f, 2.5f), qMakePair(0.0f, 0.5f), true);
// Left spacing from border / other gauges, measured from left edge to center
// float leftSpacing = gaugeWidth * spacing;
// float xCoord = leftSpacing + gaugeWidth/2.0f;
//
// float topSpacing = leftSpacing;
// float yCoord = topSpacing + gaugeWidth/2.0f;
//
// for (int i = 0; i < acceptList->size(); ++i)
// {
// QString value = acceptList->at(i);
// drawGauge(xCoord, yCoord, gaugeWidth/2.0f, minValues.value(value, -1.0f), maxValues.value(value, 1.0f), value, values.value(value, minValues.value(value, 0.0f)), gaugeColor, &painter, goodRanges.value(value, qMakePair(0.0f, 0.5f)), critRanges.value(value, qMakePair(0.7f, 1.0f)), true);
// xCoord += gaugeWidth + leftSpacing;
// // Move one row down if necessary
// if (xCoord + gaugeWidth > vwidth)
// {
// yCoord += topSpacing + gaugeWidth;
// xCoord = leftSpacing + gaugeWidth/2.0f;
// }
// }
}
/**
*
* @param uas the UAS/MAV to monitor/display with the HUD
*/
void
HSIDisplay
::
setActiveUAS
(
UASInterface
*
uas
)
{
HDDisplay
::
setActiveUAS
(
uas
);
//qDebug() << "ATTEMPTING TO SET UAS";
if
(
this
->
uas
!=
NULL
&&
this
->
uas
!=
uas
)
{
// Disconnect any previously connected active MAV
//disconnect(uas, SIGNAL(valueChanged(UASInterface*,QString,double,quint64)), this, SLOT(updateValue(UASInterface*,QString,double,quint64)));
}
// Now connect the new UAS
//if (this->uas != uas)
// {
//qDebug() << "UAS SET!" << "ID:" << uas->getUASID();
// Setup communication
//connect(uas, SIGNAL(valueChanged(UASInterface*,QString,double,quint64)), this, SLOT(updateValue(UASInterface*,QString,double,quint64)));
//}
}
void
HSIDisplay
::
drawGPS
()
{
}
void
HSIDisplay
::
drawObjects
()
{
}
void
HSIDisplay
::
drawBaseLines
(
float
xRef
,
float
yRef
,
float
radius
,
float
yaw
,
const
QColor
&
color
,
QPainter
*
painter
,
bool
solid
)
{
// Draw the circle
QPen
circlePen
(
Qt
::
SolidLine
);
if
(
!
solid
)
circlePen
.
setStyle
(
Qt
::
DotLine
);
circlePen
.
setWidth
(
refLineWidthToPen
(
0.5
f
));
circlePen
.
setColor
(
defaultColor
);
painter
->
setBrush
(
Qt
::
NoBrush
);
painter
->
setPen
(
circlePen
);
drawCircle
(
xRef
,
yRef
,
radius
,
200.0
f
,
color
,
painter
);
//drawCircle(xRef, yRef, radius, 200.0f, 170.0f, 1.0f, color, painter);
QString
label
;
label
.
sprintf
(
"%05.1f"
,
value
);
// Draw the value
paintText
(
label
,
color
,
4.5
f
,
xRef
-
7.5
f
,
yRef
-
2.0
f
,
painter
);
// Draw the needle
// Scale the rotation so that the gauge does one revolution
// per max. change
const
float
rangeScale
=
(
2.0
f
*
M_PI
);
const
float
maxWidth
=
radius
/
10.0
f
;
const
float
minWidth
=
maxWidth
*
0.3
f
;
QPolygonF
p
(
6
);
p
.
replace
(
0
,
QPointF
(
xRef
-
maxWidth
/
2.0
f
,
yRef
-
radius
*
0.5
f
));
p
.
replace
(
1
,
QPointF
(
xRef
-
minWidth
/
2.0
f
,
yRef
-
radius
*
0.9
f
));
p
.
replace
(
2
,
QPointF
(
xRef
+
minWidth
/
2.0
f
,
yRef
-
radius
*
0.9
f
));
p
.
replace
(
3
,
QPointF
(
xRef
+
maxWidth
/
2.0
f
,
yRef
-
radius
*
0.5
f
));
p
.
replace
(
4
,
QPointF
(
xRef
,
yRef
-
radius
*
0.46
f
));
p
.
replace
(
5
,
QPointF
(
xRef
-
maxWidth
/
2.0
f
,
yRef
-
radius
*
0.5
f
));
rotatePolygonClockWiseRad
(
p
,
yaw
*
rangeScale
,
QPointF
(
xRef
,
yRef
));
QBrush
indexBrush
;
indexBrush
.
setColor
(
defaultColor
);
indexBrush
.
setStyle
(
Qt
::
SolidPattern
);
painter
->
setPen
(
Qt
::
SolidLine
);
painter
->
setPen
(
defaultColor
);
painter
->
setBrush
(
indexBrush
);
drawPolygon
(
p
,
painter
);
}
void
HDDisplay
::
changeEvent
(
QEvent
*
e
)
{
QWidget
::
changeEvent
(
e
);
switch
(
e
->
type
())
{
case
QEvent
:
:
LanguageChange
:
m_ui
->
retranslateUi
(
this
);
break
;
default:
break
;
}
}
src/ui/HSIDisplay.h
0 → 100644
View file @
c6e9ece0
/*=====================================================================
PIXHAWK Micro Air Vehicle Flying Robotics Toolkit
(c) 2009, 2010 PIXHAWK PROJECT <http://pixhawk.ethz.ch>
This file is part of the PIXHAWK project
PIXHAWK is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
PIXHAWK is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with PIXHAWK. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
/**
* @file
* @brief Definition of of Horizontal Situation Indicator class
*
* @author Lorenz Meier <mavteam@student.ethz.ch>
*
*/
#ifndef HSIDISPLAY_H
#define HSIDISPLAY_H
#include <QtGui/QWidget>
#include <QColor>
#include <QTimer>
#include <QMap>
#include <QPair>
#include <cmath>
#include "HDDisplay.h"
class
HSIDisplay
:
public
HDDisplay
{
Q_OBJECT
public:
HSIDisplay
(
QStringList
*
plotList
,
QWidget
*
parent
=
0
);
~
HSIDisplay
();
public
slots
:
void
setActiveUAS
(
UASInterface
*
uas
);
protected
slots
:
void
paintDisplay
();
void
drawGPS
();
void
drawObjects
();
void
drawBaseLines
(
float
xRef
,
float
yRef
,
float
radius
,
float
yaw
,
const
QColor
&
color
,
QPainter
*
painter
,
bool
solid
);
protected:
private:
};
#endif // HSIDISPLAY_H
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