FIX: crash when sync printer status

jira: none
Change-Id: I7198f34b12c720519cc2e092254572fe6ee50778
This commit is contained in:
zhimin.zeng 2024-12-23 21:14:11 +08:00 committed by lane.wei
parent 2f271463c9
commit 6aacef93af
4 changed files with 19 additions and 9 deletions

View File

@ -3836,6 +3836,14 @@ std::pair<PresetsConfigSubstitutions, size_t> PresetBundle::load_vendor_configs_
return std::make_pair(std::move(substitutions), presets_loaded);
}
void PresetBundle::on_extruders_count_changed(int extruders_count)
{
printers.get_edited_preset().set_num_extruders(extruders_count);
update_multi_material_filament_presets();
reset_default_nozzle_volume_type();
extruder_ams_counts.resize(extruders_count);
}
void PresetBundle::update_multi_material_filament_presets(size_t to_delete_filament_id)
{
if (printers.get_edited_preset().printer_technology() != ptFFF)

View File

@ -227,6 +227,8 @@ public:
// update size and content of filament_presets.
void update_multi_material_filament_presets(size_t to_delete_filament_id = size_t(-1));
void on_extruders_count_changed(int extruder_count);
// Update the is_compatible flag of all print and filament presets depending on whether they are marked
// as compatible with the currently selected printer (and print in case of filament presets).
// Also updates the is_visible flag of each preset.

View File

@ -1235,12 +1235,14 @@ void Sidebar::priv::update_sync_status(const MachineObject *obj)
}
std::vector<std::map<int, int>> extruder_ams_counts = wxGetApp().preset_bundle->extruder_ams_counts;
for (size_t i = 0; i < extruder_ams_counts.size(); ++i) {
for (auto iter = extruder_ams_counts[i].begin(); iter != extruder_ams_counts[i].end(); ++iter){
if (iter->first == 4)
extruder_infos[i].ams_4 = iter->second;
if (iter->first == 1)
extruder_infos[i].ams_1 = iter->second;
if (extruder_ams_counts.size() >= extruder_nums) {
for (size_t i = 0; i < extruder_nums; ++i) {
for (auto iter = extruder_ams_counts[i].begin(); iter != extruder_ams_counts[i].end(); ++iter) {
if (iter->first == 4)
extruder_infos[i].ams_4 = iter->second;
if (iter->first == 1)
extruder_infos[i].ams_1 = iter->second;
}
}
}

View File

@ -3859,9 +3859,7 @@ void TabPrinter::extruders_count_changed(size_t extruders_count)
bool is_count_changed = false;
if (m_extruders_count != extruders_count) {
m_extruders_count = extruders_count;
m_preset_bundle->printers.get_edited_preset().set_num_extruders(extruders_count);
m_preset_bundle->update_multi_material_filament_presets();
m_preset_bundle->reset_default_nozzle_volume_type();
m_preset_bundle->on_extruders_count_changed(extruders_count);
is_count_changed = true;
wxGetApp().plater()->get_partplate_list().on_extruder_count_changed((int)m_extruders_count);