mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 01:00:05 +00:00 
			
		
		
		
	Removing unused hover line parameter, moving mouse picking function to bottom (no change)
This commit is contained in:
		
							parent
							
								
									f9e69d15e4
								
							
						
					
					
						commit
						0b2a118c42
					
				
					 1 changed files with 62 additions and 63 deletions
				
			
		|  | @ -41,7 +41,6 @@ public: | |||
|       glm::vec2 otr_; | ||||
|       glm::vec2 obl_; | ||||
|       glm::vec2 obr_; | ||||
|       float     width_; | ||||
|    }; | ||||
| 
 | ||||
|    explicit Impl(const std::shared_ptr<GlContext>& context) : | ||||
|  | @ -237,67 +236,6 @@ void PlacefileLines::Deinitialize() | |||
|    p->currentHoverLines_.clear(); | ||||
| } | ||||
| 
 | ||||
| bool PlacefileLines::RunMousePicking( | ||||
|    const QMapLibreGL::CustomLayerRenderParameters& params, | ||||
|    const glm::vec2&                                mousePos) | ||||
| { | ||||
|    std::unique_lock lock {p->lineMutex_}; | ||||
| 
 | ||||
|    bool itemPicked = false; | ||||
| 
 | ||||
|    // Calculate map scale, remove width and height from original calculation
 | ||||
|    glm::vec2 scale = util::maplibre::GetMapScale(params); | ||||
|    scale = 2.0f / glm::vec2 {scale.x * params.width, scale.y * params.height}; | ||||
| 
 | ||||
|    // Scale and rotate the identity matrix to create the map matrix
 | ||||
|    glm::mat4 mapMatrix {1.0f}; | ||||
|    mapMatrix = glm::scale(mapMatrix, glm::vec3 {scale, 1.0f}); | ||||
|    mapMatrix = glm::rotate(mapMatrix, | ||||
|                            glm::radians<float>(params.bearing), | ||||
|                            glm::vec3(0.0f, 0.0f, 1.0f)); | ||||
| 
 | ||||
|    // For each pickable line
 | ||||
|    auto it = std::find_if( | ||||
|       std::execution::par_unseq, | ||||
|       p->currentHoverLines_.crbegin(), | ||||
|       p->currentHoverLines_.crend(), | ||||
|       [&mapMatrix, &mousePos](const auto& line) | ||||
|       { | ||||
|          // Initialize vertices
 | ||||
|          glm::vec2 bl = line.p1_; | ||||
|          glm::vec2 br = bl; | ||||
|          glm::vec2 tl = line.p2_; | ||||
|          glm::vec2 tr = tl; | ||||
| 
 | ||||
|          // Calculate offsets
 | ||||
|          // - Rotated offset is half the line width (pixels) in each direction
 | ||||
|          // - Multiply the offset by the scaled and rotated map matrix
 | ||||
|          const glm::vec2 otl = mapMatrix * glm::vec4 {line.otl_, 0.0f, 1.0f}; | ||||
|          const glm::vec2 obl = mapMatrix * glm::vec4 {line.obl_, 0.0f, 1.0f}; | ||||
|          const glm::vec2 obr = mapMatrix * glm::vec4 {line.obr_, 0.0f, 1.0f}; | ||||
|          const glm::vec2 otr = mapMatrix * glm::vec4 {line.otr_, 0.0f, 1.0f}; | ||||
| 
 | ||||
|          // Offset vertices
 | ||||
|          tl += otl; | ||||
|          bl += obl; | ||||
|          br += obr; | ||||
|          tr += otr; | ||||
| 
 | ||||
|          // TODO: X/Y offsets
 | ||||
| 
 | ||||
|          // Test point against polygon bounds
 | ||||
|          return util::maplibre::IsPointInPolygon({tl, bl, br, tr}, mousePos); | ||||
|       }); | ||||
| 
 | ||||
|    if (it != p->currentHoverLines_.crend()) | ||||
|    { | ||||
|       itemPicked = true; | ||||
|       util::ImGui::Instance().DrawTooltip(it->di_->hoverText_); | ||||
|    } | ||||
| 
 | ||||
|    return itemPicked; | ||||
| } | ||||
| 
 | ||||
| void PlacefileLines::StartLines() | ||||
| { | ||||
|    // Clear the new buffers
 | ||||
|  | @ -460,7 +398,7 @@ void PlacefileLines::Impl::BufferLine( | |||
|       const glm::vec2 obr = rotate * glm::vec2 {+hw, -hw}; | ||||
| 
 | ||||
|       newHoverLines_.emplace_back( | ||||
|          LineHoverEntry {di, sc1, sc2, otl, otr, obl, obr, width}); | ||||
|          LineHoverEntry {di, sc1, sc2, otl, otr, obl, obr}); | ||||
|    } | ||||
| } | ||||
| 
 | ||||
|  | @ -489,6 +427,67 @@ void PlacefileLines::Impl::Update() | |||
|    dirty_ = false; | ||||
| } | ||||
| 
 | ||||
| bool PlacefileLines::RunMousePicking( | ||||
|    const QMapLibreGL::CustomLayerRenderParameters& params, | ||||
|    const glm::vec2&                                mousePos) | ||||
| { | ||||
|    std::unique_lock lock {p->lineMutex_}; | ||||
| 
 | ||||
|    bool itemPicked = false; | ||||
| 
 | ||||
|    // Calculate map scale, remove width and height from original calculation
 | ||||
|    glm::vec2 scale = util::maplibre::GetMapScale(params); | ||||
|    scale = 2.0f / glm::vec2 {scale.x * params.width, scale.y * params.height}; | ||||
| 
 | ||||
|    // Scale and rotate the identity matrix to create the map matrix
 | ||||
|    glm::mat4 mapMatrix {1.0f}; | ||||
|    mapMatrix = glm::scale(mapMatrix, glm::vec3 {scale, 1.0f}); | ||||
|    mapMatrix = glm::rotate(mapMatrix, | ||||
|                            glm::radians<float>(params.bearing), | ||||
|                            glm::vec3(0.0f, 0.0f, 1.0f)); | ||||
| 
 | ||||
|    // For each pickable line
 | ||||
|    auto it = std::find_if( | ||||
|       std::execution::par_unseq, | ||||
|       p->currentHoverLines_.crbegin(), | ||||
|       p->currentHoverLines_.crend(), | ||||
|       [&mapMatrix, &mousePos](const auto& line) | ||||
|       { | ||||
|          // Initialize vertices
 | ||||
|          glm::vec2 bl = line.p1_; | ||||
|          glm::vec2 br = bl; | ||||
|          glm::vec2 tl = line.p2_; | ||||
|          glm::vec2 tr = tl; | ||||
| 
 | ||||
|          // Calculate offsets
 | ||||
|          // - Rotated offset is half the line width (pixels) in each direction
 | ||||
|          // - Multiply the offset by the scaled and rotated map matrix
 | ||||
|          const glm::vec2 otl = mapMatrix * glm::vec4 {line.otl_, 0.0f, 1.0f}; | ||||
|          const glm::vec2 obl = mapMatrix * glm::vec4 {line.obl_, 0.0f, 1.0f}; | ||||
|          const glm::vec2 obr = mapMatrix * glm::vec4 {line.obr_, 0.0f, 1.0f}; | ||||
|          const glm::vec2 otr = mapMatrix * glm::vec4 {line.otr_, 0.0f, 1.0f}; | ||||
| 
 | ||||
|          // Offset vertices
 | ||||
|          tl += otl; | ||||
|          bl += obl; | ||||
|          br += obr; | ||||
|          tr += otr; | ||||
| 
 | ||||
|          // TODO: X/Y offsets
 | ||||
| 
 | ||||
|          // Test point against polygon bounds
 | ||||
|          return util::maplibre::IsPointInPolygon({tl, bl, br, tr}, mousePos); | ||||
|       }); | ||||
| 
 | ||||
|    if (it != p->currentHoverLines_.crend()) | ||||
|    { | ||||
|       itemPicked = true; | ||||
|       util::ImGui::Instance().DrawTooltip(it->di_->hoverText_); | ||||
|    } | ||||
| 
 | ||||
|    return itemPicked; | ||||
| } | ||||
| 
 | ||||
| } // namespace draw
 | ||||
| } // namespace gl
 | ||||
| } // namespace qt
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat