From 796fcfef7dccdb82171215a94bde595d36419e01 Mon Sep 17 00:00:00 2001 From: brunoherbelin Date: Sun, 7 Jun 2020 16:49:15 +0200 Subject: [PATCH] Fixed picking of rotation handle. --- PickingVisitor.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/PickingVisitor.cpp b/PickingVisitor.cpp index 0711509..de473e0 100644 --- a/PickingVisitor.cpp +++ b/PickingVisitor.cpp @@ -78,6 +78,8 @@ void PickingVisitor::visit(Handles &n) // apply inverse transform to the point of interest glm::vec4 P = glm::inverse(modelview_) * glm::vec4( point_, 0.f, 1.f ); + Log::Info("P (%f, %f)", P.x, P.y); + // inverse transform to check the scale glm::vec4 S = glm::inverse(modelview_) * glm::vec4( 0.05f, 0.05f, 0.f, 0.f ); float scale = glm::length( glm::vec2(S) ); @@ -103,8 +105,7 @@ void PickingVisitor::visit(Handles &n) else if ( n.type() == Handles::ROTATE ){ // the icon for rotation is on the right top corner at (0.12, 0.12) in screen coordinates glm::vec4 vec = glm::inverse(modelview_) * glm::vec4( 0.12f, 0.12f, 0.f, 0.f ); - vec += glm::vec4(+1.f, +1.f, 0.f, 0.f); - picked = glm::length( glm::vec2(vec) - glm::vec2(P) ) < scale; + picked = glm::length( glm::vec2( 1.f + glm::abs(vec.x), 1.f + glm::abs(vec.y)) - glm::vec2(P) ) < scale; } if ( picked )