From 732a7e233c97465a6ae50c6747fec2e82d72f591 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Fri, 8 Apr 2022 16:23:16 -0500 Subject: [PATCH] Select level 3 radar products --- scwx-qt/source/scwx/qt/main/main_window.cpp | 5 +- scwx-qt/source/scwx/qt/map/map_widget.cpp | 74 +++++++++++++++++++-- scwx-qt/source/scwx/qt/map/map_widget.hpp | 6 +- scwx-qt/ts/scwx_en_US.ts | 2 +- 4 files changed, 74 insertions(+), 13 deletions(-) diff --git a/scwx-qt/source/scwx/qt/main/main_window.cpp b/scwx-qt/source/scwx/qt/main/main_window.cpp index 2296ba10..e6661f83 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.cpp +++ b/scwx-qt/source/scwx/qt/main/main_window.cpp @@ -252,10 +252,7 @@ void MainWindow::on_actionOpen_triggered() if (record != nullptr) { - currentMap->SelectRadarProduct(record->radar_id(), - record->radar_product_group(), - record->radar_product(), - record->time()); + currentMap->SelectRadarProduct(record); } else { diff --git a/scwx-qt/source/scwx/qt/map/map_widget.cpp b/scwx-qt/source/scwx/qt/map/map_widget.cpp index ea74998b..1e4d680e 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.cpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.cpp @@ -293,11 +293,22 @@ void MapWidget::SelectRadarProduct(common::Level2Product product) } } -void MapWidget::SelectRadarProduct(const std::string& radarId, - common::RadarProductGroup group, - const std::string& product, - std::chrono::system_clock::time_point time) +void MapWidget::SelectRadarProduct( + std::shared_ptr record) { + const std::string radarId = record->radar_id(); + common::RadarProductGroup group = record->radar_product_group(); + const std::string product = record->radar_product(); + std::chrono::system_clock::time_point time = record->time(); + + int16_t productCode = 0; + + std::shared_ptr level3File = record->level3_file(); + if (level3File != nullptr && level3File->message() != nullptr) + { + productCode = level3File->message()->header().message_code(); + } + BOOST_LOG_TRIVIAL(debug) << logPrefix_ << "SelectRadarProduct(" << radarId << ", " << common::GetRadarProductGroupName(group) << ", " << product << ", " @@ -313,6 +324,61 @@ void MapWidget::SelectRadarProduct(const std::string& radarId, SelectRadarProduct(level2Product); } + else + { + // TODO: Combine this with the SelectRadarProduct(Level2Product) function + std::shared_ptr& radarProductView = + p->context_->radarProductView_; + + radarProductView = view::RadarProductViewFactory::Create( + group, product, 0.0f, p->radarProductManager_); + radarProductView->SelectTime(p->selectedTime_); + + connect( + radarProductView.get(), + &view::RadarProductView::ColorTableUpdated, + this, + [&]() { update(); }, + Qt::QueuedConnection); + connect( + radarProductView.get(), + &view::RadarProductView::SweepComputed, + this, + [&]() + { + std::shared_ptr radarSite = + p->radarProductManager_->radar_site(); + + RadarRangeLayer::Update( + p->map_, + radarProductView->range(), + {radarSite->latitude(), radarSite->longitude()}); + update(); + emit RadarSweepUpdated(); + }, + Qt::QueuedConnection); + + util::async( + [=]() + { + std::string colorTableFile = + manager::SettingsManager::palette_settings()->palette( + common::GetLevel3Palette(productCode)); + if (!colorTableFile.empty()) + { + std::shared_ptr colorTable = + common::ColorTable::Load(colorTableFile); + radarProductView->LoadColorTable(colorTable); + } + + radarProductView->Initialize(); + }); + + if (p->map_ != nullptr) + { + AddLayers(); + } + } } void MapWidget::SetActive(bool isActive) diff --git a/scwx-qt/source/scwx/qt/map/map_widget.hpp b/scwx-qt/source/scwx/qt/map/map_widget.hpp index 774b34fd..99d1d8e7 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.hpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include @@ -40,10 +41,7 @@ public: void SelectElevation(float elevation); void SelectRadarProduct(common::Level2Product product); - void SelectRadarProduct(const std::string& radarId, - common::RadarProductGroup group, - const std::string& product, - std::chrono::system_clock::time_point time); + void SelectRadarProduct(std::shared_ptr record); void SetActive(bool isActive); void SetMapParameters(double latitude, double longitude, diff --git a/scwx-qt/ts/scwx_en_US.ts b/scwx-qt/ts/scwx_en_US.ts index 81bfc6e2..030a9249 100644 --- a/scwx-qt/ts/scwx_en_US.ts +++ b/scwx-qt/ts/scwx_en_US.ts @@ -102,7 +102,7 @@ scwx::qt::main::MainWindow - + Unrecognized NEXRAD Product: