From 89aa62f8b4cd11fa10a898956f1c57ae1ef64a70 Mon Sep 17 00:00:00 2001 From: "zhou.xu" Date: Wed, 26 Mar 2025 20:25:26 +0800 Subject: [PATCH] ENH:When the AMS option is turned on or off, update the correct thumbnail jira: none Change-Id: Ia001e4baa7de72ab077cf0fb76c45d4cb8bac088 --- src/slic3r/GUI/AmsMappingPopup.cpp | 152 +++++++++++++-------------- src/slic3r/GUI/AmsMappingPopup.hpp | 2 + src/slic3r/GUI/SelectMachine.cpp | 74 +++++++------ src/slic3r/GUI/SelectMachine.hpp | 3 +- src/slic3r/GUI/SyncAmsInfoDialog.cpp | 50 +-------- src/slic3r/GUI/SyncAmsInfoDialog.hpp | 1 - 6 files changed, 121 insertions(+), 161 deletions(-) diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index bded59a12..fb2f85879 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -732,6 +732,10 @@ void AmsMapingPopup::show_reset_button() { m_reset_btn->Show(); } +void AmsMapingPopup::set_only_show_ext_spool(bool flag) { + m_only_show_ext_spool = flag; +} + void AmsMapingPopup::msw_rescale() { m_left_extra_slot->msw_rescale(); @@ -1078,100 +1082,94 @@ void AmsMapingPopup::update(MachineObject* obj, const std::vector& } } + if (!m_only_show_ext_spool) { + /*ams*/ + bool has_left_ams = false, has_right_ams = false; + std::list left_one_slot_containers; + std::list right_one_slot_containers; + std::vector left_four_slots_containers; + std::vector right_four_slot_containers; + for (std::map::iterator ams_iter = obj->amsList.begin(); ams_iter != obj->amsList.end(); ams_iter++) { + int ams_indx = atoi(ams_iter->first.c_str()); + int ams_type = ams_iter->second->type; + int nozzle_id = ams_iter->second->nozzle; - /*ams*/ - bool has_left_ams = false, has_right_ams = false; - std::list left_one_slot_containers; - std::list right_one_slot_containers; - std::vector left_four_slots_containers; - std::vector right_four_slot_containers; - for (std::map::iterator ams_iter = obj->amsList.begin(); ams_iter != obj->amsList.end(); ams_iter++) { + if (ams_type >= 1 || ams_type <= 3) { // 1:ams 2:ams-lite 3:n3f - int ams_indx = atoi(ams_iter->first.c_str()); - int ams_type = ams_iter->second->type; - int nozzle_id = ams_iter->second->nozzle; + auto sizer_mapping_list = new wxBoxSizer(wxHORIZONTAL); + auto ams_mapping_item_container = new MappingContainer(nozzle_id == 0 ? m_right_marea_panel : m_left_marea_panel, ams_iter->second->get_ams_device_name(), + ams_iter->second->trayList.size()); + ams_mapping_item_container->SetName(nozzle_id == 0 ? m_right_marea_panel->GetName() : m_left_marea_panel->GetName()); + ams_mapping_item_container->SetSizer(sizer_mapping_list); + ams_mapping_item_container->Layout(); - if (ams_type >=1 || ams_type <= 3) { //1:ams 2:ams-lite 3:n3f + m_has_unmatch_filament = false; - auto sizer_mapping_list = new wxBoxSizer(wxHORIZONTAL); - auto ams_mapping_item_container = new MappingContainer(nozzle_id == 0 ? m_right_marea_panel : m_left_marea_panel, - ams_iter->second->get_ams_device_name(), ams_iter->second->trayList.size()); - ams_mapping_item_container->SetName(nozzle_id == 0 ? m_right_marea_panel->GetName() : m_left_marea_panel->GetName()); - ams_mapping_item_container->SetSizer(sizer_mapping_list); - ams_mapping_item_container->Layout(); + BOOST_LOG_TRIVIAL(trace) << "ams_mapping ams id " << ams_iter->first.c_str(); - m_has_unmatch_filament = false; + Ams * ams_group = ams_iter->second; + std::vector tray_datas; + std::map::iterator tray_iter; - BOOST_LOG_TRIVIAL(trace) << "ams_mapping ams id " << ams_iter->first.c_str(); + for (tray_iter = ams_group->trayList.begin(); tray_iter != ams_group->trayList.end(); tray_iter++) { + AmsTray *tray_data = tray_iter->second; + TrayData td; - Ams* ams_group = ams_iter->second; - std::vector tray_datas; - std::map::iterator tray_iter; + td.id = ams_indx * AMS_TOTAL_COUNT + atoi(tray_data->id.c_str()); + td.ams_id = std::stoi(ams_iter->second->id); + td.slot_id = std::stoi(tray_iter->second->id); - for (tray_iter = ams_group->trayList.begin(); tray_iter != ams_group->trayList.end(); tray_iter++) { - AmsTray* tray_data = tray_iter->second; - TrayData td; - - td.id = ams_indx * AMS_TOTAL_COUNT + atoi(tray_data->id.c_str()); - td.ams_id = std::stoi(ams_iter->second->id); - td.slot_id = std::stoi(tray_iter->second->id); - - if (!tray_data->is_exists) { - td.type = EMPTY; - } - else { - if (!tray_data->is_tray_info_ready()) { - td.type = THIRD; - } - else { - td.type = NORMAL; - td.remain = tray_data->remain; - td.colour = AmsTray::decode_color(tray_data->color); - td.name = tray_data->get_display_filament_type(); - td.filament_type = tray_data->get_filament_type(); - td.ctype = tray_data->ctype; - for (auto col : tray_data->cols) { - td.material_cols.push_back(AmsTray::decode_color(col)); + if (!tray_data->is_exists) { + td.type = EMPTY; + } else { + if (!tray_data->is_tray_info_ready()) { + td.type = THIRD; + } else { + td.type = NORMAL; + td.remain = tray_data->remain; + td.colour = AmsTray::decode_color(tray_data->color); + td.name = tray_data->get_display_filament_type(); + td.filament_type = tray_data->get_filament_type(); + td.ctype = tray_data->ctype; + for (auto col : tray_data->cols) { td.material_cols.push_back(AmsTray::decode_color(col)); } } } + + tray_datas.push_back(td); } - tray_datas.push_back(td); - } + ams_mapping_item_container->Show(); + add_ams_mapping(tray_datas, obj->ams_calibrate_remain_flag, ams_mapping_item_container, sizer_mapping_list); + m_amsmapping_container_sizer_list.push_back(sizer_mapping_list); + m_amsmapping_container_list.push_back(ams_mapping_item_container); - ams_mapping_item_container->Show(); - add_ams_mapping(tray_datas, obj->ams_calibrate_remain_flag, ams_mapping_item_container, sizer_mapping_list); - m_amsmapping_container_sizer_list.push_back(sizer_mapping_list); - m_amsmapping_container_list.push_back(ams_mapping_item_container); - - if (nozzle_id == 0) { - has_right_ams = true; - if (ams_mapping_item_container->get_slots_num() == 1) { - right_one_slot_containers.push_back(ams_mapping_item_container); - } else { - right_four_slot_containers.push_back(ams_mapping_item_container); - } - } - else if (nozzle_id == 1) { - has_left_ams = true; - if (ams_mapping_item_container->get_slots_num() == 1) { - left_one_slot_containers.push_back(ams_mapping_item_container); - } else { - left_four_slots_containers.push_back(ams_mapping_item_container); + if (nozzle_id == 0) { + has_right_ams = true; + if (ams_mapping_item_container->get_slots_num() == 1) { + right_one_slot_containers.push_back(ams_mapping_item_container); + } else { + right_four_slot_containers.push_back(ams_mapping_item_container); + } + } else if (nozzle_id == 1) { + has_left_ams = true; + if (ams_mapping_item_container->get_slots_num() == 1) { + left_one_slot_containers.push_back(ams_mapping_item_container); + } else { + left_four_slots_containers.push_back(ams_mapping_item_container); + } } + } else if (ams_type == 4) { // 4:n3s } } - else if(ams_type == 4){ //4:n3s - } + + _add_containers(this, left_one_slot_containers, left_four_slots_containers, m_sizer_ams_basket_left); + _add_containers(this, right_one_slot_containers, right_four_slot_containers, m_sizer_ams_basket_right); + m_left_split_ams_sizer->Show(has_left_ams); + m_right_split_ams_sizer->Show(has_right_ams); + update_items_check_state(ams_mapping_result); + } else { + m_right_split_ams_sizer->Show(false); } - - _add_containers(this, left_one_slot_containers, left_four_slots_containers, m_sizer_ams_basket_left); - _add_containers(this, right_one_slot_containers, right_four_slot_containers, m_sizer_ams_basket_right); - m_left_split_ams_sizer->Show(has_left_ams); - m_right_split_ams_sizer->Show(has_right_ams); - update_items_check_state(ams_mapping_result); - - Layout(); Fit(); Refresh(); diff --git a/src/slic3r/GUI/AmsMappingPopup.hpp b/src/slic3r/GUI/AmsMappingPopup.hpp index ebe5e2289..ef5edc4dc 100644 --- a/src/slic3r/GUI/AmsMappingPopup.hpp +++ b/src/slic3r/GUI/AmsMappingPopup.hpp @@ -282,6 +282,7 @@ public: void show_reset_button(); void set_material_index_str(std::string str) { m_material_index = str; } const std::string &get_material_index_str() { return m_material_index; } + void set_only_show_ext_spool(bool flag); public: void msw_rescale(); @@ -289,6 +290,7 @@ public: private: ResetCallback m_reset_callback{nullptr}; std::string m_material_index; + bool m_only_show_ext_spool{false}; }; class AmsMapingTipPopup : public PopupWindow diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 476c495fe..8b66d912d 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -643,11 +643,10 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) ); option_use_ams->Bind(EVT_SWITCH_PRINT_OPTION, [this](auto& e) { - m_ams_mapping_result.clear(); - sync_ams_mapping_result(m_ams_mapping_result); + m_ams_mapping_result.clear();//clear and Scheduled call update_show_status }); - option_use_ams->setValue("off"); + option_use_ams->setValue("on"); m_sizer_options_timelapse->Add(option_timelapse, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(5)); m_sizer_options_other->Add(option_use_ams, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(5)); m_sizer_options_other->Add(option_auto_bed_level, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(5)); @@ -1189,7 +1188,7 @@ void print_ams_mapping_result(std::vector& result) } } -bool SelectMachineDialog::do_ams_mapping(MachineObject *obj_) +bool SelectMachineDialog::do_ams_mapping(MachineObject *obj_,bool use_ams) { if (!obj_) return false; obj_->get_ams_colors(m_cur_colors_in_thumbnail); @@ -1245,8 +1244,16 @@ bool SelectMachineDialog::do_ams_mapping(MachineObject *obj_) } map_opt = {true, false, !has_left_ams, false}; //four values: use_left_ams, use_right_ams, use_left_ext, use_right_ext + if (!use_ams) { + map_opt[0] = false; + map_opt[2] = true; + } int result_first = obj_->ams_filament_mapping(m_filament_left, m_ams_mapping_result_left, map_opt); map_opt = { false, true, false, !has_right_ams }; + if (!use_ams) { + map_opt[1] = false; + map_opt[3] = true; + } int result_second = obj_->ams_filament_mapping(m_filament_right, m_ams_mapping_result_right, map_opt); //m_ams_mapping_result.clear(); @@ -1261,6 +1268,10 @@ bool SelectMachineDialog::do_ams_mapping(MachineObject *obj_) //can hybrid mapping else { map_opt = { true, true, true, true }; //four values: use_left_ams, use_right_ams, use_left_ext, use_right_ext + if (!use_ams) { + map_opt[0] = false; + map_opt[1] = false; + } filament_result = obj_->ams_filament_mapping(m_filaments, m_ams_mapping_result, map_opt); } //When filaments cannot be matched automatically, whether to use ext for automatic supply @@ -1271,11 +1282,19 @@ bool SelectMachineDialog::do_ams_mapping(MachineObject *obj_) else { if (obj_->is_support_amx_ext_mix_mapping()){ map_opt = { false, true, false, false }; //four values: use_left_ams, use_right_ams, use_left_ext, use_right_ext + if (!use_ams) { + map_opt[1] = false; + map_opt[3] = true; + } filament_result = obj_->ams_filament_mapping(m_filaments, m_ams_mapping_result, map_opt); //auto_supply_with_ext(obj_->vt_slot); } else { map_opt = { false, true, false, false }; + if (!use_ams) { + map_opt[1] = false; + map_opt[3] = true; + } filament_result = obj_->ams_filament_mapping(m_filaments, m_ams_mapping_result, map_opt); } } @@ -3081,11 +3100,7 @@ void SelectMachineDialog::on_timer(wxTimerEvent &event) if(!obj_) return; - if (!m_check_flag && obj_->is_info_ready()) { - update_select_layout(obj_); - update_ams_check(obj_); - m_check_flag = true; - } + if (obj_->m_extder_data.total_extder_count > 1) { change_materialitem_tip(false); /*mapping to both ams and ext, is supported while total_extder_count is 2*/ @@ -3379,21 +3394,15 @@ void SelectMachineDialog::update_show_status() return; } - - // do ams mapping if no ams result - bool clean_ams_mapping = false; - if (m_ams_mapping_result.empty()) { - if (m_checkbox_list["use_ams"]->getValue() == "on") { - do_ams_mapping(obj_); - update_filament_change_count(); - } else { - clean_ams_mapping = true; - } + if (!m_check_flag && obj_->is_info_ready()) { + update_select_layout(obj_); + update_ams_check(obj_); + m_check_flag = true; } - - if (clean_ams_mapping) { - m_ams_mapping_result.clear(); - sync_ams_mapping_result(m_ams_mapping_result); + // do ams mapping if no ams result + if (m_ams_mapping_result.empty()) { + do_ams_mapping(obj_, m_checkbox_list["use_ams"]->getValue() == "on"); + update_filament_change_count(); } // reading done @@ -3565,16 +3574,10 @@ void SelectMachineDialog::update_show_status() return; } - if (m_checkbox_list["use_ams"]->getValue() != "on") { - m_ams_mapping_result.clear(); - sync_ams_mapping_result(m_ams_mapping_result); - } else { - if (!m_ams_mapping_res && !obj_->is_valid_mapping_result(m_ams_mapping_result)) { - show_status(PrintDialogStatus::PrintStatusAmsMappingInvalid); - return; - } + if (!m_ams_mapping_res && !obj_->is_valid_mapping_result(m_ams_mapping_result)) { + show_status(PrintDialogStatus::PrintStatusAmsMappingInvalid); + return; } - /*Warnings*/ // no ams if (!obj_->has_ams() || m_checkbox_list["use_ams"]->getValue() != "on") { @@ -4012,6 +4015,7 @@ void SelectMachineDialog::reset_and_sync_ams_list() if (obj_ && m_checkbox_list["use_ams"]->getValue() == "on" && obj_->dev_id == m_printer_last_select) { m_mapping_popup.set_parent_item(item); + m_mapping_popup.set_only_show_ext_spool(m_checkbox_list["use_ams"]->getValue() == "off"); m_mapping_popup.set_current_filament_id(extruder); m_mapping_popup.set_tag_texture(materials[extruder]); m_mapping_popup.set_send_win(this);//fix bug:fisrt click is not valid @@ -4613,7 +4617,7 @@ bool SelectMachineDialog::Show(bool show) return DPIDialog::Show(false); } - + show_init(); show_status(PrintDialogStatus::PrintStatusInit); PresetBundle& preset_bundle = *wxGetApp().preset_bundle; @@ -4654,6 +4658,10 @@ bool SelectMachineDialog::Show(bool show) return DPIDialog::Show(show); } +void SelectMachineDialog::show_init() { + m_ams_mapping_result.clear(); +} + wxString SelectMachineDialog::format_bed_name(std::string plate_name) { wxString name; diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp index 25f2c2d48..7f3624f0b 100644 --- a/src/slic3r/GUI/SelectMachine.hpp +++ b/src/slic3r/GUI/SelectMachine.hpp @@ -535,7 +535,8 @@ public: int update_print_required_data(Slic3r::DynamicPrintConfig config, Slic3r::Model model, Slic3r::PlateDataPtrs plate_data_list, std::string file_name, std::string file_path); void set_print_type(PrintFromType type) {m_print_type = type;}; bool Show(bool show); - bool do_ams_mapping(MachineObject *obj_); + void show_init(); + bool do_ams_mapping(MachineObject *obj_,bool use_ams); bool get_ams_mapping_result(std::string& mapping_array_str, std::string& mapping_array_str2, std::string& ams_mapping_info); bool build_nozzles_info(std::string& nozzles_info); bool can_hybrid_mapping(ExtderData data); diff --git a/src/slic3r/GUI/SyncAmsInfoDialog.cpp b/src/slic3r/GUI/SyncAmsInfoDialog.cpp index 195723bd8..85ffd7fe8 100644 --- a/src/slic3r/GUI/SyncAmsInfoDialog.cpp +++ b/src/slic3r/GUI/SyncAmsInfoDialog.cpp @@ -114,24 +114,6 @@ void SyncAmsInfoDialog::updata_ui_data_after_connected_printer() { m_button_cancel->Show(); } -void SyncAmsInfoDialog::update_ams_check(MachineObject *obj) -{ - if (!obj) { return; } - - if (!obj->is_enable_np) { - if (obj->has_ams()) { - //m_checkbox_list["use_ams"]->Show(); - m_checkbox_list["use_ams"]->setValue("on"); - } else { - m_checkbox_list["use_ams"]->Hide(); - //m_checkbox_list["use_ams"]->setValue("off"); - } - } else { - m_checkbox_list["use_ams"]->Hide(); - m_checkbox_list["use_ams"]->setValue("on"); - } -} - void SyncAmsInfoDialog::update_select_layout(MachineObject *obj) { m_checkbox_list["timelapse"]->Hide(); @@ -921,11 +903,6 @@ SyncAmsInfoDialog::SyncAmsInfoDialog(wxWindow *parent, SyncInfo &info) : auto option_use_ams = new PrintOption(m_options_other, _L("Use AMS"), wxEmptyString, ops_no_auto); - option_use_ams->Bind(EVT_SWITCH_PRINT_OPTION, [this](auto &e) { - m_ams_mapping_result.clear(); - sync_ams_mapping_result(m_ams_mapping_result); - }); - option_use_ams->setValue("on"); m_sizer_options_timelapse->Add(option_timelapse, 0, wxEXPAND | wxBOTTOM, FromDIP(5)); m_sizer_options_other->Add(option_use_ams, 0, wxEXPAND | wxBOTTOM, FromDIP(5)); @@ -2373,7 +2350,6 @@ void SyncAmsInfoDialog::on_timer(wxTimerEvent &event) if (!m_check_flag && obj_->is_info_ready()) { update_select_layout(obj_); - update_ams_check(obj_); m_check_flag = true; } @@ -2408,7 +2384,6 @@ void SyncAmsInfoDialog::update_show_status() NetworkAgent * agent = Slic3r::GUI::wxGetApp().getAgent(); DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!agent) { - update_ams_check(nullptr); return; } if (!dev) return; @@ -2417,7 +2392,6 @@ void SyncAmsInfoDialog::update_show_status() if (is_must_finish_slice_then_connected_printer()) { return; } MachineObject * obj_ = dev->get_selected_machine(); if (!obj_) { - update_ams_check(nullptr); if (agent) { if (agent->is_user_login()) { show_status(PrintDialogStatus::PrintStatusInvalidPrinter); @@ -2460,19 +2434,10 @@ void SyncAmsInfoDialog::update_show_status() } // do ams mapping if no ams result - bool clean_ams_mapping = false; if (m_ams_mapping_result.empty()) { - if (m_checkbox_list.find("use_ams") != m_checkbox_list.end() && m_checkbox_list["use_ams"]->getValue() == "on") { - do_ams_mapping(obj_); - } else { - clean_ams_mapping = true; - } + do_ams_mapping(obj_); } - if (clean_ams_mapping) { - m_ams_mapping_result.clear(); - sync_ams_mapping_result(m_ams_mapping_result); - } // reading done if (wxGetApp().app_config && wxGetApp().app_config->get("internal_debug").empty()) { @@ -2527,19 +2492,6 @@ void SyncAmsInfoDialog::update_show_status() return; } - if (m_checkbox_list["use_ams"]->getValue() != "on") { - m_ams_mapping_result.clear(); - sync_ams_mapping_result(m_ams_mapping_result); - - if (has_timelapse_warning()) { - show_status(PrintDialogStatus::PrintStatusTimelapseWarning); - } else { - show_status(PrintDialogStatus::PrintStatusDisableAms); - } - - return; - } - // do ams mapping if no ams result if (m_ams_mapping_result.empty()) { do_ams_mapping(obj_); } diff --git a/src/slic3r/GUI/SyncAmsInfoDialog.hpp b/src/slic3r/GUI/SyncAmsInfoDialog.hpp index 4c427fddf..f9c791b8a 100644 --- a/src/slic3r/GUI/SyncAmsInfoDialog.hpp +++ b/src/slic3r/GUI/SyncAmsInfoDialog.hpp @@ -253,7 +253,6 @@ public: public: bool Show(bool show) override; void updata_ui_data_after_connected_printer(); - void update_ams_check(MachineObject *obj); void set_default(bool hide_some = false); void update_select_layout(MachineObject *obj); void set_default_normal(const ThumbnailData &);