diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 0b2aeaf12..a6160b8e7 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2113,6 +2113,7 @@ void GLCanvas3D::set_selected_visible(bool visible) volume->render_color[3] = volume->color[3]; volume->force_native_color = !visible; } + m_dirty = true; } void GLCanvas3D::delete_selected() diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 11bc7613a..746000cf0 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -1322,17 +1322,28 @@ void ObjectList::show_context_menu(const bool evt_context_menu) const ItemType type = m_objects_model->GetItemType(item); if (!(type & (itPlate | itObject | itVolume | itInstance))) return; - - menu = type & itPlate ? plater->plate_menu() : - type & itInstance ? plater->instance_menu() : - type & itVolume ? plater->part_menu() : - printer_technology() == ptFFF ? plater->object_menu() : plater->sla_object_menu(); - plater->SetPlateIndexByRightMenuInLeftUI(-1); - if (type & itPlate) { - int plate_idx = -1; - const ItemType type0 = m_objects_model->GetItemType(item, plate_idx); - if (plate_idx >= 0) { - plater->SetPlateIndexByRightMenuInLeftUI(plate_idx); + if (wxGetApp().plater()->get_current_canvas3D()->get_canvas_type() == GLCanvas3D::ECanvasType::CanvasAssembleView) { + if (type & itPlate) { return; } + if (type & itVolume){ + ModelVolumeType volume_type = m_objects_model->GetVolumeType(item); + if (volume_type != ModelVolumeType::MODEL_PART) + return; + } + menu = plater->assemble_multi_selection_menu(); + } + else { + menu = type & itPlate ? plater->plate_menu() : + type & itInstance ? plater->instance_menu() : + type & itVolume ? plater->part_menu() : + printer_technology() == ptFFF ? plater->object_menu() : + plater->sla_object_menu(); + plater->SetPlateIndexByRightMenuInLeftUI(-1); + if (type & itPlate) { + int plate_idx = -1; + const ItemType type0 = m_objects_model->GetItemType(item, plate_idx); + if (plate_idx >= 0) { + plater->SetPlateIndexByRightMenuInLeftUI(plate_idx); + } } } } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 6ba55f571..01d7e63e0 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -7020,7 +7020,9 @@ void Plater::priv::on_right_click(RBtnEvent& evt) if (evt.data.second) { // right button was clicked on empty space if (!get_selection().is_empty()) // several objects are selected in 3DScene return; - menu = menus.default_menu(); + if (current_panel != assemble_view) { + menu = menus.default_menu(); + } } else { if (current_panel == assemble_view) { @@ -13511,6 +13513,7 @@ wxMenu* Plater::default_menu() { return p->menus.default_menu(); wxMenu* Plater::instance_menu() { return p->menus.instance_menu(); } wxMenu* Plater::layer_menu() { return p->menus.layer_menu(); } wxMenu* Plater::multi_selection_menu() { return p->menus.multi_selection_menu(); } +wxMenu *Plater::assemble_multi_selection_menu() { return p->menus.assemble_multi_selection_menu(); } int Plater::GetPlateIndexByRightMenuInLeftUI() { return p->m_is_RightClickInLeftUI; } void Plater::SetPlateIndexByRightMenuInLeftUI(int index) { p->m_is_RightClickInLeftUI = index; } SuppressBackgroundProcessingUpdate::SuppressBackgroundProcessingUpdate() : diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 621f55c82..d9b3ff6e6 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -711,6 +711,7 @@ public: wxMenu* instance_menu(); wxMenu* layer_menu(); wxMenu* multi_selection_menu(); + wxMenu* assemble_multi_selection_menu(); int GetPlateIndexByRightMenuInLeftUI(); void SetPlateIndexByRightMenuInLeftUI(int); static bool has_illegal_filename_characters(const wxString& name);