diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 8b38dabbe..a5b6866ab 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -3180,7 +3180,9 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) return; } - if (evt.LeftDown() && (evt.ShiftDown() || evt.AltDown()) && m_picking_enabled) { + // BBS: define Alt key to enable volume selection mode + m_selection.set_volume_selection_mode(evt.AltDown() ? Selection::Volume : Selection::Instance); + if (evt.LeftDown() && evt.ShiftDown() && m_picking_enabled) { if (m_gizmos.get_current_type() != GLGizmosManager::SlaSupports && m_gizmos.get_current_type() != GLGizmosManager::FdmSupports && m_gizmos.get_current_type() != GLGizmosManager::Seam diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 374894a50..d9db9e0f3 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -766,6 +766,7 @@ bool AssembleView::init(wxWindow* parent, Bed3D& bed, Model* model, DynamicPrint // BBS: set volume_selection_mode to Volume m_canvas->get_selection().set_volume_selection_mode(Selection::Volume); + m_canvas->get_selection().lock_volume_selection_mode(); wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); main_sizer->Add(m_canvas_widget, 1, wxALL | wxEXPAND, 0); diff --git a/src/slic3r/GUI/Selection.hpp b/src/slic3r/GUI/Selection.hpp index 5c24160f9..96a98e5ab 100644 --- a/src/slic3r/GUI/Selection.hpp +++ b/src/slic3r/GUI/Selection.hpp @@ -226,6 +226,7 @@ private: // BBS EMode m_volume_selection_mode{ Instance }; + bool m_volume_selection_locked { false }; public: Selection(); @@ -343,7 +344,10 @@ public: void translate(unsigned int object_idx, unsigned int instance_idx, const Vec3d& displacement); //BBS: add partplate related logic void notify_instance_update(int object_idx, int instance_idx); - void set_volume_selection_mode(EMode mode) { m_volume_selection_mode = mode; } + // BBS + void set_volume_selection_mode(EMode mode) { if (!m_volume_selection_locked) m_volume_selection_mode = mode; } + void lock_volume_selection_mode() { m_volume_selection_locked = true; } + void unlock_volume_selection_mode() { m_volume_selection_locked = false; } void erase();