1 #include <QtCore/QFile>
2 #include <QtGui/QPainter>
6 #include "ameterwidget.h"
14 AMeterWidget::AMeterWidget(QWidget *parent)
17 // Reciprocal of gravity
19 r_a_max = 1.0 / a_max;
32 AMeterWidget::~AMeterWidget()
37 int AMeterWidget::setGravity(qreal g)
39 // Reciprocal of gravity
47 void AMeterWidget::paintEvent(QPaintEvent *e)
53 a = sqrt(ax * ax + ay * ay + az * az);
57 paint.drawImage(QPoint(0, 0), *background);
60 paint.setRenderHints(QPainter::Antialiasing);
70 paint.setPen(QPen(QBrush(QColor(255, 255, 255, 255)), 3));
71 paint.setBrush(QBrush(QColor(255, 255, 255, 255)));
72 paint.drawEllipse(QPointF(x1, y1), 3, 3);
73 paint.drawLine(QPointF(cx, cy), QPointF(x1, y1));
76 #define DEG2RAD (M_PI / 180.0)
78 void AMeterWidget::resizeEvent(QResizeEvent *e)
83 void AMeterWidget::drawScale()
86 qreal cx, cy, rx, ry, dx, dy;
88 qreal id = 1.0 / divisions;
97 r_a_max = 1.0 / a_max;
99 background = new QImage(size(), QImage::Format_ARGB32);
100 paint = new QPainter(background);
101 paint->setRenderHints(QPainter::Antialiasing);
115 r = sqrt(cx * cx + cy * cy);
117 paint->setPen(QPen(QBrush(QColor(64, 64, 64, 255)), 3));
119 paint->drawLine(QPointF(cx, 0), QPointF(cx, cy + cy));
120 paint->drawLine(QPointF(0, cy), QPointF(cx + cx, cy));
122 for (i = 0; i * rx < cx; i++)
124 paint->setPen(QPen(QBrush(QColor(64, 64, 64, 255)), 3));
127 paint->drawEllipse(QPointF(cx, cy), rx * i, ry * i);
129 paint->setPen(QPen(QBrush(QColor(64, 64, 64, 255)), 1));
130 for (j = 0; j < divisions; j++)
132 paint->drawEllipse(QPointF(cx, cy), rx * (i + id * j), ry * (i + id * j));
136 for (i = 0; i < 360; i += angle_step)
141 paint->drawLine(QPointF(cx, cy), QPointF(cx + dx, cy + dy));
147 bool AMeterWidget::filter(QAccelerometerReading *reading)
153 ax = reading->x() * r_g;
154 ay = reading->y() * r_g;
155 az = reading->z() * r_g;
157 ax = ax * (1.0 - filter_k) + bx * filter_k;
158 ay = ay * (1.0 - filter_k) + by * filter_k;
159 az = az * (1.0 - filter_k) + bz * filter_k;