Fix crash on printer switch from stale filament/extruder indices (#14103)

Switching to a printer with fewer filaments (e.g. H2D -> X2D) threw
std::out_of_range in check_filament_printable. Clear stale per-volume
extruder config on count shrink and bound-check filament indices at the
read sites.
This commit is contained in:
SoftFever
2026-06-08 18:57:52 +08:00
committed by GitHub
parent 0d586b28c4
commit 1e1d9cbaf8
4 changed files with 33 additions and 3 deletions

View File

@@ -2573,6 +2573,12 @@ void ModelVolume::update_extruder_count(size_t extruder_count)
break;
}
}
// Clear a stale per-volume filament assignment that no longer exists after the extruder count
// shrank (e.g. printer switch to one with fewer filaments), so downstream readers never index
// per-filament config vectors out of range. Ported from BambuStudio (STUDIO-15763).
if (extruder_id() > extruder_count) {
this->config.erase("extruder");
}
}
void ModelVolume::update_extruder_count_when_delete_filament(size_t extruder_count, size_t filament_id, int replace_filament_id)
@@ -2584,6 +2590,11 @@ void ModelVolume::update_extruder_count_when_delete_filament(size_t extruder_cou
break;
}
}
// Same stale-assignment cleanup as update_extruder_count, for the filament-delete path.
// Ported from BambuStudio (STUDIO-15763).
if (extruder_id() > extruder_count) {
this->config.erase("extruder");
}
}
void ModelVolume::center_geometry_after_creation(bool update_source_offset)