Fix object list crash on click (#2823) (#4164)

This commit is contained in:
Noisyfox 2024-02-20 22:02:48 +08:00 committed by GitHub
parent b78e459705
commit a74a1d26fd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1246,7 +1246,7 @@ void ObjectList::list_manipulation(const wxPoint& mouse_pos, bool evt_context_me
toggle_printable_state(); toggle_printable_state();
else if (col_num == colSupportPaint) { else if (col_num == colSupportPaint) {
ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID(); ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID();
if (node->HasSupportPainting()) { if (node && node->HasSupportPainting()) {
GLGizmosManager& gizmos_mgr = wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager(); GLGizmosManager& gizmos_mgr = wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager();
if (gizmos_mgr.get_current_type() != GLGizmosManager::EType::FdmSupports) if (gizmos_mgr.get_current_type() != GLGizmosManager::EType::FdmSupports)
gizmos_mgr.open_gizmo(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) { else if (col_num == colColorPaint) {
if (wxGetApp().plater()->get_current_canvas3D()->get_canvas_type() != GLCanvas3D::CanvasAssembleView) { if (wxGetApp().plater()->get_current_canvas3D()->get_canvas_type() != GLCanvas3D::CanvasAssembleView) {
ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID(); ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)item.GetID();
if (node->HasColorPainting()) { if (node && node->HasColorPainting()) {
GLGizmosManager& gizmos_mgr = wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager(); GLGizmosManager& gizmos_mgr = wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager();
if (gizmos_mgr.get_current_type() != GLGizmosManager::EType::MmuSegmentation) if (gizmos_mgr.get_current_type() != GLGizmosManager::EType::MmuSegmentation)
gizmos_mgr.open_gizmo(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) { else if (col_num == colSinking) {
Plater * plater = wxGetApp().plater(); Plater * plater = wxGetApp().plater();
GLCanvas3D *cnv = plater->canvas3D(); GLCanvas3D *cnv = plater->canvas3D();
Plater::TakeSnapshot(plater, "Shift objects to bed");
int obj_idx, vol_idx; int obj_idx, vol_idx;
get_selected_item_indexes(obj_idx, vol_idx, item); get_selected_item_indexes(obj_idx, vol_idx, item);
(*m_objects)[obj_idx]->ensure_on_bed(); if (obj_idx != -1) {
cnv->reload_scene(true, true); Plater::TakeSnapshot(plater, "Shift objects to bed");
update_info_items(obj_idx); (*m_objects)[obj_idx]->ensure_on_bed();
notify_instance_updated(obj_idx); cnv->reload_scene(true, true);
update_info_items(obj_idx);
notify_instance_updated(obj_idx);
}
} }
else if (col_num == colEditing) { else if (col_num == colEditing) {
//show_context_menu(evt_context_menu); //show_context_menu(evt_context_menu);