1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2025-06-27 03:29:16 +02:00

Added missing changes :-)

This commit is contained in:
2016-06-16 20:47:32 +02:00
parent f0c3f9b8c8
commit 1289762365
11 changed files with 231 additions and 126 deletions

View File

@ -49,6 +49,7 @@ GraphView::GraphView(QWidget *parent)
_xScale = 1;
_yScale = 1;
_yOffset = 0;
_precision = 0;
_minYRange = 0.01;
@ -116,16 +117,6 @@ void GraphView::setYUnits(const QString &units)
createYLabel();
}
void GraphView::setXScale(qreal scale)
{
_xScale = scale;
}
void GraphView::setYScale(qreal scale)
{
_yScale = scale;
}
void GraphView::loadData(const QVector<QPointF> &data)
{
QPainterPath path;
@ -182,7 +173,8 @@ void GraphView::redraw(const QSizeF &size)
_graphs.at(i)->resetTransform();
rx = RangeF(_bounds.left() * _xScale, _bounds.right() * _xScale);
ry = RangeF(_bounds.top() * _yScale, _bounds.bottom() * _yScale);
ry = RangeF(_bounds.top() * _yScale + _yOffset, _bounds.bottom() * _yScale
+ _yOffset);
if (ry.size() < _minYRange)
ry.resize(_minYRange);
@ -217,6 +209,8 @@ void GraphView::redraw(const QSizeF &size)
_scene->addItem(_yAxis);
_slider->setArea(r);
if (_sliderPos > _bounds.right() || _sliderPos < _bounds.left())
_slider->setVisible(false);
_slider->setPos((_sliderPos / _bounds.width()) * _slider->area().width(),
r.bottom());
_scene->addItem(_slider);
@ -311,7 +305,7 @@ void GraphView::updateSliderInfo()
{
_sliderInfo->setVisible(_graphs.size() == 1);
if (_graphs.size() != 1)
if (!_slider->isVisible())
return;
const QPainterPath &path = _graphs.at(0)->path();
@ -329,7 +323,8 @@ void GraphView::updateSliderInfo()
_sliderInfo->setSide(s);
_sliderInfo->setPos(QPointF(0, _slider->boundingRect().height() * r));
_sliderInfo->setText(QString::number(-y * _yScale, 'f', _precision));
_sliderInfo->setText(QString::number(-y * _yScale + _yOffset, 'f',
_precision));
}
void GraphView::emitSliderPositionChanged(const QPointF &pos)

View File

@ -47,13 +47,15 @@ public:
const QString &yUnits() const {return _yUnits;}
qreal xScale() const {return _xScale;}
qreal yScale() const {return _yScale;}
qreal yOffset() const {return _yOffset;}
void setXLabel(const QString &label);
void setYLabel(const QString &label);
void setXUnits(const QString &units);
void setYUnits(const QString &units);
void setXScale(qreal scale);
void setYScale(qreal scale);
void setXScale(qreal scale) {_xScale = scale;}
void setYScale(qreal scale) {_yScale = scale;}
void setYOffset(qreal offset) {_yOffset = offset;}
void setSliderPrecision(int precision) {_precision = precision;}
void setMinYRange(qreal range) {_minYRange = range;}
@ -85,6 +87,7 @@ private:
void updateSliderInfo();
qreal _xScale, _yScale;
qreal _yOffset;
QString _xUnits, _yUnits;
QString _xLabel, _yLabel;
int _precision;

View File

@ -28,6 +28,7 @@
#include "elevationgraph.h"
#include "speedgraph.h"
#include "heartrategraph.h"
#include "temperaturegraph.h"
#include "trackview.h"
#include "trackinfo.h"
#include "filebrowser.h"
@ -405,6 +406,8 @@ void GUI::createTrackGraphs()
_speedGraph->setFrameShape(QFrame::NoFrame);
_heartRateGraph = new HeartRateGraph;
_heartRateGraph->setFrameShape(QFrame::NoFrame);
_temperatureGraph = new TemperatureGraph;
_temperatureGraph->setFrameShape(QFrame::NoFrame);
_trackGraphs = new QTabWidget;
connect(_trackGraphs, SIGNAL(currentChanged(int)), this,
@ -420,6 +423,7 @@ void GUI::createTrackGraphs()
_tabs.append(GraphTab(_elevationGraph, tr("Elevation")));
_tabs.append(GraphTab(_speedGraph, tr("Speed")));
_tabs.append(GraphTab(_heartRateGraph, tr("Heart rate")));
_tabs.append(GraphTab(_temperatureGraph, tr("Temperature")));
connect(_elevationGraph, SIGNAL(sliderPositionChanged(qreal)), this,
SLOT(sliderPositionChanged(qreal)));
@ -427,6 +431,8 @@ void GUI::createTrackGraphs()
SLOT(sliderPositionChanged(qreal)));
connect(_heartRateGraph, SIGNAL(sliderPositionChanged(qreal)), this,
SLOT(sliderPositionChanged(qreal)));
connect(_temperatureGraph, SIGNAL(sliderPositionChanged(qreal)), this,
SLOT(sliderPositionChanged(qreal)));
}
void GUI::createStatusBar()
@ -562,6 +568,7 @@ bool GUI::loadFile(const QString &fileName)
_elevationGraph->loadGPX(gpx);
_speedGraph->loadGPX(gpx);
_heartRateGraph->loadGPX(gpx);
_temperatureGraph->loadGPX(gpx);
updateGraphTabs();
_track->setHidden(false);
_track->loadGPX(gpx);
@ -736,6 +743,7 @@ void GUI::reloadFile()
_elevationGraph->clear();
_speedGraph->clear();
_heartRateGraph->clear();
_temperatureGraph->clear();
_track->clear();
_sliderPos = 0;
@ -769,6 +777,7 @@ void GUI::closeFiles()
_elevationGraph->clear();
_speedGraph->clear();
_heartRateGraph->clear();
_temperatureGraph->clear();
_track->clear();
_files.clear();
@ -1003,6 +1012,7 @@ void GUI::setMetricUnits()
_elevationGraph->setUnits(Metric);
_speedGraph->setUnits(Metric);
_heartRateGraph->setUnits(Metric);
_temperatureGraph->setUnits(Metric);
updateStatusBarInfo();
}
@ -1012,6 +1022,7 @@ void GUI::setImperialUnits()
_elevationGraph->setUnits(Imperial);
_speedGraph->setUnits(Imperial);
_heartRateGraph->setUnits(Imperial);
_temperatureGraph->setUnits(Imperial);
updateStatusBarInfo();
}

View File

@ -22,6 +22,7 @@ class GraphView;
class ElevationGraph;
class SpeedGraph;
class HeartRateGraph;
class TemperatureGraph;
class TrackView;
class Map;
@ -158,6 +159,7 @@ private:
ElevationGraph *_elevationGraph;
SpeedGraph *_speedGraph;
HeartRateGraph *_heartRateGraph;
TemperatureGraph *_temperatureGraph;
QList<GraphTab> _tabs;
POI _poi;

View File

@ -7,6 +7,8 @@ void Parser::handleExtensionData(QStringRef element, const QString &value)
_track->last().speed = value.toDouble();
else if (element == "hr" || element == "heartrate")
_track->last().heartRate = value.toDouble();
else if (element == "atemp" || element == "temp")
_track->last().temperature = value.toDouble();
}
void Parser::handleTrekPointData(QStringRef element, const QString &value)
@ -42,7 +44,7 @@ void Parser::handleWayPointAttributes(const QXmlStreamAttributes &attr)
void Parser::tpExtension()
{
while (_reader.readNextStartElement()) {
if (_reader.name() == "hr")
if (_reader.name() == "hr" || _reader.name() == "atemp")
handleExtensionData(_reader.name(), _reader.readElementText());
else
_reader.skipCurrentElement();
@ -53,7 +55,7 @@ void Parser::extensions()
{
while (_reader.readNextStartElement()) {
if (_reader.name() == "speed" || _reader.name() == "hr"
|| _reader.name() == "heartrate")
|| _reader.name() == "heartrate" || _reader.name() == "temp")
handleExtensionData(_reader.name(), _reader.readElementText());
else if (_reader.name() == "TrackPointExtension")
tpExtension();

View File

@ -99,15 +99,13 @@ void Track::elevationGraph(QVector<QPointF> &graph) const
if (!_data.size())
return;
if (!_data.at(0).hasElevation())
return;
raw.append(QPointF(0, _data.at(0).elevation - _data.at(0).geoidheight));
if (_data.at(0).hasElevation())
raw.append(QPointF(0, _data.at(0).elevation - _data.at(0).geoidheight));
for (int i = 1; i < _data.size(); i++) {
dist += _dd.at(i-1);
if (!_data.at(i).hasElevation())
return;
raw.append(QPointF(dist, _data.at(i).elevation
- _data.at(i).geoidheight));
if (_data.at(i).hasElevation())
raw.append(QPointF(dist, _data.at(i).elevation
- _data.at(i).geoidheight));
}
graph = filter(raw, WINDOW_EF);
@ -124,15 +122,18 @@ void Track::speedGraph(QVector<QPointF> &graph) const
raw.append(QPointF(0, 0));
for (int i = 1; i < _data.size(); i++) {
ds = _dd.at(i-1);
dt = _data.at(i-1).timestamp.msecsTo(_data.at(i).timestamp) / 1000.0;
dist += ds;
if (!_data.at(i).hasSpeed()) {
if (_data.at(i).hasSpeed())
v = _data.at(i).speed;
else if (_data.at(i).hasTimestamp()) {
dt = _data.at(i-1).timestamp.msecsTo(_data.at(i).timestamp)
/ 1000.0;
if (dt == 0)
continue;
v = ds / dt;
} else
v = _data.at(i).speed;
continue;
raw.append(QPointF(dist, v));
}
@ -148,19 +149,33 @@ void Track::heartRateGraph(QVector<QPointF> &graph) const
if (!_data.size())
return;
if (!_data.at(0).hasHeartRate())
return;
raw.append(QPointF(0, _data.at(0).heartRate));
if (_data.at(0).hasHeartRate())
raw.append(QPointF(0, _data.at(0).heartRate));
for (int i = 1; i < _data.count(); i++) {
if (!_data.at(i).hasHeartRate())
return;
dist += _dd.at(i-1);
raw.append(QPointF(dist, _data.at(i).heartRate));
if (_data.at(i).hasHeartRate())
raw.append(QPointF(dist, _data.at(i).heartRate));
}
graph = filter(eliminate(raw, WINDOW_HE), WINDOW_HF);
}
void Track::temperatureGraph(QVector<QPointF> &graph) const
{
qreal dist = 0;
if (!_data.size())
return;
if (_data.at(0).hasTemperature())
graph.append(QPointF(0, _data.at(0).temperature));
for (int i = 1; i < _data.size(); i++) {
dist += _dd.at(i-1);
if (_data.at(i).hasTemperature())
graph.append(QPointF(dist, _data.at(i).temperature));
}
}
void Track::track(QVector<QPointF> &track) const
{
for (int i = 0; i < _data.size(); i++)

View File

@ -13,6 +13,7 @@ public:
void elevationGraph(QVector<QPointF> &graph) const;
void speedGraph(QVector<QPointF> &graph) const;
void heartRateGraph(QVector<QPointF> &graph) const;
void temperatureGraph(QVector<QPointF> &graph) const;
void track(QVector<QPointF> &track) const;
qreal distance() const {return _distance;}
qreal time() const;

View File

@ -3,6 +3,7 @@
#include <QPointF>
#include <QDateTime>
#include <QDebug>
#include <cmath>
class Trackpoint
@ -13,11 +14,14 @@ public:
geoidheight = 0;
speed = NAN;
heartRate = NAN;
temperature = NAN;
}
bool hasTimestamp() const {return !timestamp.isNull();}
bool hasElevation() const {return !std::isnan(elevation);}
bool hasSpeed() const {return !std::isnan(speed);}
bool hasHeartRate() const {return !std::isnan(heartRate);}
bool hasTemperature() const {return !std::isnan(temperature);}
QPointF coordinates;
QDateTime timestamp;
@ -25,6 +29,9 @@ public:
qreal geoidheight;
qreal speed;
qreal heartRate;
qreal temperature;
};
QDebug operator<<(QDebug dbg, const Trackpoint &trackpoint);
#endif // TRACKPOINT_H

View File

@ -18,6 +18,9 @@ enum Units {
#define MIINFT 5280 // 1 mi in ft
#define MIINM 1609.344 // 1mi in m
#define C2FS 1.8 // Celsius to Farenheit - scale
#define C2FO 32 // Celsius to Farenheit - offset
#ifdef Q_OS_WIN32
#define UNIT_SPACE QString(" ")
#else // Q_OS_WIN32