1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2024-11-28 05:34:47 +01:00
GPXSee/src/data/graph.h

84 lines
1.6 KiB
C
Raw Normal View History

2016-09-19 00:55:03 +02:00
#ifndef GRAPH_H
#define GRAPH_H
2019-02-11 23:28:08 +01:00
#include <QList>
2016-09-19 00:55:03 +02:00
#include <QVector>
2016-11-05 20:00:14 +01:00
#include <QDebug>
2016-09-19 23:35:04 +02:00
#include <cmath>
2016-09-19 00:55:03 +02:00
2016-09-19 23:35:04 +02:00
enum GraphType {Distance, Time};
class GraphPoint
2016-09-19 00:55:03 +02:00
{
public:
2016-09-19 23:35:04 +02:00
GraphPoint(qreal s = NAN, qreal t = NAN, qreal y = NAN)
: _s(s), _t(t), _y(y) {}
qreal s() const {return _s;}
qreal t() const {return _t;}
qreal y() const {return _y;}
qreal x(GraphType type) const {return (type == Distance) ? _s : _t;}
2016-09-19 00:55:03 +02:00
2016-09-19 23:35:04 +02:00
void setS(qreal s) {_s = s;}
void setT(qreal t) {_t = t;}
void setY(qreal y) {_y = y;}
private:
qreal _s;
qreal _t;
qreal _y;
2016-09-19 00:55:03 +02:00
};
2016-11-05 20:00:14 +01:00
Q_DECLARE_TYPEINFO(GraphPoint, Q_PRIMITIVE_TYPE);
2017-11-26 18:54:03 +01:00
#ifndef QT_NO_DEBUG
2017-11-26 18:54:03 +01:00
inline QDebug operator<<(QDebug dbg, const GraphPoint &point)
{
dbg.nospace() << "GraphPoint(" << point.s() << ", " << point.t() << ", "
<< point.y() << ")";
return dbg.space();
}
#endif // QT_NO_DEBUG
2016-11-05 20:00:14 +01:00
2019-02-11 23:28:08 +01:00
typedef QVector<GraphPoint> GraphSegment;
class Graph : public QList<GraphSegment>
2019-01-31 01:46:53 +01:00
{
public:
2019-02-11 23:28:08 +01:00
bool isValid() const
{
if (isEmpty())
return false;
for (int i = 0; i < size(); i++)
if (at(i).size() < 2)
return false;
return true;
}
2019-02-11 23:28:08 +01:00
bool hasTime() const
{
for (int i = 0; i < size(); i++) {
const GraphSegment &segment = at(i);
for (int j = 0; j < segment.size(); j++)
if (std::isnan(segment.at(j).t()))
return false;
}
return true;
}
2019-01-31 01:46:53 +01:00
};
2016-09-19 23:35:04 +02:00
class GraphPair
{
public:
GraphPair(const Graph &primary, const Graph &secondary)
: _primary(primary), _secondary(secondary) {}
const Graph &primary() const {return _primary;}
const Graph &secondary() const {return _secondary;}
private:
Graph _primary, _secondary;
};
2016-09-19 00:55:03 +02:00
#endif // GRAPH_H