From a2a62c30f7faf5c1bb10941b0fc9370e608bd4e1 Mon Sep 17 00:00:00 2001 From: yw4z Date: Sun, 26 Apr 2026 15:29:56 +0300 Subject: [PATCH] Fix: Crash when changing type of SVG / TEXT volume to Support Blocker / Enforcer (#13120) init --- src/slic3r/GUI/GUI_Factories.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index f89fa8a6d0..ead0d0debb 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -777,17 +777,37 @@ wxMenuItem* MenuFactory::append_menu_item_change_type(wxMenu* menu) // Update checkmark dynamically when menu is shown - check all selected volumes m_parent->Bind(wxEVT_UPDATE_UI, [type = info.type](wxUpdateUIEvent& evt) { + auto model = obj_list()->GetModel(); + auto objs = obj_list()->objects(); bool has_type = false; wxDataViewItemArray sels; obj_list()->GetSelections(sels); for (auto item : sels) { - ModelVolumeType vol_type = obj_list()->GetModel()->GetVolumeType(item); + ModelVolumeType vol_type = model->GetVolumeType(item); if (vol_type == type) { has_type = true; break; } } evt.Check(has_type); + + // ORCA Fix crash caused by SVG/TEXT volumes cant be Support Enforcer/Blocker type + for (auto item : sels) { + if (model->GetItemType(item) == itVolume){ + auto vol_idx = model->GetVolumeIdByItem(item); + auto obj_idx = model->GetObjectIdByItem(item); + if (vol_idx < 0 || obj_idx < 0) + continue; + + auto vol = (*objs)[obj_idx]->volumes[vol_idx]; + + // disable Support Enforcer/Blocker if selection contains svg or text + if (vol != nullptr && (vol->is_svg() || vol->is_text()) && (type == ModelVolumeType::SUPPORT_BLOCKER || type == ModelVolumeType::SUPPORT_ENFORCER)){ + evt.Enable(false); + break; + } + } + } }, item->GetId()); }