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

View file

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

View file

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

View file

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

View file

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

@ -155,8 +155,9 @@ public:
VolumeDataBlock(VolumeDataBlock&&) noexcept; VolumeDataBlock(VolumeDataBlock&&) noexcept;
VolumeDataBlock& operator=(VolumeDataBlock&&) noexcept; VolumeDataBlock& operator=(VolumeDataBlock&&) noexcept;
float latitude() const; float latitude() const;
float longitude() const; float longitude() const;
uint16_t volume_coverage_pattern_number() const;
static std::shared_ptr<VolumeDataBlock> static std::shared_ptr<VolumeDataBlock>
Create(const std::string& dataBlockType, 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_; return p->longitude_;
} }
uint16_t VolumeDataBlock::volume_coverage_pattern_number() const
{
return p->volumeCoveragePatternNumber_;
}
std::shared_ptr<VolumeDataBlock> std::shared_ptr<VolumeDataBlock>
VolumeDataBlock::Create(const std::string& dataBlockType, VolumeDataBlock::Create(const std::string& dataBlockType,
const std::string& dataName, 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/color_table.hpp
include/scwx/common/constants.hpp include/scwx/common/constants.hpp
include/scwx/common/products.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 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 set(HDR_UTIL include/scwx/util/iterator.hpp
include/scwx/util/rangebuf.hpp include/scwx/util/rangebuf.hpp
include/scwx/util/streams.hpp include/scwx/util/streams.hpp