mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-05-24 13:38:14 +08:00
ENABLE_3DCONNEXION_DEVICES -> Increased limit of device buttons
This commit is contained in:
parent
b11704d380
commit
d58dedd459
@ -2551,7 +2551,7 @@ void GLCanvas3D::on_mouse_wheel(wxMouseEvent& evt)
|
|||||||
#if ENABLE_3DCONNEXION_DEVICES
|
#if ENABLE_3DCONNEXION_DEVICES
|
||||||
// try to filter out events coming from mouse 3d controller
|
// try to filter out events coming from mouse 3d controller
|
||||||
const Mouse3DController& controller = wxGetApp().plater()->get_mouse3d_controller();
|
const Mouse3DController& controller = wxGetApp().plater()->get_mouse3d_controller();
|
||||||
if (controller.has_rotation() || controller.has_translation())
|
if (controller.has_translation_or_rotation())
|
||||||
return;
|
return;
|
||||||
#endif // ENABLE_3DCONNEXION_DEVICES
|
#endif // ENABLE_3DCONNEXION_DEVICES
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ static const std::vector<int> _3DCONNEXION_DEVICES =
|
|||||||
0xc629 // SPACEPILOTPRO = 50729
|
0xc629 // SPACEPILOTPRO = 50729
|
||||||
};
|
};
|
||||||
|
|
||||||
static const unsigned int _3DCONNEXION_BUTTONS_COUNT = 2;
|
static const unsigned int _3DCONNEXION_MAX_BUTTONS_COUNT = 256;
|
||||||
|
|
||||||
namespace Slic3r {
|
namespace Slic3r {
|
||||||
namespace GUI {
|
namespace GUI {
|
||||||
@ -41,7 +41,6 @@ const float Mouse3DController::State::DefaultRotationScale = 1.0;
|
|||||||
Mouse3DController::State::State()
|
Mouse3DController::State::State()
|
||||||
: m_translation(Vec3d::Zero())
|
: m_translation(Vec3d::Zero())
|
||||||
, m_rotation(Vec3f::Zero())
|
, m_rotation(Vec3f::Zero())
|
||||||
, m_buttons(_3DCONNEXION_BUTTONS_COUNT, false)
|
|
||||||
, m_translation_scale(DefaultTranslationScale)
|
, m_translation_scale(DefaultTranslationScale)
|
||||||
, m_rotation_scale(DefaultRotationScale)
|
, m_rotation_scale(DefaultRotationScale)
|
||||||
{
|
{
|
||||||
@ -62,8 +61,7 @@ void Mouse3DController::State::set_rotation(const Vec3f& rotation)
|
|||||||
void Mouse3DController::State::set_button(unsigned int id)
|
void Mouse3DController::State::set_button(unsigned int id)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(m_mutex);
|
std::lock_guard<std::mutex> lock(m_mutex);
|
||||||
if (id < _3DCONNEXION_BUTTONS_COUNT)
|
m_buttons.push_back(id);
|
||||||
m_buttons[id] = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Mouse3DController::State::has_translation() const
|
bool Mouse3DController::State::has_translation() const
|
||||||
@ -71,21 +69,23 @@ bool Mouse3DController::State::has_translation() const
|
|||||||
std::lock_guard<std::mutex> lock(m_mutex);
|
std::lock_guard<std::mutex> lock(m_mutex);
|
||||||
return !m_translation.isApprox(Vec3d::Zero());
|
return !m_translation.isApprox(Vec3d::Zero());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Mouse3DController::State::has_rotation() const
|
bool Mouse3DController::State::has_rotation() const
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(m_mutex);
|
std::lock_guard<std::mutex> lock(m_mutex);
|
||||||
return !m_rotation.isApprox(Vec3f::Zero());
|
return !m_rotation.isApprox(Vec3f::Zero());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Mouse3DController::State::has_translation_or_rotation() const
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(m_mutex);
|
||||||
|
return !m_translation.isApprox(Vec3d::Zero()) && !m_rotation.isApprox(Vec3f::Zero());
|
||||||
|
}
|
||||||
|
|
||||||
bool Mouse3DController::State::has_any_button() const
|
bool Mouse3DController::State::has_any_button() const
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(m_mutex);
|
std::lock_guard<std::mutex> lock(m_mutex);
|
||||||
for (int i = 0; i < _3DCONNEXION_BUTTONS_COUNT; ++i)
|
return !m_buttons.empty();
|
||||||
{
|
|
||||||
if (m_buttons[i])
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Mouse3DController::State::apply(GLCanvas3D& canvas)
|
bool Mouse3DController::State::apply(GLCanvas3D& canvas)
|
||||||
@ -116,12 +116,17 @@ bool Mouse3DController::State::apply(GLCanvas3D& canvas)
|
|||||||
|
|
||||||
if (has_any_button())
|
if (has_any_button())
|
||||||
{
|
{
|
||||||
if (m_buttons[0])
|
for (unsigned int i : m_buttons)
|
||||||
canvas.set_camera_zoom(1.0);
|
{
|
||||||
else if (m_buttons[1])
|
switch (i)
|
||||||
canvas.set_camera_zoom(-1.0);
|
{
|
||||||
|
case 0: { canvas.set_camera_zoom(1.0); break; }
|
||||||
|
case 1: { canvas.set_camera_zoom(-1.0); break; }
|
||||||
|
default: { break; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m_buttons = std::vector<bool>(_3DCONNEXION_BUTTONS_COUNT, false);
|
m_buttons.clear();
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -314,7 +319,7 @@ void Mouse3DController::collect_input()
|
|||||||
}
|
}
|
||||||
case Button:
|
case Button:
|
||||||
{
|
{
|
||||||
for (unsigned int i = 0; i < _3DCONNEXION_BUTTONS_COUNT; ++i)
|
for (unsigned int i = 0; i < _3DCONNEXION_MAX_BUTTONS_COUNT; ++i)
|
||||||
{
|
{
|
||||||
if (retrieved_data[1] & (0x1 << i))
|
if (retrieved_data[1] & (0x1 << i))
|
||||||
m_state.set_button(i);
|
m_state.set_button(i);
|
||||||
|
@ -26,7 +26,7 @@ class Mouse3DController
|
|||||||
|
|
||||||
Vec3d m_translation;
|
Vec3d m_translation;
|
||||||
Vec3f m_rotation;
|
Vec3f m_rotation;
|
||||||
std::vector<bool> m_buttons;
|
std::vector<unsigned int> m_buttons;
|
||||||
|
|
||||||
double m_translation_scale;
|
double m_translation_scale;
|
||||||
float m_rotation_scale;
|
float m_rotation_scale;
|
||||||
@ -40,8 +40,15 @@ class Mouse3DController
|
|||||||
|
|
||||||
bool has_translation() const;
|
bool has_translation() const;
|
||||||
bool has_rotation() const;
|
bool has_rotation() const;
|
||||||
|
bool has_translation_or_rotation() const;
|
||||||
bool has_any_button() const;
|
bool has_any_button() const;
|
||||||
|
|
||||||
|
double get_translation_scale() const { return m_translation_scale; }
|
||||||
|
void set_translation_scale(double scale) { m_translation_scale = scale; }
|
||||||
|
|
||||||
|
float get_rotation_scale() const { return m_rotation_scale; }
|
||||||
|
void set_rotation_scale(float scale) { m_rotation_scale = scale; }
|
||||||
|
|
||||||
// return true if any change to the camera took place
|
// return true if any change to the camera took place
|
||||||
bool apply(GLCanvas3D& canvas);
|
bool apply(GLCanvas3D& canvas);
|
||||||
};
|
};
|
||||||
@ -71,6 +78,7 @@ public:
|
|||||||
|
|
||||||
bool has_translation() const { return m_state.has_translation(); }
|
bool has_translation() const { return m_state.has_translation(); }
|
||||||
bool has_rotation() const { return m_state.has_rotation(); }
|
bool has_rotation() const { return m_state.has_rotation(); }
|
||||||
|
bool has_translation_or_rotation() const { return m_state.has_translation_or_rotation(); }
|
||||||
bool has_any_button() const { return m_state.has_any_button(); }
|
bool has_any_button() const { return m_state.has_any_button(); }
|
||||||
|
|
||||||
bool apply()
|
bool apply()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user