From 59aa7728754e73d7008db0f3c2672128ce4549d4 Mon Sep 17 00:00:00 2001 From: 76Octane <132669596+76Octane@users.noreply.github.com> Date: Wed, 30 Aug 2023 11:12:12 +0800 Subject: [PATCH] Update calib_dlg 1.Add a dlg for flowrate-fine. 2.Add the notice when using the calibration feature. 3.Optimized parameter settings. --- src/libslic3r/calib.hpp | 3 +- src/slic3r/GUI/MainFrame.cpp | 14 ++++++- src/slic3r/GUI/MainFrame.hpp | 1 + src/slic3r/GUI/Plater.cpp | 43 ++++++++++++++++++-- src/slic3r/GUI/Plater.hpp | 1 + src/slic3r/GUI/calib_dlg.cpp | 76 ++++++++++++++++++++++++++++++++++++ src/slic3r/GUI/calib_dlg.hpp | 16 ++++++++ 7 files changed, 148 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/calib.hpp b/src/libslic3r/calib.hpp index 59d671d..56d32bc 100644 --- a/src/libslic3r/calib.hpp +++ b/src/libslic3r/calib.hpp @@ -15,7 +15,8 @@ enum class CalibMode : int { Calib_Temp_Tower, Calib_Vol_speed_Tower, Calib_VFA_Tower, - Calib_Retraction_tower + Calib_Retraction_tower, + Calib_FRF }; struct Calib_Params { diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 1693318..e8d79ac 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1575,6 +1575,9 @@ void MainFrame::init_menubar_as_editor() append_menu_item(flowrate_menu, wxID_ANY, _L("Coarse"), _L("Flow rate test - Pass 1"), [this](wxCommandEvent &) { if (m_plater) m_plater->calib_flowrate(1); + m_plater->get_notification_manager()->push_notification(NotificationType::CustomNotification,NotificationManager::NotificationLevel::PrintInfoNotificationLevel, + _u8L("NOTICE: The configuration parameters may be changed " + "after using the calibration feature. ")); }, "", nullptr, [this]() { @@ -1583,8 +1586,12 @@ void MainFrame::init_menubar_as_editor() }, this); append_menu_item(flowrate_menu, wxID_ANY, _L("Fine"), _L("Flow rate test - Pass 2"), [this](wxCommandEvent &) { - if (m_plater) - m_plater->calib_flowrate(2); + if (!m_frf_calib_dlg) + m_frf_calib_dlg = new FRF_Calibration_Dlg((wxWindow *) this, wxID_ANY, m_plater); + m_frf_calib_dlg->ShowModal(); + m_plater->get_notification_manager()->push_notification(NotificationType::CustomNotification,NotificationManager::NotificationLevel::PrintInfoNotificationLevel, + _u8L("NOTICE: The configuration parameters may be changed " + "after using the calibration feature. ")); }, "", nullptr, [this]() { @@ -1599,6 +1606,9 @@ void MainFrame::init_menubar_as_editor() if (!m_pa_calib_dlg) m_pa_calib_dlg = new PA_Calibration_Dlg((wxWindow *) this, wxID_ANY, m_plater); m_pa_calib_dlg->ShowModal(); + m_plater->get_notification_manager()->push_notification(NotificationType::CustomNotification,NotificationManager::NotificationLevel::PrintInfoNotificationLevel, + _u8L("NOTICE: The configuration parameters may be changed " + "after using the calibration feature. ")); }, "", nullptr, [this]() { diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index ccda7c8..f3e257e 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -212,6 +212,7 @@ public: Plater *m_plater{nullptr}; + FRF_Calibration_Dlg *m_frf_calib_dlg{nullptr}; //B34 PA_Calibration_Dlg *m_pa_calib_dlg{nullptr}; //B4 diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 7a25c3a..cfdc027 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -5404,7 +5404,7 @@ void Plater::add_model_calibration(bool imperial_units /* = false*/, std::string //B34 void Plater::calib_flowrate(int pass) { - if (pass != 1 && pass != 2) + if (pass != 1 /*&& pass != 2*/) return; const auto calib_name = wxString::Format(L"Flowrate Test - Pass%d", pass); new_project(); @@ -5432,7 +5432,7 @@ void Plater::calib_flowrate(int pass) tab_printer->load_config(new_config); add_model_calibration(false, (boost::filesystem::path(Slic3r::resources_dir()) / "calib" / "FlowRate" / "flowrate_coarse.3mf").string()); - } else { + } /*else { new_config.set_key_value("complete_objects", new ConfigOptionBool(true)); new_config.set_key_value("extruder_clearance_radius", new ConfigOptionFloat(1)); new_config.set_key_value("between_objects_gcode", @@ -5449,8 +5449,45 @@ void Plater::calib_flowrate(int pass) tab_printer->load_config(new_config); add_model_calibration(false, (boost::filesystem::path(Slic3r::resources_dir()) / "calib" / "FlowRate" / "flowrate_fine.3mf").string()); - } + }*/ } + +void Plater::calib_flowrate_f(int pass, const Calib_Params ¶ms) +{ + if (pass != 2) + return; + const auto calib_name = wxString::Format(L"Flowrate Test - Pass%d", pass); + new_project(); + wxGetApp().mainframe->select_tab(size_t(0)); + if (params.mode != CalibMode::Calib_FRF) + return; + + Tab *tab_print = wxGetApp().get_tab(Preset::TYPE_PRINT); + Tab *tab_filament = wxGetApp().get_tab(Preset::TYPE_FILAMENT); + Tab *tab_printer = wxGetApp().get_tab(Preset::TYPE_PRINTER); + DynamicPrintConfig new_config; + int extru_multip = params.start * 100; + new_config.set_key_value("complete_objects", new ConfigOptionBool(true)); + new_config.set_key_value("extruder_clearance_radius", new ConfigOptionFloat(1)); + new_config.set_key_value("extrusion_multiplier", new ConfigOptionFloats{1.}); + new_config.set_key_value("start_gcode", + new ConfigOptionString("G28\nM141 S0\nG0 Z50 F600\nM190 S[first_layer_bed_temperature]\nG28 Z\nG29 ; mesh bed leveling ,comment this code to close it\nG0 X0 Y0 Z50 F6000\nM109 S[first_layer_temperature]\nM83\nG0 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0)} Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0)} Z5 F6000\nG0 Z0.2 F600\nG1 E3 F1800\nG1 X{(min(print_bed_max[0], first_layer_print_min[0] + 80))} E{85 * 0.04} F3000\nG1 Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0) + 2} E{2 * 0.04} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0)} E{85 * 0.04} F3000\nG1 Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0) + 85} E{83 * 0.04} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0) + 2} E{2 * 0.04} F3000\nG1 Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0) + 3} E{82 * 0.04} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0) + 12} E{-10 * 0.04} F3000\nG1 E{10 * 0.04} F3000\nM221 S"+std::to_string(extru_multip))); + new_config.set_key_value("between_objects_gcode", + new ConfigOptionString("{if current_object_idx==1}M221 S"+std::to_string(extru_multip+1)+"{endif}" + "{if current_object_idx==2}M221 S"+std::to_string(extru_multip+2)+"{endif}" + "{if current_object_idx==3}M221 S"+std::to_string(extru_multip+3)+"{endif}" + "{if current_object_idx==4}M221 S"+std::to_string(extru_multip+4)+"{endif}" + "{if current_object_idx==5}M221 S"+std::to_string(extru_multip-1)+"{endif}" + "{if current_object_idx==6}M221 S"+std::to_string(extru_multip-2)+"{endif}" + "{if current_object_idx==7}M221 S"+std::to_string(extru_multip-3)+"{endif}" + "{if current_object_idx==8}M221 S"+std::to_string(extru_multip-4)+"{endif}")); + tab_print->load_config(new_config); + tab_filament->load_config(new_config); + tab_printer->load_config(new_config); + add_model_calibration(false, + (boost::filesystem::path(Slic3r::resources_dir()) / "calib" / "FlowRate" / "flowrate_fine.3mf").string()); +} + //B34 void Plater::calib_pa(const Calib_Params ¶ms) { diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 54f7ff9..1898c84 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -169,6 +169,7 @@ public: //B34 void calib_pa(const Calib_Params ¶ms); void calib_flowrate(int pass); + void calib_flowrate_f(int pass, const Calib_Params ¶ms); void new_project(); diff --git a/src/slic3r/GUI/calib_dlg.cpp b/src/slic3r/GUI/calib_dlg.cpp index bf46f8b..5e35772 100644 --- a/src/slic3r/GUI/calib_dlg.cpp +++ b/src/slic3r/GUI/calib_dlg.cpp @@ -34,6 +34,82 @@ wxBoxSizer *create_item_checkbox(wxString title, wxWindow *parent, bool *value, return m_sizer_checkbox; } +FRF_Calibration_Dlg::FRF_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) + : DPIDialog(parent, id, _L("Flowrate-Fine Calibration"), wxDefaultPosition, parent->FromDIP(wxSize(-1, 280)), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER), m_plater(plater) +{ + wxBoxSizer* v_sizer = new wxBoxSizer(wxVERTICAL); + SetSizer(v_sizer); + + // Settings + DynamicPrintConfig m_config; + wxString start_length_str = _L("Extrusion Multipler: "); + auto text_size = wxWindow::GetTextExtent(start_length_str); + text_size.x = text_size.x * 1.5; + wxStaticBoxSizer* settings_sizer = new wxStaticBoxSizer(wxVERTICAL, this, _L("Settings")); + + auto st_size = FromDIP(wxSize(text_size.x, -1)); + auto ti_size = FromDIP(wxSize(90, -1)); + // extru length + auto start_length_sizer = new wxBoxSizer(wxHORIZONTAL); + auto start_length_text = new wxStaticText(this, wxID_ANY, start_length_str, wxDefaultPosition, st_size, wxALIGN_LEFT); + m_tiExtru = new TextInput(this, "", "", "", wxDefaultPosition, ti_size, wxTE_CENTRE); + m_tiExtru->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + + start_length_sizer->Add(start_length_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2); + start_length_sizer->Add(m_tiExtru, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2); + settings_sizer->Add(start_length_sizer); + + v_sizer->Add(settings_sizer); + v_sizer->Add(0, FromDIP(10), 0, wxEXPAND, 5); + m_btnStart = new Button(this, _L("OK")); + StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), + std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal)); + + m_btnStart->SetBackgroundColor(btn_bg_green); + m_btnStart->SetBorderColor(wxColour(0, 150, 136)); + m_btnStart->SetTextColor(wxColour("#FFFFFE")); + m_btnStart->SetSize(wxSize(FromDIP(48), FromDIP(24))); + m_btnStart->SetMinSize(wxSize(FromDIP(48), FromDIP(24))); + m_btnStart->SetCornerRadius(FromDIP(3)); + m_btnStart->Bind(wxEVT_BUTTON, &FRF_Calibration_Dlg::on_start, this); + v_sizer->Add(m_btnStart, 0, wxALL | wxALIGN_RIGHT, FromDIP(5)); + + m_btnStart->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FRF_Calibration_Dlg::on_start), NULL, this); + + //wxGetApp().UpdateDlgDarkUI(this); + + Layout(); + Fit(); +} + +FRF_Calibration_Dlg::~FRF_Calibration_Dlg() { + // Disconnect Events + m_btnStart->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(FRF_Calibration_Dlg::on_start), NULL, this); +} + +void FRF_Calibration_Dlg::on_start(wxCommandEvent& event) { + bool read_double = false; + read_double = m_tiExtru->GetTextCtrl()->GetValue().ToDouble(&m_params.start); + + if (!read_double || m_params.start <= 0 || m_params.start > 2) { + MessageDialog msg_dlg(nullptr, _L("Please input valid values:\n0 < Extru <= 2.)"), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return; + } + + m_params.mode = CalibMode::Calib_FRF; + m_plater->calib_flowrate_f(2, m_params); + EndModal(wxID_OK); + +} + +void FRF_Calibration_Dlg::on_dpi_changed(const wxRect& suggested_rect) { + this->Refresh(); + Fit(); + +} + PA_Calibration_Dlg::PA_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) : DPIDialog(parent, id, _L("PA Calibration"), wxDefaultPosition, parent->FromDIP(wxSize(-1, 280)), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER), m_plater(plater) { diff --git a/src/slic3r/GUI/calib_dlg.hpp b/src/slic3r/GUI/calib_dlg.hpp index 4889c4d..5809ed3 100644 --- a/src/slic3r/GUI/calib_dlg.hpp +++ b/src/slic3r/GUI/calib_dlg.hpp @@ -18,6 +18,22 @@ namespace Slic3r { namespace GUI { +class FRF_Calibration_Dlg : public DPIDialog +{ +public: + FRF_Calibration_Dlg(wxWindow *parent, wxWindowID id, Plater *plater); + ~FRF_Calibration_Dlg(); + void on_dpi_changed(const wxRect &suggested_rect) override; + +protected: + virtual void on_start(wxCommandEvent &event); + Calib_Params m_params; + + TextInput *m_tiExtru; + Button * m_btnStart; + Plater * m_plater; +}; + class PA_Calibration_Dlg : public DPIDialog { public: