5227aff08b3eb2b8e1672d867b7a41f3b3a51c4a
[mardrone] / mardrone / gauges / gaugearc.cpp
1 #include "gaugearc.h"
2
3 #include "gaugetape.h"
4 #include <stdio.h>
5 #include <math.h>
6 #include <qdebug.h>
7
8 GaugeArc::GaugeArc(QGraphicsItem *parent) :
9     Gauge(parent)
10 {
11     QPainterPath scale;
12     int xo=size().width()/2;
13     int yo=size().height()/2;
14
15 #define DR 3.141592653/180.0
16 #if 0
17     for (i = 0; i < 5; i++) {
18         fixo+=QLine(xo+arc0*cos(alpha*DR),yo-arc0*sin(alpha*DR),xo+arc1*cos(alpha*DR),yo-arc1*sin(alpha*DR));
19
20         scale.moveTo(xo+arc0*cos(alpha*DR),yo-arc0*sin(alpha*DR));
21         scale.lineTo(xo+arc1*cos(alpha*DR),yo-arc1*sin(alpha*DR));
22
23         fixo+=QLine(xo+arc0*cos(alpha*DR),yo-arc0*sin(alpha*DR),xo+arc1*cos(alpha*DR),yo-arc1*sin(alpha*DR));
24     };
25 #endif
26 }
27
28
29 void GaugeArc::paintArcScale(QPainter *painter,int width,int height)
30 {
31     float alpha;
32     int xo=(width/2);
33     int yo=(height/2);
34     int arcsize=xo-5;
35      painter->setTransform(QTransform().translate(scenePos().x()+width/2,scenePos().y()+height/2).scale(m_scale,m_scale));
36     QTransform savematrix= painter->transform ();
37     QPen pen(m_color);
38     pen.setWidth(m_lineWidth);
39
40     QPen nopen(Qt::NoPen);
41     QBrush cbrush(m_color);
42     QBrush nbrush(Qt::NoBrush);
43     QBrush backBrush(m_backColor);
44    // QBrush cbrush(m_color);
45     painter->setBrush(cbrush);
46     alpha=m_lowPosition;
47     int val=m_low;
48     painter->setFont(m_font);
49     QFontMetrics fm(m_font);
50     QPolygon needle;
51
52     //painter->setTransform(QTransform().translate(xo+scenePos().x()/m_scale, yo+scenePos().y()/m_scale),true);
53     painter->setBrush(backBrush);
54     painter->setPen(nopen);
55     painter->drawChord(QRect(-xo,-xo,2*xo,2*xo),0,360*16);
56     painter->setBrush(cbrush);
57     painter->setPen(pen);
58     while(alpha<=(m_highPosition<m_lowPosition?m_highPosition+360:m_highPosition)) {
59         QTransform rotT;
60         rotT.rotate(alpha);
61         QString label;
62         label=QString("%1").arg(val);
63         int labelWidth=fm.width(label);
64         int labelHeight=fm.height();
65         painter->setTransform(savematrix);
66         painter->drawArc(-arcsize,-arcsize,2*arcsize,2*arcsize,(int(m_lowPosition+270)%360)*-16,(int(m_highPosition+270)%360)*-16);
67         QPoint labelP=QPoint(0,-xo+15);
68         labelP=rotT.map(labelP);
69         QPoint lineInP=QPoint(0,-xo+2);
70         lineInP=rotT.map(lineInP);
71         QPoint lineOutP=QPoint(0,-xo+12);
72         lineOutP=rotT.map(lineOutP);
73         QPoint labelPo=QPoint(labelWidth*((-1-sin(3.1415926/180*alpha))/2),labelHeight*((1+cos(3.1415926/180*alpha))/2));
74         QPoint labelPd=labelP+labelPo;
75    //      qDebug() << alpha << labelP << labelPd << labelPo << labelWidth << labelHeight;
76         painter->drawText(labelPd,label);
77         painter->drawLine(lineInP,lineOutP);
78         alpha+=m_tickSpacing?m_tickSpacing:10;
79         val+=m_tickIncrement;
80     }
81     needle+=QPoint(-5,0);
82     needle+=QPoint(0,-xo);
83     needle+=QPoint(5,0);
84     needle+=QPoint(-5,0);
85     painter->setTransform(QTransform().rotate(m_lowPosition+(m_value*1.0*m_tickSpacing/m_tickIncrement)),true);
86     painter->drawPolygon(needle);
87 }
88
89 void GaugeArc::paint(QPainter *painter,const QStyleOptionGraphicsItem *option,
90                            QWidget *widget)
91 {
92         paintArcScale(painter,size().width(),size().height());
93     //    paintNeedle(painter,val,size().width(),size().height());
94 };
95