mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 06:50:05 +00:00 
			
		
		
		
	Add overlay product layer, to hold the following overlay products:
- Storm Structure (NSS/62) - Hail Index (NHI/59) - Mesocyclone (NME/60, NMD/141) - Tornadic Vortex Signature (NTV/61) - Storm Tracking Information (NST/58)
This commit is contained in:
		
							parent
							
								
									a5d97933dc
								
							
						
					
					
						commit
						b8398b4ad0
					
				
					 7 changed files with 136 additions and 8 deletions
				
			
		|  | @ -115,6 +115,7 @@ set(HDR_MAP source/scwx/qt/map/alert_layer.hpp | ||||||
|             source/scwx/qt/map/map_settings.hpp |             source/scwx/qt/map/map_settings.hpp | ||||||
|             source/scwx/qt/map/map_widget.hpp |             source/scwx/qt/map/map_widget.hpp | ||||||
|             source/scwx/qt/map/overlay_layer.hpp |             source/scwx/qt/map/overlay_layer.hpp | ||||||
|  |             source/scwx/qt/map/overlay_product_layer.hpp | ||||||
|             source/scwx/qt/map/placefile_layer.hpp |             source/scwx/qt/map/placefile_layer.hpp | ||||||
|             source/scwx/qt/map/radar_product_layer.hpp |             source/scwx/qt/map/radar_product_layer.hpp | ||||||
|             source/scwx/qt/map/radar_range_layer.hpp |             source/scwx/qt/map/radar_range_layer.hpp | ||||||
|  | @ -128,6 +129,7 @@ set(SRC_MAP source/scwx/qt/map/alert_layer.cpp | ||||||
|             source/scwx/qt/map/map_provider.cpp |             source/scwx/qt/map/map_provider.cpp | ||||||
|             source/scwx/qt/map/map_widget.cpp |             source/scwx/qt/map/map_widget.cpp | ||||||
|             source/scwx/qt/map/overlay_layer.cpp |             source/scwx/qt/map/overlay_layer.cpp | ||||||
|  |             source/scwx/qt/map/overlay_product_layer.cpp | ||||||
|             source/scwx/qt/map/placefile_layer.cpp |             source/scwx/qt/map/placefile_layer.cpp | ||||||
|             source/scwx/qt/map/radar_product_layer.cpp |             source/scwx/qt/map/radar_product_layer.cpp | ||||||
|             source/scwx/qt/map/radar_range_layer.cpp |             source/scwx/qt/map/radar_range_layer.cpp | ||||||
|  |  | ||||||
|  | @ -8,6 +8,7 @@ | ||||||
| #include <scwx/qt/map/layer_wrapper.hpp> | #include <scwx/qt/map/layer_wrapper.hpp> | ||||||
| #include <scwx/qt/map/map_provider.hpp> | #include <scwx/qt/map/map_provider.hpp> | ||||||
| #include <scwx/qt/map/overlay_layer.hpp> | #include <scwx/qt/map/overlay_layer.hpp> | ||||||
|  | #include <scwx/qt/map/overlay_product_layer.hpp> | ||||||
| #include <scwx/qt/map/placefile_layer.hpp> | #include <scwx/qt/map/placefile_layer.hpp> | ||||||
| #include <scwx/qt/map/radar_product_layer.hpp> | #include <scwx/qt/map/radar_product_layer.hpp> | ||||||
| #include <scwx/qt/map/radar_range_layer.hpp> | #include <scwx/qt/map/radar_range_layer.hpp> | ||||||
|  | @ -184,6 +185,7 @@ public: | ||||||
|    std::shared_ptr<RadarProductLayer>   radarProductLayer_; |    std::shared_ptr<RadarProductLayer>   radarProductLayer_; | ||||||
|    std::shared_ptr<AlertLayer>          alertLayer_; |    std::shared_ptr<AlertLayer>          alertLayer_; | ||||||
|    std::shared_ptr<OverlayLayer>        overlayLayer_; |    std::shared_ptr<OverlayLayer>        overlayLayer_; | ||||||
|  |    std::shared_ptr<OverlayProductLayer> overlayProductLayer_ {nullptr}; | ||||||
|    std::shared_ptr<PlacefileLayer>      placefileLayer_; |    std::shared_ptr<PlacefileLayer>      placefileLayer_; | ||||||
|    std::shared_ptr<ColorTableLayer>     colorTableLayer_; |    std::shared_ptr<ColorTableLayer>     colorTableLayer_; | ||||||
|    std::shared_ptr<RadarSiteLayer>      radarSiteLayer_ {nullptr}; |    std::shared_ptr<RadarSiteLayer>      radarSiteLayer_ {nullptr}; | ||||||
|  | @ -912,6 +914,16 @@ void MapWidgetImpl::AddLayer(types::LayerType        type, | ||||||
|    { |    { | ||||||
|       switch (std::get<types::DataLayer>(description)) |       switch (std::get<types::DataLayer>(description)) | ||||||
|       { |       { | ||||||
|  |       // If there is a radar product view, create the overlay product layer
 | ||||||
|  |       case types::DataLayer::OverlayProduct: | ||||||
|  |          if (radarProductView != nullptr) | ||||||
|  |          { | ||||||
|  |             overlayProductLayer_ = | ||||||
|  |                std::make_shared<OverlayProductLayer>(context_); | ||||||
|  |             AddLayer(layerName, overlayProductLayer_, before); | ||||||
|  |          } | ||||||
|  |          break; | ||||||
|  | 
 | ||||||
|       // If there is a radar product view, create the radar range layer
 |       // If there is a radar product view, create the radar range layer
 | ||||||
|       case types::DataLayer::RadarRange: |       case types::DataLayer::RadarRange: | ||||||
|          if (radarProductView != nullptr) |          if (radarProductView != nullptr) | ||||||
|  |  | ||||||
							
								
								
									
										73
									
								
								scwx-qt/source/scwx/qt/map/overlay_product_layer.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								scwx-qt/source/scwx/qt/map/overlay_product_layer.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,73 @@ | ||||||
|  | #include <scwx/qt/map/overlay_product_layer.hpp> | ||||||
|  | #include <scwx/util/logger.hpp> | ||||||
|  | 
 | ||||||
|  | namespace scwx | ||||||
|  | { | ||||||
|  | namespace qt | ||||||
|  | { | ||||||
|  | namespace map | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | static const std::string logPrefix_ = "scwx::qt::map::overlay_product_layer"; | ||||||
|  | static const auto        logger_    = scwx::util::Logger::Create(logPrefix_); | ||||||
|  | 
 | ||||||
|  | class OverlayProductLayer::Impl | ||||||
|  | { | ||||||
|  | public: | ||||||
|  |    explicit Impl(std::shared_ptr<MapContext> context) {} | ||||||
|  |    ~Impl() = default; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | OverlayProductLayer::OverlayProductLayer(std::shared_ptr<MapContext> context) : | ||||||
|  |     DrawLayer(context), p(std::make_unique<Impl>(context)) | ||||||
|  | { | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | OverlayProductLayer::~OverlayProductLayer() = default; | ||||||
|  | 
 | ||||||
|  | void OverlayProductLayer::Initialize() | ||||||
|  | { | ||||||
|  |    logger_->debug("Initialize()"); | ||||||
|  | 
 | ||||||
|  |    DrawLayer::Initialize(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void OverlayProductLayer::Render( | ||||||
|  |    const QMapLibreGL::CustomLayerRenderParameters& params) | ||||||
|  | { | ||||||
|  |    gl::OpenGLFunctions& gl = context()->gl(); | ||||||
|  | 
 | ||||||
|  |    // Set OpenGL blend mode for transparency
 | ||||||
|  |    gl.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | ||||||
|  | 
 | ||||||
|  |    DrawLayer::Render(params); | ||||||
|  | 
 | ||||||
|  |    SCWX_GL_CHECK_ERROR(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void OverlayProductLayer::Deinitialize() | ||||||
|  | { | ||||||
|  |    logger_->debug("Deinitialize()"); | ||||||
|  | 
 | ||||||
|  |    DrawLayer::Deinitialize(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool OverlayProductLayer::RunMousePicking( | ||||||
|  |    const QMapLibreGL::CustomLayerRenderParameters& params, | ||||||
|  |    const QPointF&                                  mouseLocalPos, | ||||||
|  |    const QPointF&                                  mouseGlobalPos, | ||||||
|  |    const glm::vec2&                                mouseCoords, | ||||||
|  |    const common::Coordinate&                       mouseGeoCoords, | ||||||
|  |    std::shared_ptr<types::EventHandler>&           eventHandler) | ||||||
|  | { | ||||||
|  |    return DrawLayer::RunMousePicking(params, | ||||||
|  |                                      mouseLocalPos, | ||||||
|  |                                      mouseGlobalPos, | ||||||
|  |                                      mouseCoords, | ||||||
|  |                                      mouseGeoCoords, | ||||||
|  |                                      eventHandler); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | } // namespace map
 | ||||||
|  | } // namespace qt
 | ||||||
|  | } // namespace scwx
 | ||||||
							
								
								
									
										37
									
								
								scwx-qt/source/scwx/qt/map/overlay_product_layer.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								scwx-qt/source/scwx/qt/map/overlay_product_layer.hpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include <scwx/qt/map/draw_layer.hpp> | ||||||
|  | 
 | ||||||
|  | namespace scwx | ||||||
|  | { | ||||||
|  | namespace qt | ||||||
|  | { | ||||||
|  | namespace map | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | class OverlayProductLayer : public DrawLayer | ||||||
|  | { | ||||||
|  | public: | ||||||
|  |    explicit OverlayProductLayer(std::shared_ptr<MapContext> context); | ||||||
|  |    ~OverlayProductLayer(); | ||||||
|  | 
 | ||||||
|  |    void Initialize() override final; | ||||||
|  |    void Render(const QMapLibreGL::CustomLayerRenderParameters&) override final; | ||||||
|  |    void Deinitialize() override final; | ||||||
|  | 
 | ||||||
|  |    bool RunMousePicking( | ||||||
|  |       const QMapLibreGL::CustomLayerRenderParameters& params, | ||||||
|  |       const QPointF&                                  mouseLocalPos, | ||||||
|  |       const QPointF&                                  mouseGlobalPos, | ||||||
|  |       const glm::vec2&                                mouseCoords, | ||||||
|  |       const common::Coordinate&                       mouseGeoCoords, | ||||||
|  |       std::shared_ptr<types::EventHandler>& eventHandler) override final; | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |    class Impl; | ||||||
|  |    std::unique_ptr<Impl> p; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | } // namespace map
 | ||||||
|  | } // namespace qt
 | ||||||
|  | } // namespace scwx
 | ||||||
|  | @ -43,6 +43,7 @@ static const std::vector<types::LayerInfo> kDefaultLayers_ { | ||||||
|     types::InformationLayer::RadarSite, |     types::InformationLayer::RadarSite, | ||||||
|     false, |     false, | ||||||
|     {false, false, false, false}}, |     {false, false, false, false}}, | ||||||
|  |    {types::LayerType::Data, types::DataLayer::OverlayProduct, true}, | ||||||
|    {types::LayerType::Data, types::DataLayer::RadarRange, true}, |    {types::LayerType::Data, types::DataLayer::RadarRange, true}, | ||||||
|    {types::LayerType::Alert, awips::Phenomenon::Tornado, true}, |    {types::LayerType::Alert, awips::Phenomenon::Tornado, true}, | ||||||
|    {types::LayerType::Alert, awips::Phenomenon::SnowSquall, true}, |    {types::LayerType::Alert, awips::Phenomenon::SnowSquall, true}, | ||||||
|  |  | ||||||
|  | @ -23,7 +23,9 @@ static const std::unordered_map<LayerType, std::string> layerTypeName_ { | ||||||
|    {LayerType::Unknown, "?"}}; |    {LayerType::Unknown, "?"}}; | ||||||
| 
 | 
 | ||||||
| static const std::unordered_map<DataLayer, std::string> dataLayerName_ { | static const std::unordered_map<DataLayer, std::string> dataLayerName_ { | ||||||
|    {DataLayer::RadarRange, "Radar Range"}, {DataLayer::Unknown, "?"}}; |    {DataLayer::OverlayProduct, "Overlay Product"}, | ||||||
|  |    {DataLayer::RadarRange, "Radar Range"}, | ||||||
|  |    {DataLayer::Unknown, "?"}}; | ||||||
| 
 | 
 | ||||||
| static const std::unordered_map<InformationLayer, std::string> | static const std::unordered_map<InformationLayer, std::string> | ||||||
|    informationLayerName_ {{InformationLayer::MapOverlay, "Map Overlay"}, |    informationLayerName_ {{InformationLayer::MapOverlay, "Map Overlay"}, | ||||||
|  |  | ||||||
|  | @ -31,11 +31,12 @@ enum class LayerType | ||||||
| 
 | 
 | ||||||
| enum class DataLayer | enum class DataLayer | ||||||
| { | { | ||||||
|  |    OverlayProduct, | ||||||
|    RadarRange, |    RadarRange, | ||||||
|    Unknown |    Unknown | ||||||
| }; | }; | ||||||
| typedef scwx::util:: | typedef scwx::util:: | ||||||
|    Iterator<DataLayer, DataLayer::RadarRange, DataLayer::RadarRange> |    Iterator<DataLayer, DataLayer::OverlayProduct, DataLayer::RadarRange> | ||||||
|       DataLayerIterator; |       DataLayerIterator; | ||||||
| 
 | 
 | ||||||
| enum class InformationLayer | enum class InformationLayer | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat