source: ntrip/trunk/BNC/src/rinex/availplot.cpp@ 4596

Last change on this file since 4596 was 4596, checked in by mervart, 12 years ago
File size: 3.3 KB
Line 
1
2#include <qwt_plot_curve.h>
3#include <qwt_scale_draw.h>
4#include <qwt_text.h>
5
6#include "availplot.h"
7#include "reqcanalyze.h"
8
9//
10//////////////////////////////////////////////////////////////////////////////
11class t_scaleDrawTime : public QwtScaleDraw {
12 public:
13 t_scaleDrawTime() {}
14 virtual QwtText label(double mjd) const {
15 bncTime epoTime; epoTime.setmjd(mjd);
16 return QwtText(epoTime.timestr(0,':').c_str());
17 }
18};
19
20//
21//////////////////////////////////////////////////////////////////////////////
22class t_scaleDrawPrn : public QwtScaleDraw {
23 public:
24 t_scaleDrawPrn() {}
25 virtual QwtText label(double iPrn) const {
26 return _yLabels[iPrn];
27 }
28 QMap<int, QString> _yLabels;
29};
30
31// Constructor
32//////////////////////////////////////////////////////////////////////////////
33t_availPlot::t_availPlot(QWidget* parent,
34 QMap<QString, t_availData>* availDataMap)
35: QwtPlot(parent) {
36
37 setCanvasBackground(QColor(Qt::white));
38
39 // Axes
40 // ----
41 setAxisScaleDraw(QwtPlot::xBottom, new t_scaleDrawTime());
42 setAxisLabelRotation(QwtPlot::xBottom, -10.0);
43 setAxisLabelAlignment(QwtPlot::xBottom, Qt::AlignLeft | Qt::AlignBottom);
44
45 t_scaleDrawPrn* scaleDrawPrn = new t_scaleDrawPrn();
46 setAxisScaleDraw(QwtPlot::yLeft, scaleDrawPrn);
47
48 // Symbols
49 // -------
50 QwtSymbol* symbolGreen = new QwtSymbol(QwtSymbol::Rect, QBrush(Qt::green),
51 QPen(Qt::green), QSize(2,2));
52 QwtSymbol* symbolBlue = new QwtSymbol(QwtSymbol::Rect, QBrush(Qt::blue),
53 QPen(Qt::blue), QSize(2,2));
54
55 // Curves
56 // ------
57 int iC = 0;
58 QMapIterator<QString, t_availData > it(*availDataMap);
59 while (it.hasNext()) {
60 it.next();
61 ++iC;
62 const QString& prn = it.key();
63 const t_availData& availData = it.value();
64
65 scaleDrawPrn->_yLabels[iC] = prn;
66
67 double eps = 0.1;
68
69 // L1 ok Curve
70 // -----------
71 if (availData._L1ok.size()) {
72 const QVector<double>& xData = availData._L1ok;
73 QVector<double> yData(xData.size(), double(iC)+eps);
74 addCurve(prn, symbolGreen, xData, yData);
75 }
76
77 // L2 ok Curve
78 // -----------
79 if (availData._L2ok.size()) {
80 const QVector<double>& xData = availData._L2ok;
81 QVector<double> yData(xData.size(), double(iC)-eps);
82 addCurve(prn, symbolGreen, xData, yData);
83 }
84 }
85
86 QList<double> ticks[QwtScaleDiv::NTickTypes];
87 QList<double> &majorTicks = ticks[QwtScaleDiv::MajorTick];
88 QMapIterator<int, QString> itT(scaleDrawPrn->_yLabels);
89 while (itT.hasNext()) {
90 itT.next();
91 majorTicks << double(itT.key());
92 }
93 QwtScaleDiv yScaleDiv(majorTicks.first()-0.5, majorTicks.last()+0.5, ticks );
94 setAxisScaleDiv(QwtPlot::yLeft, yScaleDiv);
95
96 // Important !!!
97 // -------------
98 replot();
99}
100
101// Add Curve
102//////////////////////////////////////////////////////////////////////////////
103void t_availPlot::addCurve(const QString& name, const QwtSymbol* symbol,
104 const QVector<double>& xData,
105 const QVector<double>& yData) {
106 QwtPlotCurve* curve = new QwtPlotCurve(name);
107 curve->setSymbol(symbol);
108 curve->setStyle(QwtPlotCurve::NoCurve);
109 curve->setXAxis(QwtPlot::xBottom);
110 curve->setYAxis(QwtPlot::yLeft);
111 curve->setSamples(xData, yData);
112 curve->attach(this);
113}
Note: See TracBrowser for help on using the repository browser.