From 889fe698e69d57fb48cd1aa68a346df730e24011 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Tue, 13 Sep 2022 21:43:56 -0500 Subject: [PATCH] Smooth transition between level 3 tilts --- scwx-qt/source/scwx/qt/map/map_widget.cpp | 8 +++- .../scwx/qt/view/level2_product_view.cpp | 43 +++++++++++++------ .../scwx/qt/view/level2_product_view.hpp | 1 + .../scwx/qt/view/level3_product_view.cpp | 5 +++ .../scwx/qt/view/level3_product_view.hpp | 2 + .../scwx/qt/view/level3_radial_view.cpp | 8 ++-- .../scwx/qt/view/level3_raster_view.cpp | 8 ++-- .../scwx/qt/view/radar_product_view.hpp | 1 + 8 files changed, 53 insertions(+), 23 deletions(-) diff --git a/scwx-qt/source/scwx/qt/map/map_widget.cpp b/scwx-qt/source/scwx/qt/map/map_widget.cpp index f04aba7c..3a0748ea 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.cpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.cpp @@ -301,7 +301,9 @@ void MapWidget::SelectRadarProduct(common::RadarProductGroup group, if (radarProductView == nullptr || radarProductView->GetRadarProductGroup() != group || - radarProductView->GetRadarProductName() != productName || + (radarProductView->GetRadarProductGroup() == + common::RadarProductGroup::Level2 && + radarProductView->GetRadarProductName() != productName) || p->context_->radarProductCode_ != productCode) { p->RadarProductViewDisconnect(); @@ -313,6 +315,10 @@ void MapWidget::SelectRadarProduct(common::RadarProductGroup group, radarProductViewCreated = true; } + else + { + radarProductView->SelectProduct(productName); + } p->context_->radarProductGroup_ = group; p->context_->radarProduct_ = productName; 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 d8c63a0b..4e37c30a 100644 --- a/scwx-qt/source/scwx/qt/view/level2_product_view.cpp +++ b/scwx-qt/source/scwx/qt/view/level2_product_view.cpp @@ -65,21 +65,13 @@ public: savedScale_ {0.0f}, savedOffset_ {0.0f} { - auto it = blockTypes_.find(product); - - if (it != blockTypes_.end()) - { - dataBlockType_ = it->second; - } - else - { - logger_->warn("Unknown product: \"{}\"", - common::GetLevel2Name(product)); - dataBlockType_ = wsr88d::rda::DataBlockType::Unknown; - } + SetProduct(product); } ~Level2ProductViewImpl() = default; + void SetProduct(const std::string& productName); + void SetProduct(common::Level2Product product); + common::Level2Product product_; wsr88d::rda::DataBlockType dataBlockType_; std::shared_ptr radarProductManager_; @@ -249,11 +241,38 @@ void Level2ProductView::SelectElevation(float elevation) p->selectedElevation_ = elevation; } +void Level2ProductView::SelectProduct(const std::string& productName) +{ + p->SetProduct(productName); +} + void Level2ProductView::SelectTime(std::chrono::system_clock::time_point time) { p->selectedTime_ = time; } +void Level2ProductViewImpl::SetProduct(const std::string& productName) +{ + SetProduct(common::GetLevel2Product(productName)); +} + +void Level2ProductViewImpl::SetProduct(common::Level2Product product) +{ + product_ = product; + + auto it = blockTypes_.find(product); + + if (it != blockTypes_.end()) + { + dataBlockType_ = it->second; + } + else + { + logger_->warn("Unknown product: \"{}\"", common::GetLevel2Name(product)); + dataBlockType_ = wsr88d::rda::DataBlockType::Unknown; + } +} + void Level2ProductView::Update() { util::async([=]() { ComputeSweep(); }); diff --git a/scwx-qt/source/scwx/qt/view/level2_product_view.hpp b/scwx-qt/source/scwx/qt/view/level2_product_view.hpp index 25ecddf9..13e03449 100644 --- a/scwx-qt/source/scwx/qt/view/level2_product_view.hpp +++ b/scwx-qt/source/scwx/qt/view/level2_product_view.hpp @@ -39,6 +39,7 @@ public: void LoadColorTable(std::shared_ptr colorTable) override; void SelectElevation(float elevation) override; + void SelectProduct(const std::string& productName) override; void SelectTime(std::chrono::system_clock::time_point time) override; void Update() override; diff --git a/scwx-qt/source/scwx/qt/view/level3_product_view.cpp b/scwx-qt/source/scwx/qt/view/level3_product_view.cpp index bec61ec7..e3acbcef 100644 --- a/scwx-qt/source/scwx/qt/view/level3_product_view.cpp +++ b/scwx-qt/source/scwx/qt/view/level3_product_view.cpp @@ -118,6 +118,11 @@ std::string Level3ProductView::GetRadarProductName() const return p->product_; } +void Level3ProductView::SelectProduct(const std::string& productName) +{ + p->product_ = productName; +} + void Level3ProductView::LoadColorTable( std::shared_ptr colorTable) { diff --git a/scwx-qt/source/scwx/qt/view/level3_product_view.hpp b/scwx-qt/source/scwx/qt/view/level3_product_view.hpp index 2656cbd1..e7066ac5 100644 --- a/scwx-qt/source/scwx/qt/view/level3_product_view.hpp +++ b/scwx-qt/source/scwx/qt/view/level3_product_view.hpp @@ -35,6 +35,8 @@ public: common::RadarProductGroup GetRadarProductGroup() const override; std::string GetRadarProductName() const override; + void SelectProduct(const std::string& productName) override; + protected: std::shared_ptr graphic_product_message() const; diff --git a/scwx-qt/source/scwx/qt/view/level3_radial_view.cpp b/scwx-qt/source/scwx/qt/view/level3_radial_view.cpp index a5c8fa02..b0a056b7 100644 --- a/scwx-qt/source/scwx/qt/view/level3_radial_view.cpp +++ b/scwx-qt/source/scwx/qt/view/level3_radial_view.cpp @@ -27,9 +27,7 @@ class Level3RadialViewImpl { public: explicit Level3RadialViewImpl( - const std::string& product, std::shared_ptr radarProductManager) : - product_ {product}, radarProductManager_ {radarProductManager}, selectedTime_ {}, latitude_ {}, @@ -41,7 +39,6 @@ public: } ~Level3RadialViewImpl() = default; - std::string product_; std::shared_ptr radarProductManager_; std::chrono::system_clock::time_point selectedTime_; @@ -61,7 +58,7 @@ Level3RadialView::Level3RadialView( const std::string& product, std::shared_ptr radarProductManager) : Level3ProductView(product), - p(std::make_unique(product, radarProductManager)) + p(std::make_unique(radarProductManager)) { } Level3RadialView::~Level3RadialView() = default; @@ -114,7 +111,8 @@ void Level3RadialView::ComputeSweep() // Retrieve message from Radar Product Manager std::shared_ptr message = - p->radarProductManager_->GetLevel3Data(p->product_, p->selectedTime_); + p->radarProductManager_->GetLevel3Data(GetRadarProductName(), + p->selectedTime_); if (message == nullptr) { logger_->debug("Level 3 data not found"); diff --git a/scwx-qt/source/scwx/qt/view/level3_raster_view.cpp b/scwx-qt/source/scwx/qt/view/level3_raster_view.cpp index 34b8a51c..77c11f9d 100644 --- a/scwx-qt/source/scwx/qt/view/level3_raster_view.cpp +++ b/scwx-qt/source/scwx/qt/view/level3_raster_view.cpp @@ -27,9 +27,7 @@ class Level3RasterViewImpl { public: explicit Level3RasterViewImpl( - const std::string& product, std::shared_ptr radarProductManager) : - product_ {product}, radarProductManager_ {radarProductManager}, selectedTime_ {}, latitude_ {}, @@ -41,7 +39,6 @@ public: } ~Level3RasterViewImpl() = default; - std::string product_; std::shared_ptr radarProductManager_; std::chrono::system_clock::time_point selectedTime_; @@ -61,7 +58,7 @@ Level3RasterView::Level3RasterView( const std::string& product, std::shared_ptr radarProductManager) : Level3ProductView(product), - p(std::make_unique(product, radarProductManager)) + p(std::make_unique(radarProductManager)) { } Level3RasterView::~Level3RasterView() = default; @@ -114,7 +111,8 @@ void Level3RasterView::ComputeSweep() // Retrieve message from Radar Product Manager std::shared_ptr message = - p->radarProductManager_->GetLevel3Data(p->product_, p->selectedTime_); + p->radarProductManager_->GetLevel3Data(GetRadarProductName(), + p->selectedTime_); if (message == nullptr) { logger_->debug("Level 3 data not found"); 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 b54a49cd..849a4097 100644 --- a/scwx-qt/source/scwx/qt/view/radar_product_view.hpp +++ b/scwx-qt/source/scwx/qt/view/radar_product_view.hpp @@ -42,6 +42,7 @@ public: virtual void LoadColorTable(std::shared_ptr colorTable) = 0; virtual void SelectElevation(float elevation); + virtual void SelectProduct(const std::string& productName) = 0; virtual void SelectTime(std::chrono::system_clock::time_point time) = 0; virtual void Update() = 0;