OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::GUI::Mouse3DController::State Class Reference
Collaboration diagram for Slic3r::GUI::Mouse3DController::State:

Classes

struct  QueueItem

Public Member Functions

void append_translation (const Vec3d &translation, size_t input_queue_max_size)
void append_rotation (const Vec3f &rotation, size_t input_queue_max_size)
void append_button (unsigned int id, size_t input_queue_max_size)
bool apply (const Params &params, Camera &camera)

Private Attributes

std::deque< QueueItem > m_input_queue
std::mutex m_input_queue_mutex

Detailed Description

Member Function Documentation

◆ append_button()

void Slic3r::GUI::Mouse3DController::State::append_button ( unsigned int id,
size_t input_queue_max_size )
121{
122 std::scoped_lock<std::mutex> lock(m_input_queue_mutex);
123 m_input_queue.emplace_back(QueueItem::buttons(id));
124#if ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
125 update_maximum(input_queue_max_size_achieved, m_input_queue.size());
126#endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
127}
std::mutex m_input_queue_mutex
Definition Mouse3DController.hpp:103
std::deque< QueueItem > m_input_queue
Definition Mouse3DController.hpp:102
@ lock
Definition GLGizmoEmboss.cpp:209
static QueueItem buttons(unsigned int buttons)
Definition Mouse3DController.hpp:86

References Slic3r::GUI::Mouse3DController::State::QueueItem::buttons(), m_input_queue, and m_input_queue_mutex.

Referenced by Slic3r::GUI::Mouse3DController::handle_packet_button().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ append_rotation()

void Slic3r::GUI::Mouse3DController::State::append_rotation ( const Vec3f & rotation,
size_t input_queue_max_size )
106{
107 std::scoped_lock<std::mutex> lock(m_input_queue_mutex);
108 while (m_input_queue.size() >= input_queue_max_size)
109 m_input_queue.pop_front();
110 m_input_queue.emplace_back(QueueItem::rotation(rotation.cast<double>()));
111#ifdef WIN32
112 if (rotation.x() != 0.0f)
113 ++ m_mouse_wheel_counter;
114#endif // WIN32
115#if ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
116 update_maximum(input_queue_max_size_achieved, m_input_queue.size());
117#endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
118}
static QueueItem rotation(const Vec3d &rotation)
Definition Mouse3DController.hpp:85

References m_input_queue, m_input_queue_mutex, and Slic3r::GUI::Mouse3DController::State::QueueItem::rotation().

Referenced by Slic3r::GUI::Mouse3DController::handle_packet_rotation().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ append_translation()

void Slic3r::GUI::Mouse3DController::State::append_translation ( const Vec3d & translation,
size_t input_queue_max_size )
95{
96 std::scoped_lock<std::mutex> lock(m_input_queue_mutex);
97 while (m_input_queue.size() >= input_queue_max_size)
98 m_input_queue.pop_front();
99 m_input_queue.emplace_back(QueueItem::translation(translation));
100#if ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
101 update_maximum(input_queue_max_size_achieved, m_input_queue.size());
102#endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
103}
static QueueItem translation(const Vec3d &translation)
Definition Mouse3DController.hpp:84

References m_input_queue, m_input_queue_mutex, and Slic3r::GUI::Mouse3DController::State::QueueItem::translation().

Referenced by Slic3r::GUI::Mouse3DController::handle_packet_translation().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ apply()

bool Slic3r::GUI::Mouse3DController::State::apply ( const Params & params,
Camera & camera )
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 // Atomically move m_input_queue to input_queue.
336 std::scoped_lock<std::mutex> lock(m_input_queue_mutex);
337 input_queue = std::move(m_input_queue);
338 m_input_queue.clear();
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()));
354 camera.auto_type(Camera::EType::Perspective);
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

References Slic3r::GUI::Camera::auto_type(), Slic3r::GUI::Camera::get_dir_right(), Slic3r::GUI::Camera::get_dir_up(), Slic3r::GUI::Camera::get_target(), Slic3r::GUI::Camera::get_zoom(), Slic3r::GUI::Mouse3DController::Params::invert_pitch, Slic3r::GUI::Mouse3DController::Params::invert_roll, Slic3r::GUI::Mouse3DController::Params::invert_x, Slic3r::GUI::Mouse3DController::Params::invert_y, Slic3r::GUI::Mouse3DController::Params::invert_yaw, Slic3r::GUI::Mouse3DController::Params::invert_z, m_input_queue, m_input_queue_mutex, Slic3r::GUI::Camera::min_zoom(), Slic3r::GUI::Camera::Perspective, PI, Slic3r::GUI::Camera::rotate_local_around_target(), Slic3r::GUI::Mouse3DController::Params::rotation, Slic3r::GUI::Mouse3DController::Params::CustomParameters< Number >::scale, Slic3r::GUI::Camera::set_target(), Slic3r::GUI::Mouse3DController::Params::swap_yz, Slic3r::GUI::Mouse3DController::Params::translation, Slic3r::GUI::Camera::update_zoom(), and Slic3r::GUI::Mouse3DController::Params::zoom.

Here is the call graph for this function:

Member Data Documentation

◆ m_input_queue

std::deque<QueueItem> Slic3r::GUI::Mouse3DController::State::m_input_queue
private

◆ m_input_queue_mutex

std::mutex Slic3r::GUI::Mouse3DController::State::m_input_queue_mutex
mutableprivate

The documentation for this class was generated from the following files: