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); 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) void PresetBundle::update_multi_material_filament_presets(size_t to_delete_filament_id)
{ {
if (printers.get_edited_preset().printer_technology() != ptFFF) if (printers.get_edited_preset().printer_technology() != ptFFF)

View File

@ -227,6 +227,8 @@ public:
// update size and content of filament_presets. // update size and content of filament_presets.
void update_multi_material_filament_presets(size_t to_delete_filament_id = size_t(-1)); 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 // 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). // as compatible with the currently selected printer (and print in case of filament presets).
// Also updates the is_visible flag of each preset. // 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; 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) { if (extruder_ams_counts.size() >= extruder_nums) {
for (auto iter = extruder_ams_counts[i].begin(); iter != extruder_ams_counts[i].end(); ++iter){ for (size_t i = 0; i < extruder_nums; ++i) {
if (iter->first == 4) for (auto iter = extruder_ams_counts[i].begin(); iter != extruder_ams_counts[i].end(); ++iter) {
extruder_infos[i].ams_4 = iter->second; if (iter->first == 4)
if (iter->first == 1) extruder_infos[i].ams_4 = iter->second;
extruder_infos[i].ams_1 = 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; bool is_count_changed = false;
if (m_extruders_count != extruders_count) { if (m_extruders_count != extruders_count) {
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->on_extruders_count_changed(extruders_count);
m_preset_bundle->update_multi_material_filament_presets();
m_preset_bundle->reset_default_nozzle_volume_type();
is_count_changed = true; is_count_changed = true;
wxGetApp().plater()->get_partplate_list().on_extruder_count_changed((int)m_extruders_count); wxGetApp().plater()->get_partplate_list().on_extruder_count_changed((int)m_extruders_count);