322{
323 if (! wxGetApp().IsActive())
324 return false;
325
326 int xmult = params.invert_x ? -1 : 1;
327 int ymult = params.invert_y ? -1 : 1;
328 int zmult = params.invert_z ? -1 : 1;
329 int yawmult = params.invert_yaw ? -1 : 1;
330 int pitchmult = params.invert_pitch ? -1 : 1;
331 int rollmult = params.invert_roll ? -1 : 1;
332
333 std::deque<QueueItem> input_queue;
334 {
335
339 }
340
341 for (
const QueueItem &input_queue_item : input_queue) {
342 if (input_queue_item.is_translation()) {
343 Vec3d translation = params.swap_yz ?
Vec3d(input_queue_item.vector.x() * xmult, - input_queue_item.vector.z() * zmult, input_queue_item.vector.y() * ymult) :
Vec3d(input_queue_item.vector.x() * xmult, input_queue_item.vector.y() * ymult, input_queue_item.vector.z() * zmult);
344 double zoom_factor = camera.min_zoom() / camera.get_zoom();
345 camera.set_target(camera.get_target() + zoom_factor * params.translation.scale * (translation.x() * camera.get_dir_right() + translation.z() * camera.get_dir_up()));
346 if (translation.y() != 0.0)
347 camera.update_zoom(params.zoom.scale * translation.y());
348 } else if (input_queue_item.is_rotation()) {
349 Vec3d rot = params.rotation.scale * input_queue_item.vector * (
PI / 180.);
350 if (params.swap_yz)
351 rot =
Vec3d(rot.x(), -rot.z(), rot.y());
352 rot =
Vec3d(rot.x() * pitchmult, rot.y() * yawmult, rot.z() * rollmult);
353 camera.rotate_local_around_target(
Vec3d(rot.x(), - rot.z(), rot.y()));
355 } else {
356 assert(input_queue_item.is_buttons());
357 switch (input_queue_item.type_or_buttons) {
358 case 0: camera.update_zoom(1.0); break;
359 case 1: camera.update_zoom(-1.0); break;
360 default: break;
361 }
362 }
363 }
364
365 return ! input_queue.empty();
366}
static constexpr double PI
Definition libslic3r.h:81
Eigen::Matrix< double, 3, 1, Eigen::DontAlign > Vec3d
Definition Point.hpp:68
@ Perspective
Definition Camera.hpp:40
Definition Mouse3DController.hpp:83