From 5c05e036c439573f709af815850b27826d50f567 Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Thu, 15 Jan 2026 13:02:58 +0200 Subject: [PATCH] =?UTF-8?q?Fix:=20Apply=20bed=E2=80=93filament=20compatibi?= =?UTF-8?q?lity=20checks=20to=20all=20printers=20(#11432)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### What was the issue? The check that validates whether a filament is compatible with the selected build plate type was only executed for Bambu Lab printers. Other printers skipped this entirely, even though they can also use multiple plate types with different temperature requirements. This caused cases where: - incompatible filament/plate combinations went unnoticed, - users received no warning even when the bed type clearly couldn’t support the selected filament. ### What’s changed? - The validation block extends beyond BambuLab printers. - Now all printers get the same compatibility check: - if a filament requires a bed temperature not supported by the chosen plate, - Orca shows the same clear error message as it does for BBL printers. - Show the selected filament preset name (alias if present) in bed/filament mismatch warnings instead of substituting the parent preset. ### Why this helps - Consistent behavior across all printer brands. - Prevents invalid filament/plate setups that could cause print failures. - Makes plate presets more robust and predictable for custom and community printers. ### Notes - No behavior changes for BBL printers — they keep the existing checks. - Other printers now benefit from them too. --- src/libslic3r/Print.cpp | 3 ++- src/slic3r/GUI/Plater.cpp | 16 ++++++---------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 91236b5144..f2e0de9cc7 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1571,7 +1571,8 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* const ConfigOptionDef* bed_type_def = print_config_def.get("curr_bed_type"); assert(bed_type_def != nullptr); - if (is_BBL_printer()) { + // ORCA: check if bed type is compatible with all selected filaments + if (is_BBL_printer() || m_config.support_multi_bed_types.value) { const t_config_enum_values* bed_type_keys_map = bed_type_def->enum_keys_map; for (unsigned int extruder_id : extruders) { const ConfigOptionInts* bed_temp_opt = m_config.option(get_bed_temp_key(m_config.curr_bed_type)); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 5b40d2feeb..5da3520660 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -17592,20 +17592,16 @@ void Plater::post_process_string_object_exception(StringObjectException &err) int extruder_id = atoi(err.params[2].c_str()) - 1; if (extruder_id < preset_bundle->filament_presets.size()) { std::string filament_name = preset_bundle->filament_presets[extruder_id]; + // ORCA: Prefer the selected preset's alias/name and trim any @Printer suffix for display. for (auto filament_it = preset_bundle->filaments.begin(); filament_it != preset_bundle->filaments.end(); filament_it++) { if (filament_it->name == filament_name) { - if (filament_it->is_system) { + if (!filament_it->alias.empty()) { filament_name = filament_it->alias; } else { - auto preset = preset_bundle->filaments.get_preset_base(*filament_it); - if (preset && !preset->alias.empty()) { - filament_name = preset->alias; - } else { - char target = '@'; - size_t pos = filament_name.find(target); - if (pos != std::string::npos) { - filament_name = filament_name.substr(0, pos - 1); - } + char target = '@'; + size_t pos = filament_name.find(target); + if (pos != std::string::npos) { + filament_name = filament_name.substr(0, pos - 1); } } break;