mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 21:10:04 +00:00
Update VCP display
This commit is contained in:
parent
8d55413d03
commit
cae04fad37
11 changed files with 113 additions and 5 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
13
wxdata/include/scwx/common/vcp.hpp
Normal file
13
wxdata/include/scwx/common/vcp.hpp
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace scwx
|
||||||
|
{
|
||||||
|
namespace common
|
||||||
|
{
|
||||||
|
|
||||||
|
std::string GetVcpDescription(uint16_t vcp);
|
||||||
|
|
||||||
|
} // namespace common
|
||||||
|
} // namespace scwx
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
32
wxdata/source/scwx/common/vcp.cpp
Normal file
32
wxdata/source/scwx/common/vcp.cpp
Normal 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
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue