ENH: calibration
1.fix some issue: STUDIO-3127、STUDIO-3138、STUDIO-3135、STUDIO-3123、STUDIO-3117、STUDIO-3115、STUDIO-3114、STUDIO-3113、STUDIO-3112 and other issues 2.refine UI 3.FLOW RATE multi-slots calibrate saving related logic 4.add input validate and access protection Change-Id: Ie6c04fdfd050cc48607182bd8cc8f145381a5b70
| Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB | 
							
								
								
									
										
											BIN
										
									
								
								resources/images/flow_rate_calibration_fine.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 30 KiB | 
							
								
								
									
										
											BIN
										
									
								
								resources/images/max_volumetric_speed_calibration.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 30 KiB | 
| Before Width: | Height: | Size: 194 KiB After Width: | Height: | Size: 194 KiB | 
| Before Width: | Height: | Size: 536 KiB After Width: | Height: | Size: 536 KiB | 
|  | @ -2,7 +2,9 @@ | |||
| #include "I18N.hpp" | ||||
| 
 | ||||
| namespace Slic3r { namespace GUI { | ||||
| 
 | ||||
| #define REFRESH_INTERVAL       1000 | ||||
| 
 | ||||
| CalibrationPanel::CalibrationPanel(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) | ||||
|     : wxPanel(parent, id, pos, size, style) | ||||
| { | ||||
|  | @ -39,6 +41,15 @@ void CalibrationPanel::init_tabpanel() { | |||
| 
 | ||||
|     m_temp_panel = new TemperatureWizard(m_tabpanel); | ||||
|     m_tabpanel->AddPage(m_temp_panel, _L("Temperature"), "", false); | ||||
| 
 | ||||
|     for (int i = 0; i < 4; i++) | ||||
|         m_tabpanel->SetPageImage(i, ""); | ||||
| 
 | ||||
|     m_tabpanel->Bind(wxEVT_BOOKCTRL_PAGE_CHANGED, [this](wxBookCtrlEvent&) { | ||||
|         wxCommandEvent e (EVT_CALIBRATION_TAB_CHANGED); | ||||
|         e.SetEventObject(m_tabpanel->GetCurrentPage()); | ||||
|         wxPostEvent(m_tabpanel->GetCurrentPage(), e); | ||||
|         }, m_tabpanel->GetId()); | ||||
| } | ||||
| 
 | ||||
| void CalibrationPanel::init_timer() | ||||
|  | @ -54,19 +65,19 @@ void CalibrationPanel::on_timer(wxTimerEvent& event) { | |||
| } | ||||
| 
 | ||||
| void CalibrationPanel::update_all() { | ||||
|     if (m_pa_panel) { | ||||
|     if (m_pa_panel && m_pa_panel->IsShown()) { | ||||
|         m_pa_panel->update_printer_selections(); | ||||
|         m_pa_panel->update_print_progress(); | ||||
|     } | ||||
|     if (m_flow_panel) { | ||||
|     if (m_flow_panel && m_flow_panel->IsShown()) { | ||||
|         m_flow_panel->update_printer_selections(); | ||||
|         m_flow_panel->update_print_progress(); | ||||
|     } | ||||
|     if (m_volumetric_panel) { | ||||
|     if (m_volumetric_panel && m_volumetric_panel->IsShown()) { | ||||
|         m_volumetric_panel->update_printer_selections(); | ||||
|         m_volumetric_panel->update_print_progress(); | ||||
|     } | ||||
|     if (m_temp_panel) { | ||||
|     if (m_temp_panel && m_temp_panel->IsShown()) { | ||||
|         m_temp_panel->update_printer_selections(); | ||||
|         m_temp_panel->update_print_progress(); | ||||
|     } | ||||
|  |  | |||
|  | @ -16,6 +16,7 @@ namespace Slic3r { namespace GUI { | |||
| 
 | ||||
| wxDECLARE_EVENT(EVT_CALIBRATION_TRAY_SELECTION_CHANGED, SimpleEvent); | ||||
| wxDECLARE_EVENT(EVT_CALIBRATION_NOTIFY_CHANGE_PAGES, SimpleEvent); | ||||
| wxDECLARE_EVENT(EVT_CALIBRATION_TAB_CHANGED, wxCommandEvent); | ||||
| 
 | ||||
| enum FilamentSelectMode { | ||||
|     FSMCheckBoxMode, | ||||
|  | @ -32,6 +33,7 @@ public: | |||
|     void load_tray_from_ams(int id, DynamicPrintConfig& tray); | ||||
|     void update_from_preset(); | ||||
|     int get_tray_id() { return m_tray_id; } | ||||
|     bool is_bbl_filament() { return m_is_bbl_filamnet; } | ||||
|     std::string get_tray_name() { return m_tray_name; } | ||||
|     CalibrateFilamentComboBox* GetComboBox() { return m_comboBox; } | ||||
|     CheckBox* GetCheckBox() { return m_checkBox; } | ||||
|  | @ -45,6 +47,7 @@ public: | |||
| protected: | ||||
|     int m_tray_id; | ||||
|     std::string m_tray_name; | ||||
|     bool m_is_bbl_filamnet{ false }; | ||||
| 
 | ||||
|     CheckBox* m_checkBox{nullptr}; | ||||
|     //RadioBox* m_radioBox;
 | ||||
|  | @ -73,6 +76,7 @@ protected: | |||
|     virtual bool save_calibration_result() = 0; | ||||
|     virtual bool recommend_input_value(); | ||||
|     virtual void request_calib_result() {}; | ||||
|     virtual void change_ams_select_mode() {}; | ||||
| 
 | ||||
| protected: | ||||
|     MachineObject* curr_obj{ nullptr }; | ||||
|  | @ -122,6 +126,8 @@ protected: | |||
| 
 | ||||
|     // print panel
 | ||||
|     wxPanel* m_print_panel; | ||||
|     wxStaticText* m_staticText_profile_value; | ||||
|     wxStaticText* m_printing_stage_value; | ||||
|     wxStaticText* m_staticText_progress_percent; | ||||
|     wxStaticText* m_staticText_progress_left_time; | ||||
|     wxStaticText* m_staticText_layers; | ||||
|  | @ -132,21 +138,28 @@ protected: | |||
|     PageButton* m_btn_recali; | ||||
| 
 | ||||
|     // save panel
 | ||||
|     //wxPanel* m_save_panel;
 | ||||
|     wxPanel* m_save_panel; | ||||
| 
 | ||||
| 
 | ||||
|     void add_presets_panel_to_page(CalibrationWizardPage* page, wxBoxSizer* sizer); | ||||
|     void add_print_panel_to_page(CalibrationWizardPage* page, wxBoxSizer* sizer); | ||||
|     void add_send_progress_to_page(CalibrationWizardPage* page, wxBoxSizer* sizer); | ||||
| 
 | ||||
|     void reset_printing_values(); | ||||
|     bool save_presets(const std::string& config_key, ConfigOption* config_value); | ||||
|     void create_presets_panel(CalibrationWizardPage* page, wxBoxSizer* sizer, bool need_custom_range = true); | ||||
|     void create_send_progress_bar(CalibrationWizardPage* page, wxBoxSizer* sizer); | ||||
|     void init_presets_selections(); | ||||
|     void init_nozzle_selections(); | ||||
|     void init_bed_type_selections(); | ||||
|     void init_process_selections(); | ||||
|     int get_bed_temp(DynamicPrintConfig* config); | ||||
|     FilamentSelectMode get_ams_select_mode() { if (!m_filament_comboBox_list.empty()) return m_filament_comboBox_list[0]->get_select_mode(); return FilamentSelectMode::FSMRadioMode; } | ||||
|     void set_ams_select_mode(FilamentSelectMode mode) { for (auto fcb : m_filament_comboBox_list) fcb->set_select_mode(mode); }; | ||||
|     void set_ams_select_mode(FilamentSelectMode mode); | ||||
|     std::vector<int> get_selected_tray(); | ||||
|     FilamentComboBoxList get_selected_filament_comboBox(); | ||||
| 
 | ||||
|     void create_print_panel(CalibrationWizardPage* page, wxBoxSizer* sizer); | ||||
|     void reset_printing_values(); | ||||
| 
 | ||||
|     void create_save_panel(CalibrationWizardPage* page, wxBoxSizer* sizer); | ||||
|     virtual void create_save_panel_content(wxBoxSizer* sizer) {} | ||||
|     bool save_presets(const std::string& config_key, ConfigOption* config_value, const std::string& name); | ||||
| 
 | ||||
|     // event handlers
 | ||||
|     void on_select_printer(wxCommandEvent& evt); | ||||
|     void on_select_nozzle(wxCommandEvent& evt); | ||||
|     void on_select_tray(SimpleEvent& evt); | ||||
|  | @ -159,17 +172,6 @@ protected: | |||
|     void on_choose_ext_spool(wxCommandEvent& event); | ||||
|     void on_update_ams_filament(bool dialog = true); | ||||
|     void on_switch_ams(std::string ams_id); | ||||
| 
 | ||||
| private: | ||||
|     void create_presets_panel(); | ||||
|     void create_print_panel(); | ||||
|     //void create_save_panel();
 | ||||
|     void create_send_progress_bar(); | ||||
| 
 | ||||
|     void init_presets_selections(); | ||||
|     void init_nozzle_selections(); | ||||
|     void init_bed_type_selections(); | ||||
|     void init_process_selections(); | ||||
| }; | ||||
| 
 | ||||
| class PressureAdvanceWizard : public CalibrationWizard{ | ||||
|  | @ -177,30 +179,39 @@ public: | |||
|     PressureAdvanceWizard(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); | ||||
|     ~PressureAdvanceWizard() {}; | ||||
| protected: | ||||
|     void create_low_end_pages(); | ||||
|     void create_high_end_pages(); | ||||
|     void create_history_window(); | ||||
|     virtual void create_pages() override; | ||||
|     virtual void create_save_panel_content(wxBoxSizer* sizer) override; | ||||
|     virtual bool start_calibration(std::vector<int> tray_ids) override; | ||||
|     virtual bool save_calibration_result() override; | ||||
|     virtual bool recommend_input_value() override; | ||||
|     virtual void request_calib_result() override; | ||||
|     virtual void change_ams_select_mode() override; | ||||
| 
 | ||||
|     void sync_save_page_data(); | ||||
|     void switch_pages(SimpleEvent& evt); | ||||
| private: | ||||
|     // page 1
 | ||||
|     // history page
 | ||||
|     //CalibrationWizardPage* m_history_page{ nullptr };
 | ||||
| 
 | ||||
|     // start page
 | ||||
|     CalibrationWizardPage* m_page0{ nullptr }; | ||||
| 
 | ||||
|     // preset page
 | ||||
|     CalibrationWizardPage* m_page1{ nullptr }; | ||||
| 
 | ||||
|     // page 2
 | ||||
|     // print page
 | ||||
|     CalibrationWizardPage* m_page2{ nullptr }; | ||||
| 
 | ||||
|     // page 3
 | ||||
|     CalibrationWizardPage* m_low_end_page3{ nullptr }; | ||||
|     // save page
 | ||||
|     CalibrationWizardPage* m_page3{ nullptr }; | ||||
|     wxPanel* m_low_end_save_panel; | ||||
|     TextInput* m_k_val; | ||||
|     TextInput* m_n_val; | ||||
| 
 | ||||
|     CalibrationWizardPage* m_high_end_page3{ nullptr }; | ||||
|     wxPanel* m_high_end_save_panel; | ||||
|     std::vector<PACalibResult> m_calib_results; | ||||
|     std::vector<PACalibResult> m_calib_results_history; | ||||
|     wxPanel* m_grid_panel; | ||||
| }; | ||||
| 
 | ||||
|  | @ -212,32 +223,46 @@ protected: | |||
|     void create_low_end_pages(); | ||||
|     void create_high_end_pages(); | ||||
|     virtual void create_pages() override; | ||||
|     virtual void create_save_panel_content(wxBoxSizer* sizer) override; | ||||
|     virtual bool start_calibration(std::vector<int> tray_ids) override; | ||||
|     virtual bool save_calibration_result() override; | ||||
|     virtual bool recommend_input_value() override; | ||||
|     virtual void request_calib_result() override; | ||||
|     virtual void change_ams_select_mode() override; | ||||
| 
 | ||||
|     void sync_save_page_data(); | ||||
|     void switch_pages(SimpleEvent& evt); | ||||
| private: | ||||
|     // page 1
 | ||||
|     // preset page
 | ||||
|     CalibrationWizardPage* m_page1{ nullptr }; | ||||
| 
 | ||||
|     // page 2
 | ||||
|     // print page
 | ||||
|     CalibrationWizardPage* m_page2{ nullptr }; | ||||
| 
 | ||||
|     // page 3
 | ||||
|     CalibrationWizardPage* m_low_end_page3{ nullptr }; | ||||
|     ComboBox* m_optimal_block_coarse; | ||||
|     wxStaticText* m_coarse_calc_result_text; | ||||
|     float m_coarse_calc_result; | ||||
|     CheckBox* m_checkBox_skip_calibration; | ||||
| 
 | ||||
|     CalibrationWizardPage* m_high_end_page3{ nullptr }; | ||||
|     std::vector<FlowRatioCalibResult> m_calib_results; | ||||
|     wxPanel* m_grid_panel; | ||||
|     std::map<int, std::string> m_high_end_save_names; | ||||
| 
 | ||||
|     // page 4
 | ||||
|     CalibrationWizardPage* m_low_end_page4{ nullptr }; | ||||
| 
 | ||||
|     // page 5
 | ||||
|     // save page
 | ||||
|     CalibrationWizardPage* m_low_end_page5{ nullptr }; | ||||
|     ComboBox* m_optimal_block_fine; | ||||
|     wxStaticText* m_fine_calc_result_text; | ||||
|     float m_fine_calc_result; | ||||
|     std::string m_save_name; | ||||
| 
 | ||||
|     void reset_print_panel_to_page(CalibrationWizardPage* page, wxBoxSizer* sizer); | ||||
|     void reset_send_progress_to_page(CalibrationWizardPage* page, wxBoxSizer* sizer); | ||||
|     void on_fine_tune(wxCommandEvent&); | ||||
| }; | ||||
| 
 | ||||
|  | @ -247,19 +272,23 @@ public: | |||
|     ~MaxVolumetricSpeedWizard() {}; | ||||
| protected: | ||||
|     virtual void create_pages() override; | ||||
|     virtual void create_save_panel_content(wxBoxSizer* sizer) override; | ||||
|     virtual bool start_calibration(std::vector<int> tray_ids) override; | ||||
|     virtual bool save_calibration_result() override; | ||||
|     virtual bool recommend_input_value() override; | ||||
| private: | ||||
|     // page 1
 | ||||
|     // preset page
 | ||||
|     CalibrationWizardPage* m_page1; | ||||
| 
 | ||||
|     // page 2
 | ||||
|     // print page
 | ||||
|     CalibrationWizardPage* m_page2; | ||||
| 
 | ||||
|     // page 3
 | ||||
|     // save page
 | ||||
|     CalibrationWizardPage* m_page3; | ||||
|     TextInput* m_optimal_max_speed; | ||||
|     wxStaticText* m_calc_result_text; | ||||
|     float m_calc_result; | ||||
|     std::string m_save_name; | ||||
| }; | ||||
| 
 | ||||
| class TemperatureWizard : public CalibrationWizard { | ||||
|  | @ -268,19 +297,21 @@ public: | |||
|     ~TemperatureWizard() {}; | ||||
| protected: | ||||
|     virtual void create_pages() override; | ||||
|     virtual void create_save_panel_content(wxBoxSizer* sizer) override; | ||||
|     virtual bool start_calibration(std::vector<int> tray_ids) override; | ||||
|     virtual bool save_calibration_result() override; | ||||
|     virtual bool recommend_input_value() override; | ||||
| private: | ||||
|     // page 1
 | ||||
|     // preset page
 | ||||
|     CalibrationWizardPage* m_page1; | ||||
| 
 | ||||
|     // page 2
 | ||||
|     // print page
 | ||||
|     CalibrationWizardPage* m_page2; | ||||
| 
 | ||||
|     // page 3
 | ||||
|     // save page
 | ||||
|     CalibrationWizardPage* m_page3; | ||||
|     TextInput* m_optimal_temp; | ||||
|     std::string m_save_name; | ||||
| }; | ||||
| 
 | ||||
| class VFAWizard : public CalibrationWizard {}; | ||||
|  |  | |||
|  | @ -87,40 +87,41 @@ CalibrationWizardPage::CalibrationWizardPage(wxWindow* parent, wxWindowID id, co | |||
|     page_sizer->AddSpacer(FromDIP(20)); | ||||
| 
 | ||||
|     m_top_sizer = new wxBoxSizer(wxHORIZONTAL); | ||||
|     m_top_sizer->AddSpacer(FromDIP(180)); | ||||
|     m_top_sizer->AddStretchSpacer(); | ||||
|     m_preset_text = new wxStaticText(this, wxID_ANY, _L("Preset"), wxDefaultPosition, wxDefaultSize, 0); | ||||
|     m_preset_text->SetFont(::Label::Head_14); | ||||
|     m_top_sizer->Add(m_preset_text, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(15)); | ||||
|     auto line1 = new wxPanel(this, wxID_ANY, wxDefaultPosition, {FromDIP(250), 1}); | ||||
|     auto line1 = new wxPanel(this, wxID_ANY, wxDefaultPosition, {FromDIP(200), 1}); | ||||
|     line1->SetBackgroundColour(*wxBLACK); | ||||
|     m_top_sizer->Add(line1, 1, wxALIGN_CENTER, 0); | ||||
|     m_calibration_text = new wxStaticText(this, wxID_ANY, _L("Calibration"), wxDefaultPosition, wxDefaultSize, 0); | ||||
|     m_calibration_text->SetFont(::Label::Head_14); | ||||
|     m_top_sizer->Add(m_calibration_text, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(15)); | ||||
|     auto line2 = new wxPanel(this, wxID_ANY, wxDefaultPosition, { FromDIP(250), 1}); | ||||
|     auto line2 = new wxPanel(this, wxID_ANY, wxDefaultPosition, { FromDIP(200), 1}); | ||||
|     line2->SetBackgroundColour(*wxBLACK); | ||||
|     m_top_sizer->Add(line2, 1, wxALIGN_CENTER, 0); | ||||
|     m_record_text = new wxStaticText(this, wxID_ANY, _L("Record"), wxDefaultPosition, wxDefaultSize, 0); | ||||
|     m_record_text->SetFont(::Label::Head_14); | ||||
|     m_top_sizer->Add(m_record_text, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(15)); | ||||
|     m_top_sizer->AddSpacer(FromDIP(180)); | ||||
|     m_top_sizer->AddStretchSpacer(); | ||||
|     page_sizer->Add(m_top_sizer, 0, wxEXPAND, 0); | ||||
| 
 | ||||
|     page_sizer->AddSpacer(FromDIP(40)); | ||||
| 
 | ||||
|     m_content_sizer = new wxBoxSizer(wxVERTICAL); | ||||
| 
 | ||||
|     page_sizer->Add(m_content_sizer, 0, wxEXPAND, 0); | ||||
|     page_sizer->Add(m_content_sizer, 0, wxALIGN_CENTER, 0); | ||||
| 
 | ||||
|     page_sizer->AddStretchSpacer(); | ||||
|     page_sizer->AddSpacer(FromDIP(40)); | ||||
| 
 | ||||
|     m_btn_sizer = new wxBoxSizer(wxHORIZONTAL); | ||||
|     m_btn_sizer->Add(0, 0, 1, wxEXPAND, 0); | ||||
|     m_btn_sizer->AddStretchSpacer(); | ||||
|     m_btn_prev = new PageButton(this, "Back", Back); | ||||
|     m_btn_sizer->Add(m_btn_prev, 0); | ||||
|     m_btn_sizer->AddSpacer(FromDIP(10)); | ||||
|     m_btn_next = new PageButton(this, "Next", Next); | ||||
|     m_btn_sizer->Add(m_btn_next, 0); | ||||
|     m_btn_sizer->AddStretchSpacer(); | ||||
| 
 | ||||
|     page_sizer->Add(m_btn_sizer, 0, wxEXPAND, 0); | ||||
| 
 | ||||
|  |  | |||
|  | @ -1383,10 +1383,11 @@ void Sidebar::load_ams_list(std::string const &device, MachineObject* obj) | |||
|     if (is_support_virtual_tray) { | ||||
|         DynamicPrintConfig vt_tray_config; | ||||
|         vt_tray_config.set_key_value("filament_id", new ConfigOptionStrings{ vt_tray.setting_id }); | ||||
|         vt_tray_config.set_key_value("tag_uid", new ConfigOptionStrings{ vt_tray.tag_uid }); | ||||
|         vt_tray_config.set_key_value("filament_type", new ConfigOptionStrings{ vt_tray.type }); | ||||
|         vt_tray_config.set_key_value("tray_name", new ConfigOptionStrings{std::string("Ext")}); | ||||
|         vt_tray_config.set_key_value("filament_colour", new ConfigOptionStrings{into_u8(wxColour("#" + vt_tray.color).GetAsString(wxC2S_HTML_SYNTAX))}); | ||||
|         vt_tray_config.set_key_value("filament_exist", new ConfigOptionBools{ vt_tray.is_exists }); | ||||
|         vt_tray_config.set_key_value("filament_exist", new ConfigOptionBools{ true }); | ||||
| 
 | ||||
|         filament_ams_list.emplace(VIRTUAL_TRAY_ID, std::move(vt_tray_config)); | ||||
|     } | ||||
|  | @ -1400,6 +1401,7 @@ void Sidebar::load_ams_list(std::string const &device, MachineObject* obj) | |||
|             char t = tray.first.front() - '0' + '1'; | ||||
|             DynamicPrintConfig tray_config; | ||||
|             tray_config.set_key_value("filament_id", new ConfigOptionStrings{tray.second->setting_id}); | ||||
|             tray_config.set_key_value("tag_uid", new ConfigOptionStrings{ tray.second->tag_uid }); | ||||
|             tray_config.set_key_value("filament_type", new ConfigOptionStrings{tray.second->type}); | ||||
|             tray_config.set_key_value("tray_name", new ConfigOptionStrings{std::string(1, n) + std::string(1, t)}); | ||||
|             tray_config.set_key_value("filament_colour", new ConfigOptionStrings{into_u8(wxColour("#" + tray.second->color).GetAsString(wxC2S_HTML_SYNTAX))}); | ||||
|  |  | |||
|  | @ -1397,6 +1397,7 @@ void GUI::CalibrateFilamentComboBox::load_tray(DynamicPrintConfig &config) | |||
| { | ||||
|     m_tray_name = config.opt_string("tray_name", 0u); | ||||
|     m_filament_id = config.opt_string("filament_id", 0u); | ||||
|     m_tag_uid = config.opt_string("tag_uid", 0u); | ||||
|     m_filament_type  = config.opt_string("filament_type", 0u); | ||||
|     m_filament_color = config.opt_string("filament_colour", 0u); | ||||
|     m_filament_exist = config.opt_bool("filament_exist", 0u); | ||||
|  | @ -1408,21 +1409,32 @@ void GUI::CalibrateFilamentComboBox::load_tray(DynamicPrintConfig &config) | |||
| #endif | ||||
|     if (!m_filament_exist) { | ||||
|         SetValue(_L("Empty")); | ||||
|         m_selected_preset = nullptr; | ||||
|         m_is_compatible = false; | ||||
|         clr_picker->SetBitmap(*get_extruder_color_icon("#F0F0F0FF", m_tray_name, 16, 16)); | ||||
|     } else { | ||||
|         auto &filaments = m_collection->get_presets(); | ||||
|         auto  iter      = std::find_if(filaments.begin(), filaments.end(), [this](auto &f) { return f.is_compatible && f.is_system && f.filament_id == m_filament_id; }); | ||||
|         if (iter == filaments.end() && !m_filament_type.empty()) { | ||||
|             auto filament_type = "Generic " + m_filament_type; | ||||
|             iter               = std::find_if(filaments.begin(), filaments.end(), | ||||
|                                 [&filament_type](auto &f) { return f.is_compatible && f.is_system && boost::algorithm::starts_with(f.name, filament_type); }); | ||||
|         } | ||||
|         auto  iter      = std::find_if(filaments.begin(), filaments.end(), [this](auto &f) { | ||||
|             bool is_compatible = m_preset_bundle->calibrate_filaments.find(&f) != m_preset_bundle->calibrate_filaments.end(); | ||||
|             return is_compatible && f.is_system && f.filament_id == m_filament_id; | ||||
|             }); | ||||
|         //if (iter == filaments.end() && !m_filament_type.empty()) {
 | ||||
|         //    auto filament_type = "Generic " + m_filament_type;
 | ||||
|         //    iter               = std::find_if(filaments.begin(), filaments.end(),
 | ||||
|         //                        [this , &filament_type](auto &f) {
 | ||||
|         //            bool is_compatible = m_preset_bundle->calibrate_filaments.find(&f) != m_preset_bundle->calibrate_filaments.end();
 | ||||
|         //            return is_compatible && f.is_system && boost::algorithm::starts_with(f.name, filament_type); });
 | ||||
|         //}
 | ||||
|         if (iter != filaments.end()) { | ||||
|             m_selected_preset = &*iter; | ||||
|             m_is_compatible = true; | ||||
|             SetValue(get_preset_name(*iter)); | ||||
|         } | ||||
|         else | ||||
|         else { | ||||
|             m_selected_preset = nullptr; | ||||
|             m_is_compatible = false; | ||||
|             SetValue(_L("Incompatible")); | ||||
|         } | ||||
|         Enable(); | ||||
|     } | ||||
| } | ||||
|  | @ -1444,8 +1456,7 @@ void GUI::CalibrateFilamentComboBox::update() | |||
|     std::map<wxString, wxBitmap*>  system_presets; | ||||
| 
 | ||||
|     wxString selected_preset = m_selected_preset ? get_preset_name(*m_selected_preset) : GetValue(); | ||||
|     if (!m_selected_preset) | ||||
|         m_selected_preset = m_collection->find_preset(selected_preset.ToStdString()); | ||||
| 
 | ||||
|     wxString tooltip; | ||||
|     const std::deque<Preset>& presets = m_collection->get_presets(); | ||||
| 
 | ||||
|  | @ -1498,16 +1509,13 @@ void GUI::CalibrateFilamentComboBox::update() | |||
|     update_selection(); | ||||
|     Thaw(); | ||||
| 
 | ||||
|     if (!tooltip.IsEmpty()) { | ||||
| #ifdef __WXMSW__ | ||||
|         SetToolTip(NULL); | ||||
| #endif | ||||
|         SetToolTip(tooltip); | ||||
|     } | ||||
|     SetToolTip(NULL); | ||||
| } | ||||
| 
 | ||||
| void GUI::CalibrateFilamentComboBox::OnSelect(wxCommandEvent &evt) | ||||
| { | ||||
|     m_is_compatible = true; | ||||
|     static_cast<FilamentComboBox*>(m_parent)->Enable(true); | ||||
|     std::string preset_name = m_collection->get_preset_name_by_alias(evt.GetString().ToUTF8().data()); | ||||
|     m_selected_preset       = m_collection->find_preset(preset_name); | ||||
|     SimpleEvent e(EVT_CALIBRATION_TRAY_SELECTION_CHANGED); | ||||
|  |  | |||
|  | @ -230,14 +230,18 @@ public: | |||
|     void OnSelect(wxCommandEvent &evt) override; | ||||
|     const Preset* get_selected_preset() { return m_selected_preset; } | ||||
|     std::string get_tray_name() { return m_tray_name; } | ||||
|     std::string get_tag_uid() { return m_tag_uid; } | ||||
|     bool is_tray_exist() { return m_filament_exist; } | ||||
|     bool is_compatible_with_printer() { return m_is_compatible; } | ||||
| 
 | ||||
| private: | ||||
|     std::string m_tray_name; | ||||
|     std::string m_filament_id; | ||||
|     std::string m_tag_uid; | ||||
|     std::string m_filament_type; | ||||
|     std::string m_filament_color; | ||||
|     bool m_filament_exist{false}; | ||||
|     bool m_is_compatible{true}; | ||||
|     const Preset* m_selected_preset = nullptr; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -151,12 +151,16 @@ void TabButtonsListCtrl::RemovePage(size_t n) | |||
|     m_sizer->Layout(); | ||||
| } | ||||
| 
 | ||||
| bool TabButtonsListCtrl::SetPageImage(size_t n, const std::string &bmp_name) const | ||||
| bool TabButtonsListCtrl::SetPageImage(size_t n, const std::string &bmp_name) | ||||
| { | ||||
|     if (n >= m_pageButtons.size()) | ||||
|         return false; | ||||
|       | ||||
|     ScalableBitmap bitmap(NULL, bmp_name); | ||||
| 
 | ||||
|     ScalableBitmap bitmap; | ||||
|     if (!bmp_name.empty()) | ||||
|         bitmap = ScalableBitmap(this, bmp_name, 14); | ||||
|     m_pageButtons[n]->SetBitmap(bitmap); | ||||
| 
 | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -26,7 +26,7 @@ public: | |||
|     void Rescale(); | ||||
|     bool InsertPage(size_t n, const wxString& text, bool bSelect = false, const std::string& bmp_name = ""); | ||||
|     void RemovePage(size_t n); | ||||
|     bool SetPageImage(size_t n, const std::string& bmp_name) const; | ||||
|     bool SetPageImage(size_t n, const std::string& bmp_name); | ||||
|     void SetPageText(size_t n, const wxString& strText); | ||||
|     wxString GetPageText(size_t n) const; | ||||
| 
 | ||||
|  |  | |||
|  | @ -2,7 +2,6 @@ | |||
| 
 | ||||
| #include "../GUI/GUI_App.hpp" | ||||
| #include "../GUI/DeviceManager.hpp" | ||||
| #include "../GUI/Jobs/PrintJob.hpp" | ||||
| #include "../GUI/Jobs/ProgressIndicator.hpp" | ||||
| #include "../GUI/PartPlate.hpp" | ||||
| 
 | ||||
|  | @ -14,7 +13,7 @@ | |||
| 
 | ||||
| namespace Slic3r { | ||||
| namespace GUI { | ||||
| std::shared_ptr<PrintJob> print_job; | ||||
| std::shared_ptr<PrintJob> CalibUtils::print_job; | ||||
| static const std::string temp_dir = fs::path(fs::temp_directory_path() / "calib").string(); | ||||
| static const std::string temp_gcode_path = temp_dir + "/temp.gcode"; | ||||
| static const std::string path            = temp_dir + "/test.3mf"; | ||||
|  | @ -302,7 +301,7 @@ void CalibUtils::calib_flowrate(int pass, const CalibInfo& calib_info, std::stri | |||
|     params.mode = CalibMode::Calib_Flow_Rate; | ||||
|     process_and_store_3mf(&model, full_config, params, error_message); | ||||
|     if (!error_message.empty()) | ||||
|         return | ||||
|         return; | ||||
| 
 | ||||
|     send_to_print(calib_info.dev_id, calib_info.select_ams, calib_info.process_bar, calib_info.bed_type, error_message); | ||||
| } | ||||
|  | @ -360,6 +359,7 @@ void CalibUtils::calib_temptue(const CalibInfo& calib_info, std::string& error_m | |||
|     model.objects[0]->config.set_key_value("brim_type", new ConfigOptionEnum<BrimType>(btOuterOnly)); | ||||
|     model.objects[0]->config.set_key_value("brim_width", new ConfigOptionFloat(5.0)); | ||||
|     model.objects[0]->config.set_key_value("brim_object_gap", new ConfigOptionFloat(0.0)); | ||||
|     model.objects[0]->config.set_key_value("enable_support", new ConfigOptionBool(false)); | ||||
| 
 | ||||
|     // apply preset
 | ||||
|     DynamicPrintConfig full_config; | ||||
|  | @ -405,7 +405,7 @@ void CalibUtils::calib_max_vol_speed(const CalibInfo& calib_info, std::string& e | |||
|     auto max_lh = printer_config.option<ConfigOptionFloats>("max_layer_height"); | ||||
|     if (max_lh->values[0] < layer_height) max_lh->values[0] = {layer_height}; | ||||
| 
 | ||||
|     filament_config.set_key_value("filament_max_volumetric_speed", new ConfigOptionFloats{200}); | ||||
|     filament_config.set_key_value("filament_max_volumetric_speed", new ConfigOptionFloats{50}); | ||||
|     filament_config.set_key_value("slow_down_layer_time", new ConfigOptionInts{0}); | ||||
| 
 | ||||
|     print_config.set_key_value("enable_overhang_speed", new ConfigOptionBool{false}); | ||||
|  | @ -555,12 +555,12 @@ void CalibUtils::process_and_store_3mf(Model* model, const DynamicPrintConfig& f | |||
|     Print *fff_print = dynamic_cast<Print *>(print); | ||||
|     fff_print->set_calib_params(params); | ||||
| 
 | ||||
|     StringObjectException warning; | ||||
|     auto err = print->validate(&warning); | ||||
|     if (!err.string.empty()) { | ||||
|         error_message = "slice validate: " + err.string; | ||||
|         return; | ||||
|     } | ||||
|     //StringObjectException warning;
 | ||||
|     //auto err = print->validate(&warning);
 | ||||
|     //if (!err.string.empty()) {
 | ||||
|     //    error_message = "slice validate: " + err.string;
 | ||||
|     //    return;
 | ||||
|     //}
 | ||||
| 
 | ||||
|     fff_print->process(); | ||||
|     part_plate->update_slice_result_valid_state(true); | ||||
|  | @ -662,16 +662,17 @@ void CalibUtils::send_to_print(const std::string& dev_id, const std::string& sel | |||
| 
 | ||||
|     print_job->job_data = job_data; | ||||
|     print_job->plate_data = plate_data; | ||||
|     print_job->m_print_type = "from_normal"; | ||||
| 
 | ||||
|     if (!obj_->is_support_ams_mapping()) { | ||||
|         error_message = "It is not support ams mapping."; | ||||
|         return; | ||||
|     } | ||||
|     //if (!obj_->is_support_ams_mapping()) {
 | ||||
|     //    error_message = "It is not support ams mapping.";
 | ||||
|     //    return;
 | ||||
|     //}
 | ||||
| 
 | ||||
|     if (!obj_->has_ams()) { | ||||
|         error_message = "There is no ams."; | ||||
|         return; | ||||
|     } | ||||
|     //if (!obj_->has_ams()) {
 | ||||
|     //    error_message = "There is no ams.";
 | ||||
|     //    return;
 | ||||
|     //}
 | ||||
| 
 | ||||
|     print_job->task_ams_mapping = select_ams; | ||||
|     print_job->task_ams_mapping_info = ""; | ||||
|  |  | |||
|  | @ -1,6 +1,7 @@ | |||
| #pragma once | ||||
| #include "libslic3r/Calib.hpp" | ||||
| #include "../GUI/DeviceManager.hpp" | ||||
| #include "../GUI/Jobs/PrintJob.hpp" | ||||
| 
 | ||||
| namespace Slic3r { | ||||
| 
 | ||||
|  | @ -26,6 +27,7 @@ class CalibUtils | |||
| { | ||||
| public: | ||||
|     CalibUtils(){}; | ||||
|     static std::shared_ptr<PrintJob> print_job; | ||||
|     static void calib_PA(const X1CCalibInfos& calib_infos, std::string& error_message); | ||||
|     static void emit_get_PA_calib_results(); | ||||
|     static bool get_PA_calib_results(std::vector<PACalibResult> &pa_calib_results); | ||||
|  |  | |||
 liz.li
						liz.li