mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-10 08:17:51 -06:00
gui: fix zoom-to-mouse (#4844)
gui: fix zoom-to-mouse Plater disappeared when zoom-to-mouse enabled and user tries to zoom with a side view enabled (Ctrl+<3..6>). Mouse/screen center position estimation in 3D is made by calculating intersection of a mouse vector which comes 'through' the screen with an XY plane. However, when screen is parallel to Z axis, intersection point located at infinite which results in infinite camera translation vector. This change switches mouse position estimation to use of projection matrix like its done for camera panning.
This commit is contained in:
parent
b0abb4c5a6
commit
5d45770745
1 changed files with 4 additions and 2 deletions
|
@ -3693,9 +3693,11 @@ void GLCanvas3D::on_mouse_wheel(wxMouseEvent& evt)
|
|||
}
|
||||
else {
|
||||
auto cnv_size = get_canvas_size();
|
||||
auto screen_center_3d_pos = _mouse_to_3d({ cnv_size.get_width() * 0.5, cnv_size.get_height() * 0.5 });
|
||||
auto mouse_3d_pos = _mouse_to_3d({evt.GetX(), evt.GetY()});
|
||||
float z{0.f};
|
||||
auto screen_center_3d_pos = _mouse_to_3d({ cnv_size.get_width() * 0.5, cnv_size.get_height() * 0.5 }, &z);
|
||||
auto mouse_3d_pos = _mouse_to_3d({evt.GetX(), evt.GetY()}, &z);
|
||||
Vec3d displacement = mouse_3d_pos - screen_center_3d_pos;
|
||||
|
||||
wxGetApp().plater()->get_camera().translate(displacement);
|
||||
auto origin_zoom = wxGetApp().plater()->get_camera().get_zoom();
|
||||
_update_camera_zoom(delta);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue