Synchronize radar screen with own aircraft heading

ref T653
This commit is contained in:
Roland Rossgotterer
2019-07-29 10:54:35 +02:00
committed by Mat Sutcliffe
parent 8c7475f620
commit 6cb5478c5c
3 changed files with 60 additions and 44 deletions

View File

@@ -11,6 +11,7 @@
#include "blackgui/infoarea.h"
#include "blackgui/components/radarcomponent.h"
#include "blackcore/context/contextnetwork.h"
#include "blackcore/context/contextownaircraft.h"
#include "blackmisc/simulation/simulatedaircraft.h"
#include <QtMath>
@@ -50,6 +51,7 @@ namespace BlackGui
connect(ui->gv_RadarView, &CRadarView::radarViewResized, this, &CRadarComponent::fitInView);
connect(ui->gv_RadarView, &CRadarView::zoomEvent, this, &CRadarComponent::changeRangeInSteps);
connect(&m_updateTimer, &QTimer::timeout, this, &CRadarComponent::refreshTargets);
connect(&m_headingTimer, &QTimer::timeout, this, &CRadarComponent::rotateView);
connect(ui->cb_RadarRange, qOverload<int>(&QComboBox::currentIndexChanged), this, &CRadarComponent::changeRangeFromUserSelection);
connect(ui->cb_Callsign, &QCheckBox::toggled, this, &CRadarComponent::refreshTargets);
@@ -61,6 +63,7 @@ namespace BlackGui
prepareScene();
m_updateTimer.start(5000);
m_headingTimer.start(50);
}
CRadarComponent::~CRadarComponent()
@@ -197,6 +200,30 @@ namespace BlackGui
}
}
void CRadarComponent::rotateView()
{
if (sGui->getIContextOwnAircraft())
{
if (isVisibleWidget())
{
int headingDegree = 0;
if (! ui->cb_LockNorth->isChecked())
{
headingDegree = sGui->getIContextOwnAircraft()->getOwnAircraftSituation().getHeading().valueInteger(CAngleUnit::deg());
}
if (m_rotatenAngle != headingDegree)
{
// Rotations are summed up, hence rotate back before applying the new rotation.
// Doing a global transformation reset will not work as it resets also zooming.
ui->gv_RadarView->rotate(-m_rotatenAngle);
ui->gv_RadarView->rotate(headingDegree);
m_rotatenAngle = headingDegree;
}
}
}
}
void CRadarComponent::toggleGrid(bool checked)
{
m_macroGraticule.setVisible(checked);

View File

@@ -49,6 +49,7 @@ namespace BlackGui
void addRadials();
void refreshTargets();
void rotateView();
void toggleGrid(bool checked);
@@ -70,8 +71,10 @@ namespace BlackGui
QPen m_radarTargetPen = { Qt::green, 1 };
qreal m_rangeNM = 10.0;
int m_rotatenAngle = 0;
QTimer m_updateTimer;
QTimer m_headingTimer;
};
} // ns
} // ns

View File

@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>270</width>
<width>342</width>
<height>259</height>
</rect>
</property>
@@ -44,6 +44,13 @@
<property name="bottomMargin">
<number>2</number>
</property>
<item row="1" column="0">
<widget class="QCheckBox" name="cb_LockNorth">
<property name="text">
<string>Lock North</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QCheckBox" name="cb_Heading">
<property name="text">
@@ -54,17 +61,7 @@
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="cb_Grid">
<property name="text">
<string>Grid</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="2">
<item row="0" column="2" colspan="2">
<widget class="QCheckBox" name="cb_Altitude">
<property name="text">
<string>Altitude (FL)</string>
@@ -74,7 +71,7 @@
</property>
</widget>
</item>
<item row="1" column="0">
<item row="1" column="1">
<widget class="QCheckBox" name="cb_GroundSpeed">
<property name="text">
<string>GroundSpeed</string>
@@ -95,34 +92,26 @@
</widget>
</item>
<item row="1" column="2">
<widget class="QFrame" name="fr_Range">
<layout class="QFormLayout" name="fl_Range">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="lbl_Range">
<property name="text">
<string>Range</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="cb_RadarRange"/>
</item>
</layout>
<widget class="QCheckBox" name="cb_Grid">
<property name="text">
<string>Grid</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="2" colspan="2">
<widget class="QComboBox" name="cb_RadarRange"/>
</item>
<item row="2" column="0" colspan="2">
<widget class="QLabel" name="lbl_Range">
<property name="text">
<string>Range</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
@@ -140,11 +129,8 @@
<tabstops>
<tabstop>gv_RadarView</tabstop>
<tabstop>cb_Callsign</tabstop>
<tabstop>cb_Heading</tabstop>
<tabstop>cb_Altitude</tabstop>
<tabstop>cb_GroundSpeed</tabstop>
<tabstop>cb_Grid</tabstop>
<tabstop>cb_RadarRange</tabstop>
</tabstops>
<resources/>
<connections/>