From a8132ef9f152b982915e19a664090053f772991c Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Mon, 2 Dec 2024 23:08:32 -0600 Subject: [PATCH] Allow selection of radar smoothing --- scwx-qt/source/scwx/qt/main/main_window.cpp | 16 ++++++++++++++ scwx-qt/source/scwx/qt/main/main_window.ui | 11 ++++++++-- scwx-qt/source/scwx/qt/map/map_widget.cpp | 21 ++++++++++++++++++- scwx-qt/source/scwx/qt/map/map_widget.hpp | 2 ++ .../scwx/qt/view/level2_product_view.cpp | 9 +++++--- .../scwx/qt/view/radar_product_view.cpp | 11 ++++++++++ .../scwx/qt/view/radar_product_view.hpp | 2 ++ 7 files changed, 66 insertions(+), 6 deletions(-) diff --git a/scwx-qt/source/scwx/qt/main/main_window.cpp b/scwx-qt/source/scwx/qt/main/main_window.cpp index 37b8b268..e21484c4 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.cpp +++ b/scwx-qt/source/scwx/qt/main/main_window.cpp @@ -322,6 +322,8 @@ MainWindow::MainWindow(QWidget* parent) : p->mapSettingsGroup_ = new ui::CollapsibleGroup(tr("Map Settings"), this); p->mapSettingsGroup_->GetContentsLayout()->addWidget(ui->mapStyleLabel); p->mapSettingsGroup_->GetContentsLayout()->addWidget(ui->mapStyleComboBox); + p->mapSettingsGroup_->GetContentsLayout()->addWidget( + ui->smoothRadarDataCheckBox); p->mapSettingsGroup_->GetContentsLayout()->addWidget( ui->trackLocationCheckBox); ui->radarToolboxScrollAreaContents->layout()->replaceWidget( @@ -1085,6 +1087,16 @@ void MainWindowImpl::ConnectOtherSignals() } } }); + connect(mainWindow_->ui->smoothRadarDataCheckBox, + &QCheckBox::checkStateChanged, + mainWindow_, + [this](Qt::CheckState state) + { + bool smoothingEnabled = (state == Qt::CheckState::Checked); + + // Turn on smoothing + activeMap_->SetSmoothingEnabled(smoothingEnabled); + }); connect(mainWindow_->ui->trackLocationCheckBox, &QCheckBox::checkStateChanged, mainWindow_, @@ -1471,6 +1483,10 @@ void MainWindowImpl::UpdateRadarProductSettings() { level2SettingsGroup_->setVisible(false); } + + mainWindow_->ui->smoothRadarDataCheckBox->setCheckState( + activeMap_->GetSmoothingEnabled() ? Qt::CheckState::Checked : + Qt::CheckState::Unchecked); } void MainWindowImpl::UpdateRadarSite() diff --git a/scwx-qt/source/scwx/qt/main/main_window.ui b/scwx-qt/source/scwx/qt/main/main_window.ui index c5e877c9..42525199 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.ui +++ b/scwx-qt/source/scwx/qt/main/main_window.ui @@ -153,8 +153,8 @@ 0 0 - 205 - 701 + 190 + 680 @@ -329,6 +329,13 @@ + + + + Smooth Radar Data + + + diff --git a/scwx-qt/source/scwx/qt/map/map_widget.cpp b/scwx-qt/source/scwx/qt/map/map_widget.cpp index d3c7fefc..37300a96 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.cpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.cpp @@ -225,7 +225,7 @@ public: std::shared_ptr overlayLayer_; std::shared_ptr overlayProductLayer_ {nullptr}; std::shared_ptr placefileLayer_; - std::shared_ptr markerLayer_; + std::shared_ptr markerLayer_; std::shared_ptr colorTableLayer_; std::shared_ptr radarSiteLayer_ {nullptr}; @@ -233,6 +233,7 @@ public: bool autoRefreshEnabled_; bool autoUpdateEnabled_; + bool smoothingEnabled_ {false}; common::Level2Product selectedLevel2Product_; @@ -727,6 +728,23 @@ std::uint16_t MapWidget::GetVcp() const } } +bool MapWidget::GetSmoothingEnabled() const +{ + return p->smoothingEnabled_; +} + +void MapWidget::SetSmoothingEnabled(bool smoothingEnabled) +{ + p->smoothingEnabled_ = smoothingEnabled; + + auto radarProductView = p->context_->radar_product_view(); + if (radarProductView != nullptr) + { + radarProductView->set_smoothing_enabled(smoothingEnabled); + radarProductView->Update(); + } +} + void MapWidget::SelectElevation(float elevation) { auto radarProductView = p->context_->radar_product_view(); @@ -775,6 +793,7 @@ void MapWidget::SelectRadarProduct(common::RadarProductGroup group, radarProductView = view::RadarProductViewFactory::Create( group, productName, productCode, p->radarProductManager_); + radarProductView->set_smoothing_enabled(p->smoothingEnabled_); p->context_->set_radar_product_view(radarProductView); p->RadarProductViewConnect(); diff --git a/scwx-qt/source/scwx/qt/map/map_widget.hpp b/scwx-qt/source/scwx/qt/map/map_widget.hpp index 40f7df77..4254453e 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.hpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.hpp @@ -48,6 +48,7 @@ public: std::string GetRadarProductName() const; std::shared_ptr GetRadarSite() const; std::chrono::system_clock::time_point GetSelectedTime() const; + bool GetSmoothingEnabled() const; std::uint16_t GetVcp() const; void SelectElevation(float elevation); @@ -117,6 +118,7 @@ public: double pitch); void SetInitialMapStyle(const std::string& styleName); void SetMapStyle(const std::string& styleName); + void SetSmoothingEnabled(bool enabled); /** * Updates the coordinates associated with mouse movement from another map. diff --git a/scwx-qt/source/scwx/qt/view/level2_product_view.cpp b/scwx-qt/source/scwx/qt/view/level2_product_view.cpp index c483ab28..bcee898d 100644 --- a/scwx-qt/source/scwx/qt/view/level2_product_view.cpp +++ b/scwx-qt/source/scwx/qt/view/level2_product_view.cpp @@ -131,6 +131,8 @@ public: std::shared_ptr momentDataBlock0_; + bool prevSmoothingEnabled_ {false}; + std::vector coordinates_ {}; std::vector vertices_ {}; std::vector dataMoments8_ {}; @@ -512,6 +514,7 @@ void Level2ProductView::ComputeSweep() std::shared_ptr radarProductManager = radar_product_manager(); + const bool smoothingEnabled = smoothing_enabled(); std::shared_ptr radarData; std::chrono::system_clock::time_point requestedTime {selected_time()}; @@ -524,14 +527,14 @@ void Level2ProductView::ComputeSweep() Q_EMIT SweepNotComputed(types::NoUpdateReason::NotLoaded); return; } - if (radarData == p->elevationScan_) + if (radarData == p->elevationScan_ && + smoothingEnabled == p->prevSmoothingEnabled_) { Q_EMIT SweepNotComputed(types::NoUpdateReason::NoChange); return; } - // TODO: Where does this come from? - bool smoothingEnabled = false; + p->prevSmoothingEnabled_ = smoothingEnabled; logger_->debug("Computing Sweep"); diff --git a/scwx-qt/source/scwx/qt/view/radar_product_view.cpp b/scwx-qt/source/scwx/qt/view/radar_product_view.cpp index e2ca6c21..04534593 100644 --- a/scwx-qt/source/scwx/qt/view/radar_product_view.cpp +++ b/scwx-qt/source/scwx/qt/view/radar_product_view.cpp @@ -41,6 +41,7 @@ public: std::mutex sweepMutex_; std::chrono::system_clock::time_point selectedTime_; + bool smoothingEnabled_ {false}; std::shared_ptr radarProductManager_; }; @@ -87,6 +88,11 @@ std::chrono::system_clock::time_point RadarProductView::selected_time() const return p->selectedTime_; } +bool RadarProductView::smoothing_enabled() const +{ + return p->smoothingEnabled_; +} + std::chrono::system_clock::time_point RadarProductView::sweep_time() const { return {}; @@ -105,6 +111,11 @@ void RadarProductView::set_radar_product_manager( ConnectRadarProductManager(); } +void RadarProductView::set_smoothing_enabled(bool smoothingEnabled) +{ + p->smoothingEnabled_ = smoothingEnabled; +} + void RadarProductView::Initialize() { ComputeSweep(); diff --git a/scwx-qt/source/scwx/qt/view/radar_product_view.hpp b/scwx-qt/source/scwx/qt/view/radar_product_view.hpp index c695a9e5..9bda8795 100644 --- a/scwx-qt/source/scwx/qt/view/radar_product_view.hpp +++ b/scwx-qt/source/scwx/qt/view/radar_product_view.hpp @@ -49,10 +49,12 @@ public: std::shared_ptr radar_product_manager() const; std::chrono::system_clock::time_point selected_time() const; + bool smoothing_enabled() const; std::mutex& sweep_mutex(); void set_radar_product_manager( std::shared_ptr radarProductManager); + void set_smoothing_enabled(bool smoothingEnabled); void Initialize(); virtual void