Update VCP display

This commit is contained in:
Dan Paulat 2021-12-22 16:36:04 -06:00
parent 8d55413d03
commit cae04fad37
11 changed files with 113 additions and 5 deletions

View file

@ -6,6 +6,7 @@
#include <scwx/qt/ui/flow_layout.hpp>
#include <scwx/common/characters.hpp>
#include <scwx/common/products.hpp>
#include <scwx/common/vcp.hpp>
#include <QSplitter>
#include <QToolButton>
@ -50,6 +51,7 @@ public:
void UpdateRadarProductSelection(common::RadarProductGroup group,
const std::string& product);
void UpdateRadarProductSettings();
void UpdateVcp();
MainWindow* mainWindow_;
QMapboxGLSettings settings_;
@ -76,6 +78,10 @@ MainWindow::MainWindow(QWidget* parent) :
{
ui->setupUi(this);
ui->vcpLabel->setVisible(false);
ui->vcpValueLabel->setVisible(false);
ui->vcpDescriptionLabel->setVisible(false);
p->ConfigureMapLayout();
// Add Level 2 Products
@ -243,6 +249,7 @@ void MainWindowImpl::ConfigureMapLayout()
{
if (maps_[mapIndex] == activeMap_)
{
UpdateVcp();
UpdateRadarProductSettings();
}
},
@ -270,6 +277,7 @@ void MainWindowImpl::HandleFocusChange(QWidget* focused)
UpdateRadarProductSelection(mapWidget->GetRadarProductGroup(),
mapWidget->GetRadarProductName());
UpdateRadarProductSettings();
UpdateVcp();
}
}
@ -415,6 +423,28 @@ void MainWindowImpl::UpdateRadarProductSettings()
UpdateElevationSelection(currentElevation);
}
void MainWindowImpl::UpdateVcp()
{
uint16_t vcp = activeMap_->GetVcp();
if (vcp != 0)
{
mainWindow_->ui->vcpLabel->setVisible(true);
mainWindow_->ui->vcpValueLabel->setVisible(true);
mainWindow_->ui->vcpDescriptionLabel->setVisible(true);
mainWindow_->ui->vcpValueLabel->setText(QString::number(vcp));
mainWindow_->ui->vcpDescriptionLabel->setText(
tr(common::GetVcpDescription(vcp).c_str()));
}
else
{
mainWindow_->ui->vcpLabel->setVisible(false);
mainWindow_->ui->vcpValueLabel->setVisible(false);
mainWindow_->ui->vcpDescriptionLabel->setVisible(false);
}
}
} // namespace main
} // namespace qt
} // namespace scwx

View file

@ -163,6 +163,19 @@ std::string MapWidget::GetRadarProductName() const
}
}
uint16_t MapWidget::GetVcp() const
{
if (p->context_->radarProductView_ != nullptr)
{
return p->context_->radarProductView_->vcp();
}
else
{
return 0;
}
}
void MapWidget::SelectElevation(float elevation)
{
if (p->context_->radarProductView_ != nullptr)

View file

@ -35,6 +35,7 @@ public:
std::vector<float> GetElevationCuts() const;
common::RadarProductGroup GetRadarProductGroup() const;
std::string GetRadarProductName() const;
uint16_t GetVcp() const;
void SelectElevation(float elevation);
void SelectRadarProduct(common::Level2Product product);

View file

@ -54,6 +54,7 @@ public:
elevationCut_ {},
elevationCuts_ {},
range_ {},
vcp_ {},
sweepTime_ {},
colorTable_ {},
colorTableLut_ {},
@ -94,6 +95,7 @@ public:
float elevationCut_;
std::vector<float> elevationCuts_;
float range_;
uint16_t vcp_;
std::chrono::system_clock::time_point sweepTime_;
@ -173,6 +175,11 @@ std::chrono::system_clock::time_point Level2ProductView::sweep_time() const
return p->sweepTime_;
}
uint16_t Level2ProductView::vcp() const
{
return p->vcp_;
}
const std::vector<float>& Level2ProductView::vertices() const
{
return p->vertices_;
@ -305,7 +312,8 @@ void Level2ProductView::UpdateColorTable()
std::for_each(std::execution::par_unseq,
dataRange.begin(),
dataRange.end(),
[&](uint16_t i) {
[&](uint16_t i)
{
if (i == RANGE_FOLDED)
{
lut[i - *dataRange.begin()] = p->colorTable_->rf_color();
@ -378,6 +386,7 @@ void Level2ProductView::ComputeSweep()
momentData0->data_moment_range_sample_interval() * (gates - 0.5f);
p->sweepTime_ = util::TimePoint(radarData0->modified_julian_date(),
radarData0->collection_time());
p->vcp_ = volumeData0->volume_coverage_pattern_number();
// Calculate vertices
timer.start();

View file

@ -35,6 +35,7 @@ public:
float elevation() const override;
float range() const override;
std::chrono::system_clock::time_point sweep_time() const override;
uint16_t vcp() const override;
const std::vector<float>& vertices() const override;
void LoadColorTable(std::shared_ptr<common::ColorTable> colorTable) override;

View file

@ -32,6 +32,7 @@ public:
virtual float elevation() const;
virtual float range() const;
virtual std::chrono::system_clock::time_point sweep_time() const;
virtual uint16_t vcp() const = 0;
virtual const std::vector<float>& vertices() const = 0;
void Initialize();

View file

@ -0,0 +1,13 @@
#pragma once
#include <string>
namespace scwx
{
namespace common
{
std::string GetVcpDescription(uint16_t vcp);
} // namespace common
} // namespace scwx

View file

@ -157,6 +157,7 @@ public:
float latitude() const;
float longitude() const;
uint16_t volume_coverage_pattern_number() const;
static std::shared_ptr<VolumeDataBlock>
Create(const std::string& dataBlockType,

View file

@ -0,0 +1,32 @@
#include <scwx/common/vcp.hpp>
#include <unordered_map>
namespace scwx
{
namespace common
{
static const std::string CLEAR_AIR_MODE = "Clear Air Mode";
static const std::string PRECIPITATION_MODE = "Precipitation Mode";
std::string GetVcpDescription(uint16_t vcp)
{
switch (vcp)
{
case 31:
case 32:
case 35: return CLEAR_AIR_MODE;
case 12:
case 112:
case 121:
case 212:
case 215: return PRECIPITATION_MODE;
default: return "?";
}
}
} // namespace common
} // namespace scwx

View file

@ -285,6 +285,11 @@ float VolumeDataBlock::longitude() const
return p->longitude_;
}
uint16_t VolumeDataBlock::volume_coverage_pattern_number() const
{
return p->volumeCoveragePatternNumber_;
}
std::shared_ptr<VolumeDataBlock>
VolumeDataBlock::Create(const std::string& dataBlockType,
const std::string& dataName,

View file

@ -6,9 +6,11 @@ set(HDR_COMMON include/scwx/common/characters.hpp
include/scwx/common/color_table.hpp
include/scwx/common/constants.hpp
include/scwx/common/products.hpp
include/scwx/common/types.hpp)
include/scwx/common/types.hpp
include/scwx/common/vcp.hpp)
set(SRC_COMMON source/scwx/common/color_table.cpp
source/scwx/common/products.cpp)
source/scwx/common/products.cpp
source/scwx/common/vcp.cpp)
set(HDR_UTIL include/scwx/util/iterator.hpp
include/scwx/util/rangebuf.hpp
include/scwx/util/streams.hpp