From 21fdd7028fda2e1eb0da70ab6d120f8936e2a5f8 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 3 Sep 2026 11:25:49 +0800 Subject: [PATCH] Fix spurious slice-validation failures when checking all vendors The sweep now validates each printer with the filament that printer ships, so a run over every vendor reports what a single-vendor run does. Validator only - no change to slicing output or shipped profiles. --- src/dev-utils/OrcaSlicer_profile_validator.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/dev-utils/OrcaSlicer_profile_validator.cpp b/src/dev-utils/OrcaSlicer_profile_validator.cpp index 49a38cd1c4..21c6b33180 100644 --- a/src/dev-utils/OrcaSlicer_profile_validator.cpp +++ b/src/dev-utils/OrcaSlicer_profile_validator.cpp @@ -175,6 +175,17 @@ void select_printer_default_presets(PresetBundle &bundle) if (const auto *def_fil = printer_preset.config.option("default_filament_profile"); def_fil != nullptr && !def_fil->values.empty()) bundle.filaments.select_preset_by_name(def_fil->values.front(), /*force=*/true); + // Re-seed the per-slot filament list from that selection, or the sweep's result depends on the + // printer sliced before it. Once there are 2+ slots, full_config() builds the filament config from + // filament_presets and ignores the selected preset (PresetBundle::full_fff_config), while + // update_compatible() only replaces a slot that has gone *incompatible* - and when it does, it ranks + // the outgoing preset's alias, then its filament type, above the printer's own default. The sweep + // grows every printer to 2 slots and update_multi_material_filament_presets() never shrinks them, so + // a material picked up on the first printer rides the whole run. With all vendors loaded the first + // printer inherits a TPU (the load-time pick is whichever filament sorts first), the type match + // re-resolves it to "Generic TPU @System", and its alias then pins every later printer to that + // vendor's own "Generic TPU @..." - which the BBL dual-nozzle profiles rightly refuse to group. + bundle.filament_presets.assign(1, bundle.filaments.get_selected_preset_name()); } // The vendor/printer currently being sliced, stamped onto every engine log record by the sink below so