From a74a1d26fd0b16fd55bdd5173fe2c5e9fb417f49 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Tue, 20 Feb 2024 22:02:48 +0800 Subject: [PATCH] Fix object list crash on click (#2823) (#4164) --- src/slic3r/GUI/GUI_ObjectList.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index be90c40790..0f1f753acb 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -1246,7 +1246,7 @@ void ObjectList::list_manipulation(const wxPoint& mouse_pos, bool evt_context_me toggle_printable_state(); else if (col_num == colSupportPaint) { ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID(); - if (node->HasSupportPainting()) { + if (node && node->HasSupportPainting()) { GLGizmosManager& gizmos_mgr = wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager(); if (gizmos_mgr.get_current_type() != GLGizmosManager::EType::FdmSupports) gizmos_mgr.open_gizmo(GLGizmosManager::EType::FdmSupports); @@ -1257,7 +1257,7 @@ void ObjectList::list_manipulation(const wxPoint& mouse_pos, bool evt_context_me else if (col_num == colColorPaint) { if (wxGetApp().plater()->get_current_canvas3D()->get_canvas_type() != GLCanvas3D::CanvasAssembleView) { ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID(); - if (node->HasColorPainting()) { + if (node && node->HasColorPainting()) { GLGizmosManager& gizmos_mgr = wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager(); if (gizmos_mgr.get_current_type() != GLGizmosManager::EType::MmuSegmentation) gizmos_mgr.open_gizmo(GLGizmosManager::EType::MmuSegmentation); @@ -1269,13 +1269,15 @@ void ObjectList::list_manipulation(const wxPoint& mouse_pos, bool evt_context_me else if (col_num == colSinking) { Plater * plater = wxGetApp().plater(); GLCanvas3D *cnv = plater->canvas3D(); - Plater::TakeSnapshot(plater, "Shift objects to bed"); int obj_idx, vol_idx; get_selected_item_indexes(obj_idx, vol_idx, item); - (*m_objects)[obj_idx]->ensure_on_bed(); - cnv->reload_scene(true, true); - update_info_items(obj_idx); - notify_instance_updated(obj_idx); + if (obj_idx != -1) { + Plater::TakeSnapshot(plater, "Shift objects to bed"); + (*m_objects)[obj_idx]->ensure_on_bed(); + cnv->reload_scene(true, true); + update_info_items(obj_idx); + notify_instance_updated(obj_idx); + } } else if (col_num == colEditing) { //show_context_menu(evt_context_menu);