Fixed picking of rotation handle.

This commit is contained in:
brunoherbelin
2020-06-07 16:49:15 +02:00
parent 32ba013bb1
commit 796fcfef7d

View File

@@ -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 )