From 2e9f404df3ad8d1db41ce66a5470962a921fa056 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Wed, 14 Nov 2018 13:29:57 +0100 Subject: [PATCH] Snap in gizmo move 3D when holding Shift pressed --- src/slic3r/GUI/GLGizmo.cpp | 5 +++++ src/slic3r/GUI/GLGizmo.hpp | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/src/slic3r/GUI/GLGizmo.cpp b/src/slic3r/GUI/GLGizmo.cpp index 34627ca68a..6c96d821ae 100644 --- a/src/slic3r/GUI/GLGizmo.cpp +++ b/src/slic3r/GUI/GLGizmo.cpp @@ -1004,6 +1004,7 @@ const double GLGizmoMove3D::Offset = 10.0; GLGizmoMove3D::GLGizmoMove3D(GLCanvas3D& parent) : GLGizmoBase(parent) , m_displacement(Vec3d::Zero()) + , m_snap_step(1.0) , m_starting_drag_position(Vec3d::Zero()) , m_starting_box_center(Vec3d::Zero()) , m_starting_box_bottom_center(Vec3d::Zero()) @@ -1160,6 +1161,10 @@ double GLGizmoMove3D::calc_projection(const UpdateData& data) const // finds projection of the vector along the staring direction projection = inters_vec.dot(starting_vec.normalized()); } + + if (data.shift_down) + projection = m_snap_step * (double)std::round(projection / m_snap_step); + return projection; } diff --git a/src/slic3r/GUI/GLGizmo.hpp b/src/slic3r/GUI/GLGizmo.hpp index d64577f2c8..7156c0b02a 100644 --- a/src/slic3r/GUI/GLGizmo.hpp +++ b/src/slic3r/GUI/GLGizmo.hpp @@ -319,6 +319,9 @@ class GLGizmoMove3D : public GLGizmoBase static const double Offset; Vec3d m_displacement; + + double m_snap_step; + Vec3d m_starting_drag_position; Vec3d m_starting_box_center; Vec3d m_starting_box_bottom_center; @@ -326,6 +329,9 @@ class GLGizmoMove3D : public GLGizmoBase public: explicit GLGizmoMove3D(GLCanvas3D& parent); + double get_snap_step(double step) const { return m_snap_step; } + void set_snap_step(double step) { m_snap_step = step; } + const Vec3d& get_displacement() const { return m_displacement; } protected: