Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEnrico Turri <enricoturri@seznam.cz>2020-01-15 14:49:34 +0300
committerEnrico Turri <enricoturri@seznam.cz>2020-01-15 14:49:34 +0300
commit62e60bcb43dcf147596b5ae466afb6c04e6bcb2a (patch)
tree07efd3fa8083b8af2ef8b710c5ff1bdec27c3185 /src/slic3r/GUI/Mouse3DController.cpp
parent536514ff03fadec4fa92776f3fb81e0e9cec17ef (diff)
Six degrees of freedom camera - 1st installment
Diffstat (limited to 'src/slic3r/GUI/Mouse3DController.cpp')
-rw-r--r--src/slic3r/GUI/Mouse3DController.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/slic3r/GUI/Mouse3DController.cpp b/src/slic3r/GUI/Mouse3DController.cpp
index 8485c4b27..3dd12e021 100644
--- a/src/slic3r/GUI/Mouse3DController.cpp
+++ b/src/slic3r/GUI/Mouse3DController.cpp
@@ -168,12 +168,17 @@ bool Mouse3DController::State::apply(Camera& camera)
if (has_rotation())
{
+#if ENABLE_6DOF_CAMERA
+ Vec3d rotation = (m_rotation_params.scale * m_rotation.queue.front()).cast<double>();
+ camera.rotate_local_around_target(Vec3d(Geometry::deg2rad(rotation(0)), Geometry::deg2rad(-rotation(2)), Geometry::deg2rad(-rotation(1))));
+#else
const Vec3f& rotation = m_rotation.queue.front();
float theta = m_rotation_params.scale * rotation(0);
float phi = m_rotation_params.scale * rotation(2);
float sign = camera.inverted_phi ? -1.0f : 1.0f;
camera.phi += sign * phi;
camera.set_theta(camera.get_theta() + theta, wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() != ptSLA);
+#endif // ENABLE_6DOF_CAMERA
m_rotation.queue.pop();
ret = true;
}
@@ -877,9 +882,15 @@ bool Mouse3DController::handle_packet_translation(const DataPacket& packet)
bool Mouse3DController::handle_packet_rotation(const DataPacket& packet, unsigned int first_byte)
{
double deadzone = (double)m_state.get_rotation_deadzone();
+#if ENABLE_6DOF_CAMERA
+ Vec3f rotation((float)convert_input(packet[first_byte + 0], packet[first_byte + 1], deadzone),
+ (float)convert_input(packet[first_byte + 2], packet[first_byte + 3], deadzone),
+ (float)convert_input(packet[first_byte + 4], packet[first_byte + 5], deadzone));
+#else
Vec3f rotation(-(float)convert_input(packet[first_byte + 0], packet[first_byte + 1], deadzone),
(float)convert_input(packet[first_byte + 2], packet[first_byte + 3], deadzone),
-(float)convert_input(packet[first_byte + 4], packet[first_byte + 5], deadzone));
+#endif // ENABLE_6DOF_CAMERA
if (!rotation.isApprox(Vec3f::Zero()))
{