mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 20:51:12 -06:00 
			
		
		
		
	ENH: calibration: filaments compatibility
Change-Id: Ibdbf25905b7f0fff2371247437624ec4645b35ee
This commit is contained in:
		
							parent
							
								
									0cad88309c
								
							
						
					
					
						commit
						257e2e0bbb
					
				
					 4 changed files with 217 additions and 160 deletions
				
			
		|  | @ -509,19 +509,25 @@ std::string AppConfig::load() | |||
|                     } | ||||
|                 } | ||||
|             } else if (it.key() == "calis") { | ||||
|                 for (auto &j : it.value()) { | ||||
|                     std::string str = j.dump(); | ||||
|                 for (auto &calis_j : it.value()) { | ||||
|                     PrinterCaliInfo cali_info; | ||||
|                     cali_info.dev_id          = j["dev_id"].get<std::string>(); | ||||
|                     cali_info.mode            = CalibMode(j["cali_mode"].get<int>()); | ||||
|                     cali_info.state           = CalibState(j["cali_state"].get<int>()); | ||||
|                     cali_info.filament_preset = j["preset"].get<std::string>(); | ||||
|                     if (calis_j.contains("dev_id")) | ||||
|                         cali_info.dev_id = calis_j["dev_id"].get<std::string>(); | ||||
|                     if (calis_j.contains("cali_mode")) | ||||
|                         cali_info.mode = CalibMode(calis_j["cali_mode"].get<int>()); | ||||
|                     if (calis_j.contains("cali_state")) | ||||
|                         cali_info.state = CalibState(calis_j["cali_state"].get<int>()); | ||||
|                     if (calis_j.contains("preset")) { | ||||
|                         for (auto cali_it = calis_j["preset"].begin(); cali_it != calis_j["preset"].end(); cali_it++) { | ||||
|                             int tray_id = cali_it.value()["tray_id"].get<int>(); | ||||
|                             std::string name = cali_it.value()["preset_name"].get<std::string>(); | ||||
|                             cali_info.filament_presets[tray_id] = name; | ||||
|                         } | ||||
|                     } | ||||
|                     //if (j.contains("nozzle"))
 | ||||
|                     //cali_info.nozzle_dia      = j["nozzle"].get<float>();
 | ||||
|                     //if (j.contains("bed_type"))
 | ||||
|                     //cali_info.bed_type        = j["bed_type"].get<int>();
 | ||||
|                     if (j.contains("tray_ids")) | ||||
|                         cali_info.tray_ids = j["tray_ids"].get<std::vector<int>>(); | ||||
|                     m_printer_cali_infos.emplace_back(cali_info); | ||||
|                 } | ||||
|             } else { | ||||
|  | @ -630,17 +636,19 @@ void AppConfig::save() | |||
|     } | ||||
| 
 | ||||
|     for (const auto &cali_info : m_printer_cali_infos) { | ||||
|         json json; | ||||
|         json["dev_id"]             = cali_info.dev_id; | ||||
|         json["cali_mode"]          = int(cali_info.mode); | ||||
|         json["cali_state"]         = int(cali_info.state); | ||||
|         json["preset"]             = cali_info.filament_preset; | ||||
|         for (int tray_id : cali_info.tray_ids) { | ||||
|             json["tray_ids"].push_back(tray_id); | ||||
|         json cali_json; | ||||
|         cali_json["dev_id"]             = cali_info.dev_id; | ||||
|         cali_json["cali_mode"]          = int(cali_info.mode); | ||||
|         cali_json["cali_state"]         = int(cali_info.state); | ||||
|         for (auto filament_preset : cali_info.filament_presets) { | ||||
|             json preset_json; | ||||
|             preset_json["tray_id"] = filament_preset.first; | ||||
|             preset_json["preset_name"] = filament_preset.second; | ||||
|             cali_json["preset"].push_back(preset_json); | ||||
|         } | ||||
|         //json["nozzle"] = cali_info.nozzle_dia;
 | ||||
|         //json["bed_type"] = cali_info.bed_type;
 | ||||
|         j["calis"].push_back(json); | ||||
|         j["calis"].push_back(cali_json); | ||||
|     } | ||||
| 
 | ||||
|     // Write the other categories.
 | ||||
|  | @ -978,10 +986,9 @@ void AppConfig::save_printer_cali_infos(const PrinterCaliInfo &cali_info) | |||
|     if (iter == m_printer_cali_infos.end()) { | ||||
|         m_printer_cali_infos.emplace_back(cali_info); | ||||
|     } else { | ||||
|         (*iter).filament_preset = cali_info.filament_preset; | ||||
|         (*iter).filament_presets = cali_info.filament_presets; | ||||
|         (*iter).mode            = cali_info.mode; | ||||
|         (*iter).state           = cali_info.state; | ||||
|         (*iter).tray_ids        = cali_info.tray_ids; | ||||
|         //(*iter).nozzle_dia      = cali_info.nozzle_dia;
 | ||||
|         //(*iter).bed_type        = cali_info.bed_type;
 | ||||
|     } | ||||
|  |  | |||
|  | @ -32,10 +32,11 @@ struct PrinterCaliInfo | |||
|     std::string dev_id; | ||||
|     CalibMode   mode; | ||||
|     CalibState  state; | ||||
|     std::string filament_preset; | ||||
|     std::vector<int> tray_ids; | ||||
|     float nozzle_dia; | ||||
|     int bed_type; | ||||
|     //std::string filament_preset;
 | ||||
|     //std::vector<int> tray_ids;
 | ||||
|     std::map<int, std::string> filament_presets; | ||||
|     //float nozzle_dia;
 | ||||
|     //int bed_type;
 | ||||
| }; | ||||
| 
 | ||||
| struct Calib_Params | ||||
|  |  | |||
|  | @ -105,7 +105,7 @@ bool FilamentComboBox::Enable(bool enable) { | |||
|     return result; | ||||
| } | ||||
| 
 | ||||
| void FilamentComboBox::SetValue(bool value) { | ||||
| void FilamentComboBox::SetValue(bool value, bool send_event) { | ||||
|     if (m_radioBox) { | ||||
|         if (value == m_radioBox->GetValue()) { | ||||
|             if (m_checkBox) { | ||||
|  | @ -121,10 +121,12 @@ void FilamentComboBox::SetValue(bool value) { | |||
|         m_radioBox->SetValue(value); | ||||
|     if (m_checkBox) | ||||
|         m_checkBox->SetValue(value); | ||||
|     SimpleEvent e(EVT_CALIBRATION_TRAY_SELECTION_CHANGED); | ||||
|     e.ResumePropagation(wxEVENT_PROPAGATE_MAX); | ||||
|     e.SetEventObject(this); | ||||
|     GetEventHandler()->ProcessEvent(e); | ||||
|     if (send_event) { | ||||
|         SimpleEvent e(EVT_CALIBRATION_TRAY_SELECTION_CHANGED); | ||||
|         e.ResumePropagation(wxEVENT_PROPAGATE_MAX); | ||||
|         e.SetEventObject(this); | ||||
|         GetEventHandler()->ProcessEvent(e); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| CalibrationWizard::CalibrationWizard(wxWindow* parent, CalibMode mode, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) | ||||
|  | @ -254,6 +256,7 @@ CalibrationWizardPage* CalibrationWizard::create_presets_page(bool need_custom_r | |||
|     m_filament_list_panel = new wxPanel(m_presets_panel); | ||||
|     auto filament_list_sizer = new wxBoxSizer(wxVERTICAL); | ||||
|     auto filament_list_tips = new wxStaticText(m_filament_list_panel, wxID_ANY, _L("Please select same type of material, because plate temperature might not be compatible with different type of material"), wxDefaultPosition, wxDefaultSize, 0); | ||||
|     filament_list_tips->Hide(); | ||||
|     filament_list_tips->SetFont(Label::Body_13); | ||||
|     filament_list_tips->SetForegroundColour(wxColour(145, 145, 145)); | ||||
|     filament_list_tips->Wrap(CALIBRATION_TEXT_MAX_LENGTH); | ||||
|  | @ -420,11 +423,6 @@ CalibrationWizardPage* CalibrationWizard::create_presets_page(bool need_custom_r | |||
| 
 | ||||
|     printing_param_sizer->AddSpacer(FromDIP(10)); | ||||
| 
 | ||||
|     auto printing_param_text = new wxStaticText(printing_param_panel, wxID_ANY, _L("Printing Parameters")); | ||||
|     printing_param_text->SetFont(Label::Head_12); | ||||
|     printing_param_text->Wrap(CALIBRATION_TEXT_MAX_LENGTH); | ||||
|     printing_param_sizer->Add(printing_param_text, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(20)); | ||||
| 
 | ||||
|     auto info_sizer = new wxFlexGridSizer(0, 3, 0, FromDIP(10)); | ||||
|     info_sizer->SetFlexibleDirection(wxBOTH); | ||||
|     info_sizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); | ||||
|  | @ -436,14 +434,20 @@ CalibrationWizardPage* CalibrationWizard::create_presets_page(bool need_custom_r | |||
|     m_nozzle_temp->SetBorderWidth(0); | ||||
|     nozzle_temp_sizer->Add(nozzle_temp_text, 0, wxALIGN_LEFT); | ||||
|     nozzle_temp_sizer->Add(m_nozzle_temp, 0, wxEXPAND); | ||||
|     nozzle_temp_text->Hide(); | ||||
|     m_nozzle_temp->Hide(); | ||||
| 
 | ||||
|     auto bed_temp_sizer = new wxBoxSizer(wxVERTICAL); | ||||
|     auto bed_temp_sizer = new wxBoxSizer(wxHORIZONTAL); | ||||
|     auto printing_param_text = new wxStaticText(printing_param_panel, wxID_ANY, _L("Printing Parameters")); | ||||
|     printing_param_text->SetFont(Label::Head_12); | ||||
|     printing_param_text->Wrap(CALIBRATION_TEXT_MAX_LENGTH); | ||||
|     bed_temp_sizer->Add(printing_param_text, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(20)); | ||||
|     auto bed_temp_text = new wxStaticText(printing_param_panel, wxID_ANY, _L("Bed temperature")); | ||||
|     bed_temp_text->SetFont(Label::Body_12); | ||||
|     m_bed_temp = new TextInput(printing_param_panel, wxEmptyString, _L("\u2103"), "", wxDefaultPosition, CALIBRATION_FROM_TO_INPUT_SIZE, wxTE_READONLY); | ||||
|     m_bed_temp->SetBorderWidth(0); | ||||
|     bed_temp_sizer->Add(bed_temp_text, 0, wxALIGN_LEFT); | ||||
|     bed_temp_sizer->Add(m_bed_temp, 0, wxEXPAND); | ||||
|     bed_temp_sizer->Add(bed_temp_text, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(10)); | ||||
|     bed_temp_sizer->Add(m_bed_temp, 0, wxALIGN_CENTER); | ||||
| 
 | ||||
|     auto max_flow_sizer = new wxBoxSizer(wxVERTICAL); | ||||
|     auto max_flow_text = new wxStaticText(printing_param_panel, wxID_ANY, _L("Max volumetric speed")); | ||||
|  | @ -452,6 +456,8 @@ CalibrationWizardPage* CalibrationWizard::create_presets_page(bool need_custom_r | |||
|     m_max_volumetric_speed->SetBorderWidth(0); | ||||
|     max_flow_sizer->Add(max_flow_text, 0, wxALIGN_LEFT); | ||||
|     max_flow_sizer->Add(m_max_volumetric_speed, 0, wxEXPAND); | ||||
|     max_flow_text->Hide(); | ||||
|     m_max_volumetric_speed->Hide(); | ||||
| 
 | ||||
|     m_nozzle_temp->GetTextCtrl()->Bind(wxEVT_SET_FOCUS, [](auto&) {}); | ||||
|     m_bed_temp->GetTextCtrl()->Bind(wxEVT_SET_FOCUS, [](auto&) {}); | ||||
|  | @ -851,7 +857,7 @@ void CalibrationWizard::on_click_btn_prev(IntEvent& event) | |||
|             msg_dlg.ShowModal(); | ||||
|             return; | ||||
|         } | ||||
|         MessageDialog msg_dlg(nullptr, _L("It will restart to get the results. Do you confirm to recalibrate?"), wxEmptyString, wxICON_WARNING | wxYES | wxNO); | ||||
|         MessageDialog msg_dlg(nullptr, _L("It will restart to get the results. Do you confirm to re-calibrate?"), wxEmptyString, wxICON_WARNING | wxYES | wxNO); | ||||
|         auto answer  = msg_dlg.ShowModal(); | ||||
|         if (answer == wxID_NO) | ||||
|             return; | ||||
|  | @ -867,7 +873,6 @@ void CalibrationWizard::on_click_btn_prev(IntEvent& event) | |||
| 
 | ||||
|         init_presets_selections(); | ||||
|         change_ams_select_mode(); | ||||
|         wxGetApp().preset_bundle->set_calibrate_printer(""); | ||||
|         on_update_ams_filament(false); | ||||
|         on_switch_ams(m_ams_item_list[0]->m_amsinfo.ams_id); | ||||
|         for (auto fcb : m_filament_comboBox_list) | ||||
|  | @ -908,7 +913,7 @@ void CalibrationWizard::on_click_btn_next(IntEvent& event) | |||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         if (!m_printer_preset || !m_filament_preset || !m_print_preset) { | ||||
|         if (!m_printer_preset || m_filament_presets.empty() || !m_print_preset) { | ||||
|             wxString tips; | ||||
|             if (!m_printer_preset) { | ||||
|                 tips = _L("Please select a printer and nozzle for calibration."); | ||||
|  | @ -973,12 +978,11 @@ void CalibrationWizard::init_printer_calib_info_from_appconfig() { | |||
|     for (int i = 0; i < infos.size(); i++) { | ||||
|         if (m_printer_calib_infos.find(infos[i].dev_id) == m_printer_calib_infos.end()) { | ||||
|             m_printer_calib_infos[infos[i].dev_id].dev_id = infos[i].dev_id; | ||||
|             m_printer_calib_infos[infos[i].dev_id].filament_preset = infos[i].filament_preset; | ||||
|             m_printer_calib_infos[infos[i].dev_id].filament_presets = infos[i].filament_presets; | ||||
|             m_printer_calib_infos[infos[i].dev_id].mode = infos[i].mode; | ||||
|             m_printer_calib_infos[infos[i].dev_id].state = infos[i].state; | ||||
|             //m_printer_calib_infos[infos[i].dev_id].nozzle_dia = infos[i].nozzle_dia;
 | ||||
|             //m_printer_calib_infos[infos[i].dev_id].bed_type = infos[i].bed_type;
 | ||||
|             m_printer_calib_infos[infos[i].dev_id].tray_ids = infos[i].tray_ids; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -987,11 +991,11 @@ void CalibrationWizard::save_to_printer_calib_info(PageType page_type) { | |||
|     m_printer_calib_infos[curr_obj->dev_id].dev_id = curr_obj->dev_id; | ||||
|     m_printer_calib_infos[curr_obj->dev_id].mode = m_mode; | ||||
|     m_printer_calib_infos[curr_obj->dev_id].state = static_cast<Slic3r::CalibState>(page_type); | ||||
|     if (m_filament_preset) | ||||
|         m_printer_calib_infos[curr_obj->dev_id].filament_preset = m_filament_preset->name; | ||||
|     for (auto filament_preset : m_filament_presets) { | ||||
|         m_printer_calib_infos[curr_obj->dev_id].filament_presets[filament_preset.first] = filament_preset.second->name; | ||||
|     } | ||||
|     //m_printer_calib_infos[curr_obj->dev_id].nozzle_dia = stof(m_comboBox_nozzle_dia->GetValue().ToStdString());
 | ||||
|     //m_printer_calib_infos[curr_obj->dev_id].bed_type = (int)(m_comboBox_bed_type->GetSelection() + btDefault + 1);
 | ||||
|     m_printer_calib_infos[curr_obj->dev_id].tray_ids = get_selected_tray(); | ||||
|     wxGetApp().app_config->save_printer_cali_infos(m_printer_calib_infos[curr_obj->dev_id]); | ||||
| } | ||||
| 
 | ||||
|  | @ -1088,9 +1092,9 @@ void CalibrationWizard::update_print_progress() | |||
|                         reset_printing_values(); | ||||
| #ifdef CALIBRATION_DEBUG | ||||
|                     if (m_curr_page->get_page_type() == PageType::Calibration)  | ||||
| #else | ||||
|                     if (curr_obj->print_status == "FINISH" && m_curr_page->get_page_type() == PageType::Calibration) | ||||
| #endif | ||||
|                     // todo: the printer status is not correct
 | ||||
|                     if (/*curr_obj->print_status == "FINISH" &&*/ m_curr_page->get_page_type() == PageType::Calibration) | ||||
|                     { | ||||
|                         m_button_abort->Enable(false); | ||||
|                         m_button_abort->SetBitmap(m_bitmap_abort_disable.bmp()); | ||||
|  | @ -1198,7 +1202,8 @@ void CalibrationWizard::on_subtask_abort(wxCommandEvent& event) | |||
|     if (msg_dlg.ShowModal() == wxID_OK) { | ||||
|         if (curr_obj) curr_obj->command_task_abort(); | ||||
|         m_btn_recali->Show(); | ||||
|         Layout(); | ||||
|         show_page(get_frist_page()); | ||||
|         save_to_printer_calib_info(PageType::Start); | ||||
|     } | ||||
|     //if (abort_dlg == nullptr) {
 | ||||
|     //    abort_dlg = new SecondaryCheckDialog(this->GetParent(), wxID_ANY, _L("Cancel print"));
 | ||||
|  | @ -1228,14 +1233,14 @@ std::vector<int> CalibrationWizard::get_selected_tray() | |||
|     } | ||||
|     else { | ||||
|         if (get_ams_select_mode() == FilamentSelectMode::FSMCheckBoxMode) { | ||||
|             for (auto fcb : m_filament_comboBox_list) { | ||||
|             for (auto& fcb : m_filament_comboBox_list) { | ||||
|                 if (fcb->GetCheckBox()->GetValue()) { | ||||
|                     tray_ids.push_back(fcb->get_tray_id()); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         else if (get_ams_select_mode() == FilamentSelectMode::FSMRadioMode) { | ||||
|             for (auto fcb : m_filament_comboBox_list) { | ||||
|             for (auto& fcb : m_filament_comboBox_list) { | ||||
|                 if (fcb->GetRadioBox()->GetValue()) { | ||||
|                     tray_ids.push_back(fcb->get_tray_id()); | ||||
|                 } | ||||
|  | @ -1259,21 +1264,22 @@ void CalibrationWizard::set_selected_tray(const std::vector<int>& tray_ids) | |||
|         m_filament_from_ext_spool = false; | ||||
|         for (int tray_id : tray_ids) { | ||||
|             if (get_ams_select_mode() == FilamentSelectMode::FSMCheckBoxMode) { | ||||
|                 for (auto fcb : m_filament_comboBox_list) { | ||||
|                 for (auto& fcb : m_filament_comboBox_list) { | ||||
|                     if (fcb->get_tray_id() == tray_id) { | ||||
|                         fcb->SetValue(true); | ||||
|                         fcb->SetValue(true, false); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             else if (get_ams_select_mode() == FilamentSelectMode::FSMRadioMode) { | ||||
|                 for (auto fcb : m_filament_comboBox_list) { | ||||
|                 for (auto& fcb : m_filament_comboBox_list) { | ||||
|                     if (fcb->get_tray_id() == tray_id) { | ||||
|                         fcb->SetValue(true); | ||||
|                         fcb->SetValue(true, false); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     recommend_input_value(); | ||||
| } | ||||
| 
 | ||||
| FilamentComboBoxList CalibrationWizard::get_selected_filament_comboBox() | ||||
|  | @ -1286,14 +1292,14 @@ FilamentComboBoxList CalibrationWizard::get_selected_filament_comboBox() | |||
|     } | ||||
|     else { | ||||
|         if (get_ams_select_mode() == FilamentSelectMode::FSMCheckBoxMode) { | ||||
|             for (auto fcb : m_filament_comboBox_list) { | ||||
|             for (auto& fcb : m_filament_comboBox_list) { | ||||
|                 if (fcb->GetCheckBox()->GetValue()) { | ||||
|                     fcb_list.push_back(fcb); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         else if (get_ams_select_mode() == FilamentSelectMode::FSMRadioMode) { | ||||
|             for (auto fcb : m_filament_comboBox_list) { | ||||
|             for (auto& fcb : m_filament_comboBox_list) { | ||||
|                 if (fcb->GetRadioBox()->GetValue()) { | ||||
|                     fcb_list.push_back(fcb); | ||||
|                 } | ||||
|  | @ -1399,12 +1405,12 @@ void CalibrationWizard::update_printer() { | |||
|         if (new_obj != curr_obj) { | ||||
|             curr_obj = new_obj; | ||||
|             wxGetApp().sidebar().load_ams_list(new_obj->dev_id, new_obj); | ||||
|             wxGetApp().preset_bundle->set_calibrate_printer(""); | ||||
|             init_presets_selections(); | ||||
|             change_ams_select_mode(); | ||||
|             wxGetApp().preset_bundle->set_calibrate_printer(""); | ||||
|             on_update_ams_filament(false); | ||||
|             on_switch_ams(m_ams_item_list[0]->m_amsinfo.ams_id); | ||||
|             for (auto fcb : m_filament_comboBox_list) | ||||
|             for (auto& fcb : m_filament_comboBox_list) | ||||
|                 fcb->SetValue(false); | ||||
|             m_virtual_tray_comboBox->SetValue(false); | ||||
| 
 | ||||
|  | @ -1417,14 +1423,19 @@ void CalibrationWizard::update_printer() { | |||
|             if (it != m_printer_calib_infos.end() && it->second.mode == m_mode) { | ||||
|                 PresetBundle* preset_bundle = wxGetApp().preset_bundle; | ||||
|                 if (preset_bundle) { | ||||
|                     for (auto filament_it = preset_bundle->filaments.begin(); filament_it != preset_bundle->filaments.end(); filament_it++) { | ||||
|                         if (filament_it->name == m_printer_calib_infos[curr_obj->dev_id].filament_preset) { | ||||
|                             m_filament_preset = (&*filament_it); | ||||
| 
 | ||||
|                     for (auto filament_preset : m_printer_calib_infos[curr_obj->dev_id].filament_presets) { | ||||
|                         for (auto filament_it = preset_bundle->filaments.begin(); filament_it != preset_bundle->filaments.end(); filament_it++) { | ||||
|                             if (filament_it->name == filament_preset.second) { | ||||
|                                 m_filament_presets[filament_preset.first] = (&*filament_it); | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|                 set_selected_tray(it->second.tray_ids); | ||||
|                 std::vector<int> tray_ids; | ||||
|                 for (auto filament_preset : it->second.filament_presets) { | ||||
|                     tray_ids.push_back(filament_preset.first); | ||||
|                 } | ||||
|                 set_selected_tray(tray_ids); | ||||
|                 jump_to_page(static_cast<PageType>(m_printer_calib_infos[curr_obj->dev_id].state)); | ||||
|             } | ||||
|             else { | ||||
|  | @ -1502,40 +1513,62 @@ void CalibrationWizard::on_switch_ams(std::string ams_id) | |||
|     Layout(); | ||||
| } | ||||
| 
 | ||||
| static std::map<std::string, bool> filament_is_high_temp{ | ||||
|         {"PLA",     false}, | ||||
|         {"PLA-CF",  false}, | ||||
|         //{"PETG",    true},
 | ||||
|         {"ABS",     true}, | ||||
|         {"TPU",     false}, | ||||
|         {"PA",      true}, | ||||
|         {"PA-CF",   true}, | ||||
|         {"PET-CF",  true}, | ||||
|         {"PC",      true}, | ||||
|         {"ASA",     true}, | ||||
|         {"HIPS",    true} | ||||
| }; | ||||
| 
 | ||||
| void CalibrationWizard::on_select_tray(SimpleEvent& evt) { | ||||
|     // when set selection of comboBox or select a checkbox/radio will enter
 | ||||
| 
 | ||||
|     FilamentComboBoxList fcb_list = get_selected_filament_comboBox(); | ||||
|     if (fcb_list.empty()) { | ||||
|         m_filament_preset = nullptr; | ||||
|         m_filament_presets.clear(); | ||||
|         m_filaments_incompatible_tips->SetLabel(""); | ||||
|         m_filaments_incompatible_tips->Hide(); | ||||
|         recommend_input_value(); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     auto first_preset = fcb_list[0]->GetComboBox()->get_selected_preset(); | ||||
|     if(!first_preset) { | ||||
|         m_filament_preset = nullptr; | ||||
|         recommend_input_value(); | ||||
|         return; | ||||
|     // check compatibility
 | ||||
|     bool has_high_temperature_filament = false; | ||||
|     bool has_low_temperature_filament = false; | ||||
|     wxString hight_temp_filament_type; | ||||
|     wxString low_temp_filament_type; | ||||
|     for (auto& fcb : fcb_list) { | ||||
|         wxString filament_type = fcb->GetComboBox()->get_selected_preset()->alias; | ||||
|         for (auto& item : filament_is_high_temp) { | ||||
|             if (filament_type.Contains(item.first)) { | ||||
|                 if (item.second == true) { | ||||
|                     has_high_temperature_filament = true; | ||||
|                     hight_temp_filament_type = item.first; | ||||
|                 } | ||||
|                 else { | ||||
|                     has_low_temperature_filament = true; | ||||
|                     low_temp_filament_type = item.first; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     bool all_preset_same = true; | ||||
|     for (auto fcb : fcb_list) { | ||||
|         auto selected_preset = fcb->GetComboBox()->get_selected_preset(); | ||||
|         if (selected_preset && selected_preset->filament_id != first_preset->filament_id) | ||||
|             all_preset_same = false; | ||||
|     } | ||||
|     if (!all_preset_same) { | ||||
|         m_filament_preset = nullptr; | ||||
|         wxString tips = wxString(_L("filaments incompatible, please select same type of material")); | ||||
|     if (has_high_temperature_filament && has_low_temperature_filament) { | ||||
|         m_filament_presets.clear(); | ||||
|         wxString tips = wxString::Format(_L("Unable to print %s and %s together. Filaments have large bed temperature difference"), hight_temp_filament_type, low_temp_filament_type); | ||||
|         m_filaments_incompatible_tips->SetLabel(tips); | ||||
|         m_filaments_incompatible_tips->Show(); | ||||
|         Layout(); | ||||
|     } | ||||
|     else { | ||||
|         m_filament_preset = const_cast<Preset*>(first_preset); | ||||
|         for (auto& fcb : fcb_list) { | ||||
|             m_filament_presets[fcb->get_tray_id()] = (const_cast<Preset*>(fcb->GetComboBox()->get_selected_preset())); | ||||
|         } | ||||
|         m_filaments_incompatible_tips->SetLabel(""); | ||||
|         m_filaments_incompatible_tips->Hide(); | ||||
|         Layout(); | ||||
|  | @ -1618,7 +1651,7 @@ void CalibrationWizard::on_update_ams_filament(bool dialog) | |||
| } | ||||
| 
 | ||||
| bool CalibrationWizard::recommend_input_value() { | ||||
|     if (!m_filament_preset){ | ||||
|     if (m_filament_presets.empty()) { | ||||
|         m_nozzle_temp->GetTextCtrl()->SetValue(wxEmptyString); | ||||
|         m_bed_temp->GetTextCtrl()->SetValue(wxEmptyString); | ||||
|         m_max_volumetric_speed->GetTextCtrl()->SetValue(wxEmptyString); | ||||
|  | @ -1627,50 +1660,53 @@ bool CalibrationWizard::recommend_input_value() { | |||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     PresetBundle* preset_bundle = wxGetApp().preset_bundle; | ||||
|     int bed_temp_int = -1; | ||||
|     bool bed_temp_compatible = true; | ||||
|     PresetBundle* preset_bundle = wxGetApp().preset_bundle; | ||||
|     if (preset_bundle) { | ||||
|         // update nozzle temperature
 | ||||
|         ConfigOption* opt_nozzle_temp = m_filament_preset->config.option("nozzle_temperature"); | ||||
|         if (opt_nozzle_temp) { | ||||
|             ConfigOptionInts* opt_min_ints = dynamic_cast<ConfigOptionInts*>(opt_nozzle_temp); | ||||
|             if (opt_min_ints) { | ||||
|                 wxString text_nozzle_temp = wxString::Format("%d", opt_min_ints->get_at(0)); | ||||
|                 m_nozzle_temp->GetTextCtrl()->SetValue(text_nozzle_temp); | ||||
|         for (auto& filament_preset : m_filament_presets) { | ||||
|             // update nozzle temperature
 | ||||
|             ConfigOption* opt_nozzle_temp = filament_preset.second->config.option("nozzle_temperature"); | ||||
|             if (opt_nozzle_temp) { | ||||
|                 ConfigOptionInts* opt_min_ints = dynamic_cast<ConfigOptionInts*>(opt_nozzle_temp); | ||||
|                 if (opt_min_ints) { | ||||
|                     wxString text_nozzle_temp = wxString::Format("%d", opt_min_ints->get_at(0)); | ||||
|                     m_nozzle_temp->GetTextCtrl()->SetValue(text_nozzle_temp); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         // update bed temperature
 | ||||
|         bed_temp_int = get_bed_temp(&m_filament_preset->config); | ||||
|         wxString bed_temp_text = wxString::Format("%d", bed_temp_int); | ||||
|         m_bed_temp->GetTextCtrl()->SetValue(bed_temp_text); | ||||
|         // update max flow speed
 | ||||
|         ConfigOption* opt_flow_speed = m_filament_preset->config.option("filament_max_volumetric_speed"); | ||||
|         if (opt_flow_speed) { | ||||
|             ConfigOptionFloats* opt_flow_floats = dynamic_cast<ConfigOptionFloats*>(opt_flow_speed); | ||||
|             if (opt_flow_floats) { | ||||
|                 wxString flow_val_text = wxString::Format("%0.2f", opt_flow_floats->get_at(0)); | ||||
|                 m_max_volumetric_speed->GetTextCtrl()->SetValue(flow_val_text); | ||||
|             // update bed temperature
 | ||||
|             bed_temp_int = get_bed_temp(&filament_preset.second->config); | ||||
|             wxString bed_temp_text = wxString::Format("%d", bed_temp_int); | ||||
|             m_bed_temp->GetTextCtrl()->SetValue(bed_temp_text); | ||||
|             // update max flow speed
 | ||||
|             ConfigOption* opt_flow_speed = filament_preset.second->config.option("filament_max_volumetric_speed"); | ||||
|             if (opt_flow_speed) { | ||||
|                 ConfigOptionFloats* opt_flow_floats = dynamic_cast<ConfigOptionFloats*>(opt_flow_speed); | ||||
|                 if (opt_flow_floats) { | ||||
|                     wxString flow_val_text = wxString::Format("%0.2f", opt_flow_floats->get_at(0)); | ||||
|                     m_max_volumetric_speed->GetTextCtrl()->SetValue(flow_val_text); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // check compatibility
 | ||||
|         if (m_bed_temp->GetTextCtrl()->GetValue().compare("0") == 0) { | ||||
|             m_nozzle_temp->GetTextCtrl()->SetValue(wxEmptyString); | ||||
|             m_bed_temp->GetTextCtrl()->SetValue(wxEmptyString); | ||||
|             m_max_volumetric_speed->GetTextCtrl()->SetValue(wxEmptyString); | ||||
|             wxString tips = wxString::Format(_L("%s does not support %s"), m_comboBox_bed_type->GetValue(), m_filament_preset->alias); | ||||
|             m_bed_type_incompatible_tips->SetLabel(tips); | ||||
|             m_bed_type_incompatible_tips->Update(); | ||||
|             m_bed_type_incompatible_tips->Show(); | ||||
|             Layout(); | ||||
|             return false; | ||||
|         } | ||||
|         else { | ||||
|             m_bed_type_incompatible_tips->SetLabel(""); | ||||
|             m_bed_type_incompatible_tips->Hide(); | ||||
|             // check compatibility
 | ||||
|             if (m_bed_temp->GetTextCtrl()->GetValue().compare("0") <= 0) { | ||||
|                 m_nozzle_temp->GetTextCtrl()->SetValue(wxEmptyString); | ||||
|                 m_bed_temp->GetTextCtrl()->SetValue(wxEmptyString); | ||||
|                 m_max_volumetric_speed->GetTextCtrl()->SetValue(wxEmptyString); | ||||
|                 wxString tips = wxString::Format(_L("%s is not compatible with %s"), m_comboBox_bed_type->GetValue(), filament_preset.second->alias); | ||||
|                 m_bed_type_incompatible_tips->SetLabel(tips); | ||||
|                 m_bed_type_incompatible_tips->Update(); | ||||
|                 m_bed_type_incompatible_tips->Show(); | ||||
|                 Layout(); | ||||
|                 bed_temp_compatible = false; | ||||
|             } | ||||
|             else { | ||||
|                 m_bed_type_incompatible_tips->SetLabel(""); | ||||
|                 m_bed_type_incompatible_tips->Hide(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     return true; | ||||
|     return bed_temp_compatible; | ||||
| } | ||||
| 
 | ||||
| int CalibrationWizard::get_bed_temp(DynamicPrintConfig* config) | ||||
|  | @ -1683,16 +1719,16 @@ int CalibrationWizard::get_bed_temp(DynamicPrintConfig* config) | |||
|     return -1; | ||||
| } | ||||
| 
 | ||||
| bool CalibrationWizard::save_presets(const std::string& config_key, ConfigOption* config_value, const std::string& name) | ||||
| bool CalibrationWizard::save_presets(Preset* preset, const std::string& config_key, ConfigOption* config_value, const std::string& name) | ||||
| { | ||||
|     auto filament_presets = &wxGetApp().preset_bundle->filaments; | ||||
|     DynamicPrintConfig* filament_config = &m_filament_preset->config; | ||||
|     DynamicPrintConfig* filament_config = &preset->config; | ||||
| 
 | ||||
|     bool save_to_project = false; | ||||
| 
 | ||||
|     filament_config->set_key_value(config_key, config_value); | ||||
|     // Save the preset into Slic3r::data_dir / presets / section_name / preset_name.ini
 | ||||
|     filament_presets->save_current_preset(name, false, save_to_project, m_filament_preset); | ||||
|     filament_presets->save_current_preset(name, false, save_to_project, preset); | ||||
| 
 | ||||
|     Preset* new_preset = filament_presets->find_preset(name, false, true); | ||||
|     if (!new_preset) { | ||||
|  | @ -2088,7 +2124,7 @@ void PressureAdvanceWizard::sync_save_page_data() { | |||
|     grid_sizer->Add(left_title_sizer); | ||||
|     grid_sizer->AddSpacer(COLUMN_GAP); | ||||
| 
 | ||||
|     for (auto fcb : fcb_list) { | ||||
|     for (auto& fcb : fcb_list) { | ||||
|         bool result_failed = false; | ||||
|         auto it_result = std::find_if(m_calib_results.begin(), m_calib_results.end(), [fcb](auto& calib_result) { | ||||
|             return calib_result.tray_id == fcb->get_tray_id(); | ||||
|  | @ -2135,7 +2171,7 @@ void PressureAdvanceWizard::sync_save_page_data() { | |||
|             static std::vector<PACalibResult> filtered_results; | ||||
|             filtered_results.clear(); | ||||
|             for (auto history : m_calib_results_history) { | ||||
|                 if (history.setting_id == m_filament_preset->setting_id) { | ||||
|                 if (history.setting_id == m_filament_presets[fcb->get_tray_id()]->setting_id) { | ||||
|                     filtered_results.push_back(history); | ||||
|                     selections.push_back(history.name); | ||||
|                 } | ||||
|  | @ -2261,6 +2297,10 @@ bool PressureAdvanceWizard::start_calibration(std::vector<int> tray_ids) | |||
|     int bed_temp = -1; | ||||
|     float max_volumetric_speed = -1; | ||||
| 
 | ||||
|     if (m_nozzle_temp->GetTextCtrl()->GetValue().IsEmpty() || | ||||
|         m_bed_temp->GetTextCtrl()->GetValue().IsEmpty() || | ||||
|         m_max_volumetric_speed->GetTextCtrl()->GetValue().IsEmpty()) | ||||
|         return false; | ||||
|     nozzle_temp = stoi(m_nozzle_temp->GetTextCtrl()->GetValue().ToStdString()); | ||||
|     bed_temp = stoi(m_bed_temp->GetTextCtrl()->GetValue().ToStdString()); | ||||
|     max_volumetric_speed = stof(m_max_volumetric_speed->GetTextCtrl()->GetValue().ToStdString()); | ||||
|  | @ -2275,11 +2315,13 @@ bool PressureAdvanceWizard::start_calibration(std::vector<int> tray_ids) | |||
|         m_calib_results.clear(); | ||||
|         X1CCalibInfos calib_infos; | ||||
|         for (int tray_id : tray_ids) { | ||||
|             if (m_filament_presets.find(tray_id) == m_filament_presets.end()) | ||||
|                 return false; | ||||
|             X1CCalibInfos::X1CCalibInfo calib_info; | ||||
|             calib_info.tray_id = tray_id; | ||||
|             calib_info.nozzle_diameter = dynamic_cast<ConfigOptionFloats *>(m_printer_preset->config.option("nozzle_diameter"))->get_at(0); | ||||
|             calib_info.filament_id = m_filament_preset->filament_id; | ||||
|             calib_info.setting_id = m_filament_preset->setting_id; | ||||
|             calib_info.filament_id = m_filament_presets[tray_id]->filament_id; | ||||
|             calib_info.setting_id = m_filament_presets[tray_id]->setting_id; | ||||
|             calib_info.bed_temp = bed_temp; | ||||
|             calib_info.nozzle_temp = nozzle_temp; | ||||
|             calib_info.max_volumetric_speed = max_volumetric_speed; | ||||
|  | @ -2297,7 +2339,7 @@ bool PressureAdvanceWizard::start_calibration(std::vector<int> tray_ids) | |||
|         return true; | ||||
|     } | ||||
|     else { | ||||
|         curr_obj->command_start_extrusion_cali(tray_ids[0], nozzle_temp, bed_temp, max_volumetric_speed, m_filament_preset->setting_id); | ||||
|         curr_obj->command_start_extrusion_cali(tray_ids[0], nozzle_temp, bed_temp, max_volumetric_speed, m_filament_presets.begin()->second->setting_id); | ||||
|         show_page(get_curr_page()->get_next_page()); | ||||
|         return true; | ||||
|     } | ||||
|  | @ -2381,8 +2423,8 @@ bool PressureAdvanceWizard::save_calibration_result() | |||
|         nozzle_temp = stoi(m_nozzle_temp->GetTextCtrl()->GetValue().ToStdString()); | ||||
|         bed_temp = stoi(m_bed_temp->GetTextCtrl()->GetValue().ToStdString()); | ||||
|         max_volumetric_speed = stof(m_max_volumetric_speed->GetTextCtrl()->GetValue().ToStdString()); | ||||
|         setting_id = m_filament_preset->setting_id; | ||||
|         name = m_filament_preset->name; | ||||
|         setting_id = m_filament_presets.begin()->second->setting_id; | ||||
|         name = m_filament_presets.begin()->second->name; | ||||
| 
 | ||||
|         // send command
 | ||||
|         std::vector<int> tray_ids = get_selected_tray(); | ||||
|  | @ -2467,8 +2509,8 @@ FlowRateWizard::FlowRateWizard(wxWindow* parent, wxWindowID id, const wxPoint& p | |||
| } | ||||
| 
 | ||||
| void FlowRateWizard::set_save_name() { | ||||
|     if (m_filament_preset) { | ||||
|         m_save_name = m_filament_preset->alias + "-Calibrated"; | ||||
|     if (m_filament_presets.size() > 0) { | ||||
|         m_save_name = m_filament_presets.begin()->second->alias + "-Calibrated"; | ||||
|     } | ||||
|     else { m_save_name = ""; } | ||||
|     if (!is_high_end_type(curr_obj)) { | ||||
|  | @ -2656,16 +2698,16 @@ void FlowRateWizard::create_low_end_pages() { | |||
|     show_page(m_curr_page); | ||||
| 
 | ||||
|     m_optimal_block_coarse->Bind(wxEVT_COMBOBOX, [this](auto& e) { | ||||
|         if (m_filament_preset) { | ||||
|             DynamicPrintConfig& filament_config = m_filament_preset->config; | ||||
|         if (m_filament_presets.begin()->second) { | ||||
|             DynamicPrintConfig& filament_config = m_filament_presets.begin()->second->config; | ||||
|             auto curr_flow_ratio = filament_config.option<ConfigOptionFloats>("filament_flow_ratio")->get_at(0); | ||||
|             m_coarse_calc_result = curr_flow_ratio * (100.0f + stof(m_optimal_block_coarse->GetValue().ToStdString())) / 100.0f; | ||||
|             m_coarse_calc_result_text->SetLabel(wxString::Format(_L("flow ratio : %s "), std::to_string(m_coarse_calc_result))); | ||||
|         } | ||||
|         }); | ||||
|     m_optimal_block_fine->Bind(wxEVT_COMBOBOX, [this](auto& e) { | ||||
|         if (m_filament_preset) { | ||||
|             DynamicPrintConfig& filament_config = m_filament_preset->config; | ||||
|         if (m_filament_presets.begin()->second) { | ||||
|             DynamicPrintConfig& filament_config = m_filament_presets.begin()->second->config; | ||||
|             auto curr_flow_ratio = filament_config.option<ConfigOptionFloats>("filament_flow_ratio")->get_at(0); | ||||
|             m_fine_calc_result = curr_flow_ratio * (100.0f + stof(m_optimal_block_fine->GetValue().ToStdString())) / 100.0f; | ||||
|             m_fine_calc_result_text->SetLabel(wxString::Format(_L("flow ratio : %s "), std::to_string(m_fine_calc_result))); | ||||
|  | @ -2874,7 +2916,7 @@ void FlowRateWizard::sync_save_page_data() { | |||
|     grid_sizer->AddSpacer(COLUMN_GAP); | ||||
| 
 | ||||
|     FilamentComboBoxList fcb_list = get_selected_filament_comboBox(); | ||||
|     for (auto fcb : fcb_list) { | ||||
|     for (auto& fcb : fcb_list) { | ||||
|         bool result_failed = false; | ||||
|         auto it_result = std::find_if(m_calib_results.begin(), m_calib_results.end(), [fcb](auto& calib_result) { | ||||
|             return calib_result.tray_id == fcb->get_tray_id(); | ||||
|  | @ -2909,7 +2951,7 @@ void FlowRateWizard::sync_save_page_data() { | |||
|             save_name_input->GetTextCtrl()->Bind(wxEVT_TEXT_ENTER, [this, fcb, save_name_input](auto& e) { | ||||
|                 m_high_end_save_names[fcb->get_tray_id()] = save_name_input->GetTextCtrl()->GetValue().ToStdString(); | ||||
|                 e.Skip(); | ||||
|         }); | ||||
|                 }); | ||||
|             save_name_input->GetTextCtrl()->Bind(wxEVT_KILL_FOCUS, [this, fcb, save_name_input](auto& e) { | ||||
|                 m_high_end_save_names[fcb->get_tray_id()] = save_name_input->GetTextCtrl()->GetValue().ToStdString(); | ||||
|                 }); | ||||
|  | @ -2995,6 +3037,10 @@ bool FlowRateWizard::start_calibration(std::vector<int> tray_ids) | |||
|     int bed_temp = -1; | ||||
|     float max_volumetric_speed = -1; | ||||
| 
 | ||||
|     if (m_nozzle_temp->GetTextCtrl()->GetValue().IsEmpty() || | ||||
|         m_bed_temp->GetTextCtrl()->GetValue().IsEmpty() || | ||||
|         m_max_volumetric_speed->GetTextCtrl()->GetValue().IsEmpty()) | ||||
|         return false; | ||||
|     nozzle_temp = stoi(m_nozzle_temp->GetTextCtrl()->GetValue().ToStdString()); | ||||
|     bed_temp = stoi(m_bed_temp->GetTextCtrl()->GetValue().ToStdString()); | ||||
|     max_volumetric_speed = stof(m_max_volumetric_speed->GetTextCtrl()->GetValue().ToStdString()); | ||||
|  | @ -3009,15 +3055,17 @@ bool FlowRateWizard::start_calibration(std::vector<int> tray_ids) | |||
|         m_calib_results.clear(); | ||||
|         X1CCalibInfos calib_infos; | ||||
|         for (int tray_id : tray_ids) { | ||||
|             if (m_filament_presets.find(tray_id) == m_filament_presets.end()) | ||||
|                 return false; | ||||
|             X1CCalibInfos::X1CCalibInfo calib_info; | ||||
|             calib_info.tray_id = tray_id; | ||||
|             calib_info.nozzle_diameter = dynamic_cast<ConfigOptionFloats *>(m_printer_preset->config.option("nozzle_diameter"))->get_at(0); | ||||
|             calib_info.filament_id = m_filament_preset->filament_id; | ||||
|             calib_info.setting_id = m_filament_preset->setting_id; | ||||
|             calib_info.filament_id = m_filament_presets.at(tray_id)->filament_id; | ||||
|             calib_info.setting_id = m_filament_presets.at(tray_id)->setting_id; | ||||
|             calib_info.bed_temp = bed_temp; | ||||
|             calib_info.nozzle_temp = nozzle_temp; | ||||
|             calib_info.max_volumetric_speed = max_volumetric_speed; | ||||
|             calib_info.flow_rate = m_filament_preset->config.option<ConfigOptionFloats>("filament_flow_ratio")->get_at(0); | ||||
|             calib_info.flow_rate = m_filament_presets.at(tray_id)->config.option<ConfigOptionFloats>("filament_flow_ratio")->get_at(0); | ||||
|             calib_infos.calib_datas.push_back(calib_info); | ||||
|         } | ||||
|         std::string error_message; | ||||
|  | @ -3052,7 +3100,7 @@ bool FlowRateWizard::start_calibration(std::vector<int> tray_ids) | |||
|         calib_info.process_bar = m_send_progress_bar; | ||||
|         calib_info.bed_type = BedType(m_comboBox_bed_type->GetSelection() + btDefault + 1); | ||||
|         calib_info.printer_prest = m_printer_preset; | ||||
|         calib_info.filament_prest = m_filament_preset; | ||||
|         calib_info.filament_prest = m_filament_presets.begin()->second; | ||||
|         calib_info.print_prest = m_print_preset; | ||||
| 
 | ||||
|         std::string error_message; | ||||
|  | @ -3074,12 +3122,12 @@ bool FlowRateWizard::start_calibration(std::vector<int> tray_ids) | |||
| bool FlowRateWizard::save_calibration_result() | ||||
| { | ||||
|     if (is_high_end_type(curr_obj)) { | ||||
|         DynamicPrintConfig& filament_config = m_filament_preset->config; | ||||
|         for (int i = 0; i < m_calib_results.size(); i++) { | ||||
|             DynamicPrintConfig& filament_config = m_filament_presets[m_calib_results[i].tray_id]->config; //todo access overflow
 | ||||
|             // todo if names are same, will be covered
 | ||||
|             auto it = m_high_end_save_names.find(m_calib_results[i].tray_id); | ||||
|             if (it != m_high_end_save_names.end() && !it->second.empty()) { | ||||
|                 save_presets("filament_flow_ratio", new ConfigOptionFloats{ m_calib_results[i].flow_ratio }, it->second); | ||||
|                 save_presets(m_filament_presets.at(m_calib_results[i].tray_id), "filament_flow_ratio", new ConfigOptionFloats{ m_calib_results[i].flow_ratio }, it->second); | ||||
|                 return true; | ||||
|             } | ||||
| 
 | ||||
|  | @ -3115,8 +3163,7 @@ bool FlowRateWizard::save_calibration_result() | |||
|             msg_dlg.ShowModal(); | ||||
|             return false; | ||||
|         } | ||||
|         DynamicPrintConfig& filament_config = m_filament_preset->config; | ||||
|         save_presets("filament_flow_ratio", new ConfigOptionFloats{ result_value }, m_save_name); | ||||
|         save_presets(m_filament_presets.begin()->second, "filament_flow_ratio", new ConfigOptionFloats{ result_value }, m_save_name); | ||||
|         reset_reuse_panels(); | ||||
|         return true; | ||||
|     } | ||||
|  | @ -3144,6 +3191,7 @@ void FlowRateWizard::reset_print_panel_to_page(CalibrationWizardPage* page, wxBo | |||
| void FlowRateWizard::reset_send_progress_to_page(CalibrationWizardPage* page, wxBoxSizer* sizer) | ||||
| { | ||||
|     m_send_progress_panel->Reparent(page); | ||||
|     sizer->Insert(1, m_send_progress_panel, 0, wxALIGN_CENTER, 0); | ||||
| } | ||||
| 
 | ||||
| void FlowRateWizard::on_fine_tune(wxCommandEvent& e) { | ||||
|  | @ -3153,7 +3201,7 @@ void FlowRateWizard::on_fine_tune(wxCommandEvent& e) { | |||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     DynamicPrintConfig& filament_config = m_filament_preset->config; | ||||
|     DynamicPrintConfig& filament_config = m_filament_presets.begin()->second->config; | ||||
|     filament_config.set_key_value("filament_flow_ratio", new ConfigOptionFloats{ m_coarse_calc_result }); | ||||
| 
 | ||||
|     reset_send_progress_to_page(m_low_end_page3, m_low_end_page3->get_btn_hsizer()); | ||||
|  | @ -3187,8 +3235,8 @@ MaxVolumetricSpeedWizard::MaxVolumetricSpeedWizard(wxWindow* parent, wxWindowID | |||
| } | ||||
| 
 | ||||
| void MaxVolumetricSpeedWizard::set_save_name() { | ||||
|     if (m_filament_preset) { | ||||
|         m_save_name = m_filament_preset->alias + "-Calibrated"; | ||||
|     if (m_filament_presets.begin()->second) { | ||||
|         m_save_name = m_filament_presets.begin()->second->alias + "-Calibrated"; | ||||
|     } | ||||
|     else { m_save_name = ""; } | ||||
|     m_save_name_input->GetTextCtrl()->SetValue(m_save_name); | ||||
|  | @ -3369,7 +3417,7 @@ bool MaxVolumetricSpeedWizard::start_calibration(std::vector<int> tray_ids) | |||
|     calib_info.process_bar = m_send_progress_bar; | ||||
|     calib_info.bed_type       = BedType(m_comboBox_bed_type->GetSelection() + btDefault + 1); | ||||
|     calib_info.printer_prest  = m_printer_preset; | ||||
|     calib_info.filament_prest = m_filament_preset; | ||||
|     calib_info.filament_prest = m_filament_presets.begin()->second; | ||||
|     calib_info.print_prest    = m_print_preset; | ||||
| 
 | ||||
|     std::string error_message; | ||||
|  | @ -3398,7 +3446,7 @@ bool MaxVolumetricSpeedWizard::save_calibration_result() | |||
|         msg_dlg.ShowModal(); | ||||
|         return false; | ||||
|     } | ||||
|     save_presets("filament_max_volumetric_speed", new ConfigOptionFloats{ max_volumetric_speed }, m_save_name); | ||||
|     save_presets(m_filament_presets.begin()->second, "filament_max_volumetric_speed", new ConfigOptionFloats{ max_volumetric_speed }, m_save_name); | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
|  | @ -3431,8 +3479,8 @@ TemperatureWizard::TemperatureWizard(wxWindow* parent, wxWindowID id, const wxPo | |||
| } | ||||
| 
 | ||||
| void TemperatureWizard::set_save_name() { | ||||
|     if (m_filament_preset) { | ||||
|         m_save_name = m_filament_preset->alias + "-Calibrated"; | ||||
|     if (m_filament_presets.begin()->second) { | ||||
|         m_save_name = m_filament_presets.begin()->second->alias + "-Calibrated"; | ||||
|     } | ||||
|     else { m_save_name = ""; } | ||||
|     m_save_name_input->GetTextCtrl()->SetValue(m_save_name); | ||||
|  | @ -3603,7 +3651,7 @@ bool TemperatureWizard::start_calibration(std::vector<int> tray_ids) | |||
|     calib_info.process_bar = m_send_progress_bar; | ||||
|     calib_info.bed_type = BedType(m_comboBox_bed_type->GetSelection() + btDefault + 1); | ||||
|     calib_info.printer_prest  = m_printer_preset; | ||||
|     calib_info.filament_prest = m_filament_preset; | ||||
|     calib_info.filament_prest = m_filament_presets.begin()->second; | ||||
|     calib_info.print_prest    = m_print_preset; | ||||
| 
 | ||||
|     std::string error_message; | ||||
|  | @ -3631,7 +3679,7 @@ bool TemperatureWizard::save_calibration_result() | |||
|         msg_dlg.ShowModal(); | ||||
|         return false; | ||||
|     } | ||||
|     save_presets("nozzle_temperature", new ConfigOptionInts(1, temp), m_save_name); | ||||
|     save_presets(m_filament_presets.begin()->second, "nozzle_temperature", new ConfigOptionInts(1, temp), m_save_name); | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
|  | @ -3643,7 +3691,7 @@ bool TemperatureWizard::recommend_input_value() | |||
|         return false; | ||||
|     } | ||||
|     else { | ||||
|         wxString filament_name = m_filament_preset->alias; | ||||
|         wxString filament_name = m_filament_presets.begin()->second->alias; | ||||
| 
 | ||||
|         int start, end; | ||||
|         if (filament_name.Contains("ABS") || filament_name.Contains("ASA")) {//todo supplement
 | ||||
|  | @ -3695,8 +3743,8 @@ RetractionWizard::RetractionWizard(wxWindow* parent, wxWindowID id, const wxPoin | |||
| } | ||||
| 
 | ||||
| void RetractionWizard::set_save_name() { | ||||
|     if (m_filament_preset) { | ||||
|         m_save_name = m_filament_preset->alias + "-Calibrated"; | ||||
|     if (m_filament_presets.begin()->second) { | ||||
|         m_save_name = m_filament_presets.begin()->second->alias + "-Calibrated"; | ||||
|     } | ||||
|     else { m_save_name = ""; } | ||||
|     m_save_name_input->GetTextCtrl()->SetValue(m_save_name); | ||||
|  | @ -3866,7 +3914,7 @@ bool RetractionWizard::start_calibration(std::vector<int> tray_ids) | |||
|     calib_info.process_bar = m_send_progress_bar; | ||||
|     calib_info.bed_type = BedType(m_comboBox_bed_type->GetSelection() + btDefault + 1); | ||||
|     calib_info.printer_prest = m_printer_preset; | ||||
|     calib_info.filament_prest = m_filament_preset; | ||||
|     calib_info.filament_prest = m_filament_presets.begin()->second; | ||||
|     calib_info.print_prest = m_print_preset; | ||||
| 
 | ||||
|     std::string error_message; | ||||
|  | @ -3894,7 +3942,7 @@ bool RetractionWizard::save_calibration_result() | |||
|         msg_dlg.ShowModal(); | ||||
|         return false; | ||||
|     } | ||||
|     save_presets("retraction_length", new ConfigOptionFloats{ length }, m_save_name); | ||||
|     save_presets(m_filament_presets.begin()->second, "retraction_length", new ConfigOptionFloats{ length }, m_save_name); | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -41,7 +41,7 @@ public: | |||
|     void SetRadioBox(wxRadioButton* btn) { m_radioBox = btn; } | ||||
|     virtual bool Show(bool show = true); | ||||
|     virtual bool Enable(bool enable); | ||||
|     virtual void SetValue(bool value); | ||||
|     virtual void SetValue(bool value, bool send_event = true); | ||||
| 
 | ||||
| protected: | ||||
|     int m_tray_id; | ||||
|  | @ -129,7 +129,8 @@ protected: | |||
|     ComboBox* m_comboBox_bed_type; | ||||
|     ComboBox* m_comboBox_process; | ||||
|     Preset* m_printer_preset{nullptr}; | ||||
|     Preset* m_filament_preset{ nullptr }; | ||||
|     //Preset* m_filament_preset{ nullptr };
 | ||||
|     std::map<int, Preset*> m_filament_presets; | ||||
|     Preset* m_print_preset{ nullptr }; | ||||
|     wxStaticText* m_from_text; | ||||
|     wxStaticText* m_to_text; | ||||
|  | @ -190,7 +191,7 @@ protected: | |||
|     void reset_printing_values(); | ||||
| 
 | ||||
|     // save
 | ||||
|     bool save_presets(const std::string& config_key, ConfigOption* config_value, const std::string& name); | ||||
|     bool save_presets(Preset* preset, const std::string& config_key, ConfigOption* config_value, const std::string& name); | ||||
| 
 | ||||
|     // event handlers
 | ||||
|     void on_select_nozzle(wxCommandEvent& evt); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 liz.li
						liz.li