mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-16 12:49:59 +01:00
Fixed picking of rotation handle.
This commit is contained in:
@@ -78,6 +78,8 @@ void PickingVisitor::visit(Handles &n)
|
|||||||
// apply inverse transform to the point of interest
|
// apply inverse transform to the point of interest
|
||||||
glm::vec4 P = glm::inverse(modelview_) * glm::vec4( point_, 0.f, 1.f );
|
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
|
// inverse transform to check the scale
|
||||||
glm::vec4 S = glm::inverse(modelview_) * glm::vec4( 0.05f, 0.05f, 0.f, 0.f );
|
glm::vec4 S = glm::inverse(modelview_) * glm::vec4( 0.05f, 0.05f, 0.f, 0.f );
|
||||||
float scale = glm::length( glm::vec2(S) );
|
float scale = glm::length( glm::vec2(S) );
|
||||||
@@ -103,8 +105,7 @@ void PickingVisitor::visit(Handles &n)
|
|||||||
else if ( n.type() == Handles::ROTATE ){
|
else if ( n.type() == Handles::ROTATE ){
|
||||||
// the icon for rotation is on the right top corner at (0.12, 0.12) in screen coordinates
|
// 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 );
|
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( 1.f + glm::abs(vec.x), 1.f + glm::abs(vec.y)) - glm::vec2(P) ) < scale;
|
||||||
picked = glm::length( glm::vec2(vec) - glm::vec2(P) ) < scale;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( picked )
|
if ( picked )
|
||||||
|
|||||||
Reference in New Issue
Block a user