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:
authorLukas Matena <lukasmatena@seznam.cz>2020-02-03 17:20:16 +0300
committerLukas Matena <lukasmatena@seznam.cz>2020-02-03 17:20:16 +0300
commita1d4dab9995a3fb41021fa3a87dc96b65d22113b (patch)
tree685b7e4b885e5e3ac465e3a4cad06bf1df72265d /src/slic3r/GUI/Gizmos
parentd407fda43326f4a767c85b6b7a4c900fe70a4e5b (diff)
parent8453c8848238c1bb20bc7dc85cad4763203534c9 (diff)
Merge branch 'master' into lm_drilling_backend_rebased
Diffstat (limited to 'src/slic3r/GUI/Gizmos')
-rw-r--r--src/slic3r/GUI/Gizmos/GLGizmoCut.cpp4
-rw-r--r--src/slic3r/GUI/Gizmos/GLGizmoCut.hpp4
-rw-r--r--src/slic3r/GUI/Gizmos/GLGizmosManager.cpp69
3 files changed, 68 insertions, 9 deletions
diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp
index e98446749..52d710249 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp
@@ -9,6 +9,8 @@
#include <wx/stattext.h>
#include <wx/sizer.h>
+#include <algorithm>
+
#include "slic3r/GUI/GUI_App.hpp"
@@ -189,7 +191,7 @@ void GLGizmoCut::update_max_z(const Selection& selection) const
void GLGizmoCut::set_cut_z(double cut_z) const
{
// Clamp the plane to the object's bounding box
- m_cut_z = std::max(0.0, std::min(m_max_z, cut_z));
+ m_cut_z = std::clamp(cut_z, 0.0, m_max_z);
}
void GLGizmoCut::perform_cut(const Selection& selection)
diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp
index 6e5738a42..b6e10861f 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp
@@ -25,6 +25,9 @@ class GLGizmoCut : public GLGizmoBase
public:
GLGizmoCut(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id);
+ double get_cut_z() const { return m_cut_z; }
+ void set_cut_z(double cut_z) const;
+
protected:
virtual bool on_init();
virtual void on_load(cereal::BinaryInputArchive& ar) { ar(m_cut_z, m_keep_upper, m_keep_lower, m_rotate_lower); }
@@ -40,7 +43,6 @@ protected:
private:
void update_max_z(const Selection& selection) const;
- void set_cut_z(double cut_z) const;
void perform_cut(const Selection& selection);
double calc_projection(const Linef3& mouse_ray) const;
};
diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp
index db459dd7d..ae47fcfc8 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp
@@ -500,7 +500,7 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt)
processed = true;
}
else if (evt.Dragging() && (m_parent.get_move_volume_id() != -1) && (m_current == SlaSupports || m_current == Hollow))
- // don't allow dragging objects with the Sla gizmo on
+ // don't allow dragging objects with the Sla gizmo on
processed = true;
else if (evt.Dragging() && (m_current == SlaSupports || m_current == Hollow) && gizmo_event(SLAGizmoEventType::Dragging, mouse_pos, evt.ShiftDown(), evt.AltDown(), evt.ControlDown()))
{
@@ -557,12 +557,9 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt)
else if (evt.LeftUp() && is_dragging())
{
switch (m_current) {
- case Move : m_parent.do_move(L("Gizmo-Move"));
- break;
- case Scale : m_parent.do_scale(L("Gizmo-Scale"));
- break;
- case Rotate : m_parent.do_rotate(L("Gizmo-Rotate"));
- break;
+ case Move : m_parent.do_move(L("Gizmo-Move")); break;
+ case Scale : m_parent.do_scale(L("Gizmo-Scale")); break;
+ case Rotate : m_parent.do_rotate(L("Gizmo-Rotate")); break;
default : break;
}
@@ -779,6 +776,64 @@ bool GLGizmosManager::on_key(wxKeyEvent& evt)
processed = true;
}
}
+ else if (m_current == Move)
+ {
+ auto do_move = [this, &processed](const Vec3d& displacement) {
+ Selection& selection = m_parent.get_selection();
+ selection.start_dragging();
+ selection.translate(displacement);
+ wxGetApp().obj_manipul()->set_dirty();
+ m_parent.do_move(L("Gizmo-Move"));
+ m_parent.set_as_dirty();
+ processed = true;
+ };
+
+ switch (keyCode)
+ {
+ case WXK_NUMPAD_LEFT: case WXK_LEFT: { do_move(-Vec3d::UnitX()); break; }
+ case WXK_NUMPAD_RIGHT: case WXK_RIGHT: { do_move(Vec3d::UnitX()); break; }
+ case WXK_NUMPAD_UP: case WXK_UP: { do_move(Vec3d::UnitY()); break; }
+ case WXK_NUMPAD_DOWN: case WXK_DOWN: { do_move(-Vec3d::UnitY()); break; }
+ default: { break; }
+ }
+ }
+ else if (m_current == Rotate)
+ {
+ auto do_rotate = [this, &processed](const Vec3d& rotation) {
+ Selection& selection = m_parent.get_selection();
+ selection.start_dragging();
+ selection.rotate(rotation, TransformationType(TransformationType::World_Relative_Joint));
+ wxGetApp().obj_manipul()->set_dirty();
+ m_parent.do_rotate(L("Gizmo-Rotate"));
+ m_parent.set_as_dirty();
+ processed = true;
+ };
+
+ switch (keyCode)
+ {
+ case WXK_NUMPAD_LEFT: case WXK_LEFT: { do_rotate(Vec3d(0.0, 0.0, 0.5 * M_PI)); break; }
+ case WXK_NUMPAD_RIGHT: case WXK_RIGHT: { do_rotate(-Vec3d(0.0, 0.0, 0.5 * M_PI)); break; }
+ case WXK_NUMPAD_UP: case WXK_UP: { do_rotate(Vec3d(0.0, 0.0, 0.25 * M_PI)); break; }
+ case WXK_NUMPAD_DOWN: case WXK_DOWN: { do_rotate(-Vec3d(0.0, 0.0, 0.25 * M_PI)); break; }
+ default: { break; }
+ }
+ }
+ else if (m_current == Cut)
+ {
+ auto do_move = [this, &processed](double delta_z) {
+ GLGizmoCut* cut = dynamic_cast<GLGizmoCut*>(get_current());
+ cut->set_cut_z(delta_z + cut->get_cut_z());
+ m_parent.set_as_dirty();
+ processed = true;
+ };
+
+ switch (keyCode)
+ {
+ case WXK_NUMPAD_UP: case WXK_UP: { do_move(1.0); break; }
+ case WXK_NUMPAD_DOWN: case WXK_DOWN: { do_move(-1.0); break; }
+ default: { break; }
+ }
+ }
// if (processed)
// m_parent.set_cursor(GLCanvas3D::Standard);