draw yaw scale
This commit is contained in:
+1
-1
@@ -22,7 +22,7 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
|
|
||||||
copk = new Cockpit(this);
|
copk = new Cockpit(this);
|
||||||
|
|
||||||
copk->setGeometry(this->width() - copk->width(),0,700,this->height());
|
copk->setGeometry(this->width() - copk->width(),0,900,this->height());
|
||||||
|
|
||||||
|
|
||||||
nav->setGeometry(0,0,50,this->height());
|
nav->setGeometry(0,0,50,this->height());
|
||||||
|
|||||||
+103
-38
@@ -76,7 +76,7 @@ void Cockpit::mousePressEvent(QMouseEvent *e)
|
|||||||
|
|
||||||
m_c = this->pos();
|
m_c = this->pos();
|
||||||
|
|
||||||
setPitch(m_Attitude.pitch + e->x());
|
//setPitch(m_Attitude.pitch + e->x());
|
||||||
|
|
||||||
|
|
||||||
update();
|
update();
|
||||||
@@ -94,7 +94,9 @@ void Cockpit::wheelEvent(QWheelEvent *e)
|
|||||||
setRoll(m_Attitude.roll + e->angleDelta().y()/120.0f);
|
setRoll(m_Attitude.roll + e->angleDelta().y()/120.0f);
|
||||||
setPitch(m_Attitude.pitch + e->angleDelta().y()/120.0f);
|
setPitch(m_Attitude.pitch + e->angleDelta().y()/120.0f);
|
||||||
|
|
||||||
qDebug() << "wheel event" << m_Attitude.roll << m_Attitude.pitch;
|
setYaw(m_Attitude.yaw + e->angleDelta().y()/120.0f);
|
||||||
|
|
||||||
|
qDebug() << "wheel event" << m_Attitude.roll << m_Attitude.pitch << m_Attitude.yaw;
|
||||||
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
@@ -215,7 +217,7 @@ void Cockpit::paintEvent(QPaintEvent *)
|
|||||||
drawPitch(&painter);
|
drawPitch(&painter);
|
||||||
drawRoll(&painter);
|
drawRoll(&painter);
|
||||||
drawRollScale(&painter);
|
drawRollScale(&painter);
|
||||||
//drawYawScale(&painter);
|
drawYawScale(&painter);
|
||||||
//drawScale(&painter);
|
//drawScale(&painter);
|
||||||
//drawCenterLine(&painter);
|
//drawCenterLine(&painter);
|
||||||
//drawText(&painter);
|
//drawText(&painter);
|
||||||
@@ -308,9 +310,9 @@ void Cockpit::drawRoll(QPainter *painter)
|
|||||||
|
|
||||||
//画紫色小三角形
|
//画紫色小三角形
|
||||||
static const QPointF points1[3] = {
|
static const QPointF points1[3] = {
|
||||||
QPointF(-50,-620),
|
QPointF(-30,-630),
|
||||||
QPointF(0,-690),
|
QPointF(0,-690),
|
||||||
QPointF(50,-620)
|
QPointF(30,-630)
|
||||||
};
|
};
|
||||||
|
|
||||||
pen.setWidth(1);
|
pen.setWidth(1);
|
||||||
@@ -322,9 +324,9 @@ void Cockpit::drawRoll(QPainter *painter)
|
|||||||
|
|
||||||
//画白色小三角形
|
//画白色小三角形
|
||||||
static const QPointF points2[3] = {
|
static const QPointF points2[3] = {
|
||||||
QPointF(-50,-800),
|
QPointF(-30,-770),
|
||||||
QPointF(0,-710),
|
QPointF(0,-710),
|
||||||
QPointF(50,-800)
|
QPointF(30,-770)
|
||||||
};
|
};
|
||||||
|
|
||||||
pen.setWidth(1);
|
pen.setWidth(1);
|
||||||
@@ -411,19 +413,19 @@ void Cockpit::drawRollScale(QPainter *painter)
|
|||||||
|
|
||||||
if((i%10) == 0)
|
if((i%10) == 0)
|
||||||
{
|
{
|
||||||
if(i!=0){
|
if((i!=0)&&(i != 20)){
|
||||||
painter->drawLine(-290,i * h,290,i * h);
|
painter->drawLine(-290,i * h,290,i * h);
|
||||||
painter->drawText(-380,i * h + 30, strText);//减去字体的一半
|
painter->drawText(-380,i * h + 30, strText);//减去字体的一半
|
||||||
painter->drawText( 300,i * h + 30, strText);
|
painter->drawText( 300,i * h + 30, strText);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
else if((i%5) == 0)
|
else if((i%5) == 0)
|
||||||
{
|
{
|
||||||
painter->drawLine(-100,i * h,100,i * h);
|
painter->drawLine(-100,i * h,100,i * h);
|
||||||
painter->drawText(-180,i * h+ 30, strText);
|
//painter->drawText(-180,i * h+ 30, strText);
|
||||||
painter->drawText( 110,i * h+ 30, strText);
|
//painter->drawText( 110,i * h+ 30, strText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -442,47 +444,110 @@ void Cockpit::drawYawScale(QPainter *painter)
|
|||||||
|
|
||||||
painter->save();
|
painter->save();
|
||||||
|
|
||||||
//绘制Yaw
|
QPen ePen;
|
||||||
QPen pen;
|
//平移坐标
|
||||||
pen.setWidth(10);
|
painter->translate(0,950);
|
||||||
pen.setColor(Qt::black);
|
|
||||||
painter->setPen(pen);
|
|
||||||
|
|
||||||
//计算出Yaw的范围
|
painter->save();
|
||||||
float YawLimitMin,YawLimitMax;
|
//画一个半透明的基础圆
|
||||||
YawLimitMin = m_YawValue - 60;
|
painter->setOpacity(0.3f);
|
||||||
if(YawLimitMin < 0)YawLimitMin += 360;
|
ePen.setColor(QColor("#7A7A7A"));
|
||||||
|
painter->setBrush(QColor("#7A7A7A"));
|
||||||
|
painter->drawEllipse(-500,-500,1000,1000);
|
||||||
|
painter->restore();
|
||||||
|
|
||||||
YawLimitMax = m_YawValue + 60;
|
painter->save();
|
||||||
if(YawLimitMin > 360)YawLimitMin -= 360;
|
//画一个顶部三角形
|
||||||
|
painter->setOpacity(1.0f);
|
||||||
|
|
||||||
int CurrentYaw = m_YawValue;
|
static const QPointF points[3] = {
|
||||||
CurrentYaw = CurrentYaw/10;//0~35
|
QPointF(-30,-560),
|
||||||
|
QPointF(0,-500),
|
||||||
|
QPointF(30,-560)
|
||||||
|
};
|
||||||
|
|
||||||
|
ePen.setWidth(1);
|
||||||
|
ePen.setColor(m_CurrentColor);
|
||||||
|
painter->setPen(ePen);
|
||||||
|
painter->setBrush(m_CurrentColor);
|
||||||
|
painter->drawPolygon(points,3);
|
||||||
|
|
||||||
|
painter->restore();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ePen.setColor(m_CentreLineColor);
|
||||||
|
ePen.setWidth(10);
|
||||||
QFont font;
|
QFont font;
|
||||||
font.setPixelSize(150);
|
font.setPointSize(60);
|
||||||
|
|
||||||
|
painter->setPen(ePen);
|
||||||
painter->setFont(font);
|
painter->setFont(font);
|
||||||
|
|
||||||
QString str;
|
//旋转
|
||||||
|
painter->rotate(m_Attitude.yaw);
|
||||||
|
//画刻度
|
||||||
|
|
||||||
for(int i = YawLimitMin; i <= YawLimitMax; i+=5)
|
for(int i=0;i<72;i++)
|
||||||
{
|
{
|
||||||
if(i%90 == 0)
|
painter->save();
|
||||||
{
|
|
||||||
switch(i)
|
|
||||||
{
|
|
||||||
case 0 :{ str = "N"; }break;
|
|
||||||
case 90 :{ str = "E"; }break;
|
|
||||||
case 180 :{ str = "S"; }break;
|
|
||||||
case 270 :{ str = "W"; }break;
|
|
||||||
|
|
||||||
}
|
painter->setOpacity(1.0f);
|
||||||
}
|
|
||||||
|
painter->translate(0,0);
|
||||||
|
painter->rotate(i * 5.0f);
|
||||||
|
if((i%2) == 0)
|
||||||
|
painter->drawLine(0,-500,0,-460);
|
||||||
else
|
else
|
||||||
|
painter->drawLine(0,-500,0,-480);
|
||||||
|
|
||||||
|
if((i%6) == 0)
|
||||||
{
|
{
|
||||||
painter->drawLine((i - m_YawValue)*10,-900, (i - m_YawValue)*10, -850);
|
|
||||||
|
if((i == 0)||(i == 18)||(i == 36)||(i == 54))
|
||||||
|
{
|
||||||
|
switch (i) {
|
||||||
|
case 0:
|
||||||
|
painter->drawText( -20,-380, "N");
|
||||||
|
break;
|
||||||
|
case 18:
|
||||||
|
painter->drawText( -20,-380, "E");
|
||||||
|
break;
|
||||||
|
case 36:
|
||||||
|
painter->drawText( -20,-380, "S");
|
||||||
|
break;
|
||||||
|
case 54:
|
||||||
|
painter->drawText( -20,-380, "W");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QString strText = QString::number(qAbs(i/2));
|
||||||
|
|
||||||
|
|
||||||
|
if(strText.length() > 1)
|
||||||
|
{
|
||||||
|
painter->drawText( -40,-380, strText);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
painter->drawText( -20,-380, strText);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
painter->restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
painter->restore();
|
painter->restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user