2023-08-25 09:36:16 +08:00
# include "calib_dlg.hpp"
# include "GUI_App.hpp"
# include "MsgDialog.hpp"
# include "I18N.hpp"
# include <wx/dcgraph.h>
# include "MainFrame.hpp"
# include <string>
2023-09-01 20:05:08 +08:00
# include <sstream>
# include <iomanip>
2023-08-25 09:36:16 +08:00
namespace Slic3r {
namespace GUI {
2023-08-30 11:12:12 +08:00
FRF_Calibration_Dlg : : FRF_Calibration_Dlg ( wxWindow * parent , wxWindowID id , Plater * plater )
2023-09-01 20:05:08 +08:00
: DPIDialog ( parent , id , _L ( " Flowrate Fine Calibration " ) , wxDefaultPosition , wxSize ( - 1 , 280 ) , wxDEFAULT_DIALOG_STYLE | wxNO_BORDER ) , m_plater ( plater )
2023-08-30 11:12:12 +08:00
{
wxBoxSizer * v_sizer = new wxBoxSizer ( wxVERTICAL ) ;
SetSizer ( v_sizer ) ;
2023-09-01 20:05:08 +08:00
// desc
std : : string setting_desc_message = _u8L ( " Please input the best value from the coarse calibration to further determine a more accurate extrusion multiplier. " ) ;
auto setting_desc = new wxStaticText ( this , wxID_ANY , setting_desc_message , wxDefaultPosition , wxSize ( 340 , - 1 ) , wxALIGN_LEFT ) ;
setting_desc - > Wrap ( setting_desc - > GetClientSize ( ) . x ) ;
v_sizer - > Add ( setting_desc , 0 , wxTOP | wxRIGHT | wxLEFT | wxALIGN_CENTER_VERTICAL , 15 ) ;
2023-08-30 11:12:12 +08:00
// Settings
2023-09-01 20:05:08 +08:00
wxStaticBoxSizer * settings_sizer = new wxStaticBoxSizer ( wxHORIZONTAL , this , _L ( " Settings " ) ) ;
2023-08-30 11:12:12 +08:00
2023-09-01 20:05:08 +08:00
auto extrusion_multiplier_text = new wxStaticText ( this , wxID_ANY , _L ( " Extrusion Multiplier: " ) , wxDefaultPosition , wxSize ( 230 , - 1 ) , wxALIGN_LEFT ) ;
settings_sizer - > Add ( extrusion_multiplier_text , 0 , wxALL | wxALIGN_CENTER_VERTICAL , 2 ) ;
2023-08-30 16:53:46 +08:00
// extru
2023-09-01 20:05:08 +08:00
auto filament_config = & wxGetApp ( ) . preset_bundle - > filaments . get_edited_preset ( ) . config ;
auto read_extrusion_multiplier = filament_config - > opt_float ( " extrusion_multiplier " , 0 ) ;
std : : stringstream ss ;
ss < < std : : setprecision ( 2 ) < < read_extrusion_multiplier ;
m_tc_extrusion_multiplier = new wxTextCtrl ( this , wxID_ANY , ss . str ( ) , wxDefaultPosition , wxSize ( 100 , - 1 ) , wxBORDER_SIMPLE ) ;
m_tc_extrusion_multiplier - > SetValidator ( wxTextValidator ( wxFILTER_NUMERIC ) ) ;
settings_sizer - > Add ( m_tc_extrusion_multiplier , 0 , wxRIGHT | wxALIGN_RIGHT , 0 ) ;
2023-08-30 16:53:46 +08:00
2023-08-31 18:26:57 +08:00
v_sizer - > Add ( settings_sizer , 0 , wxTOP | wxRIGHT | wxLEFT | wxALIGN_CENTER_VERTICAL , 15 ) ;
2023-09-01 20:05:08 +08:00
v_sizer - > Add ( 0 , 5 , 0 , wxEXPAND , 5 ) ;
m_btnStart = new wxButton ( this , wxID_ANY , _L ( " OK " ) ) ;
2023-08-30 11:12:12 +08:00
m_btnStart - > Bind ( wxEVT_BUTTON , & FRF_Calibration_Dlg : : on_start , this ) ;
2023-08-31 18:26:57 +08:00
v_sizer - > Add ( m_btnStart , 0 , wxRIGHT | wxALIGN_RIGHT , 15 ) ;
2023-09-01 20:05:08 +08:00
v_sizer - > Add ( 0 , 8 , 0 , wxEXPAND , 5 ) ;
2023-08-30 11:12:12 +08:00
m_btnStart - > Connect ( wxEVT_COMMAND_BUTTON_CLICKED , wxCommandEventHandler ( FRF_Calibration_Dlg : : on_start ) , NULL , this ) ;
2023-08-31 18:26:57 +08:00
wxGetApp ( ) . UpdateDlgDarkUI ( this ) ;
2023-08-30 11:12:12 +08:00
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 ;
2023-09-01 20:05:08 +08:00
double target_extrusion_multiplier ;
read_double = m_tc_extrusion_multiplier - > GetValue ( ) . ToDouble ( & target_extrusion_multiplier ) ;
2023-08-30 11:12:12 +08:00
2023-09-01 20:05:08 +08:00
if ( ! read_double | | target_extrusion_multiplier < 0.5 ) {
MessageDialog msg_dlg ( nullptr , _L ( " Please input valid values: \n 0.5 <= Extrusion Multiplier <= 1.5 \n " ) , wxEmptyString , wxICON_WARNING | wxOK ) ;
2023-08-31 09:32:08 +08:00
msg_dlg . ShowModal ( ) ;
2023-09-01 20:05:08 +08:00
m_tc_extrusion_multiplier - > SetValue ( " 0.5 " ) ;
2023-08-30 16:53:46 +08:00
return ;
2023-09-01 20:05:08 +08:00
} else if ( ! read_double | | target_extrusion_multiplier > 1.5 ) {
MessageDialog msg_dlg ( nullptr , _L ( " Please input valid values: \n 0.5 <= Extrusion Multiplier <= 1.5 \n " ) , wxEmptyString , wxICON_WARNING | wxOK ) ;
2023-08-31 09:32:08 +08:00
msg_dlg . ShowModal ( ) ;
2023-09-01 20:05:08 +08:00
m_tc_extrusion_multiplier - > SetValue ( " 1.5 " ) ;
2023-08-30 11:12:12 +08:00
return ;
}
2023-09-01 20:05:08 +08:00
m_plater - > calib_flowrate_fine ( target_extrusion_multiplier ) ;
2023-08-30 11:12:12 +08:00
EndModal ( wxID_OK ) ;
}
void FRF_Calibration_Dlg : : on_dpi_changed ( const wxRect & suggested_rect ) {
this - > Refresh ( ) ;
Fit ( ) ;
}
2023-08-25 09:36:16 +08:00
PA_Calibration_Dlg : : PA_Calibration_Dlg ( wxWindow * parent , wxWindowID id , Plater * plater )
2023-09-01 20:05:08 +08:00
: DPIDialog ( parent , id , _L ( " Pressure Advance Calibration " ) , wxDefaultPosition , wxSize ( - 1 , 280 ) , wxDEFAULT_DIALOG_STYLE | wxNO_BORDER ) , m_plater ( plater )
2023-08-25 09:36:16 +08:00
{
wxBoxSizer * v_sizer = new wxBoxSizer ( wxVERTICAL ) ;
SetSizer ( v_sizer ) ;
2023-09-01 20:05:08 +08:00
wxString m_rbMethodChoices [ ] = { _L ( " PA Line " ) , _L ( " PA Pattern " ) , _L ( " PA Tower " ) } ;
int m_rbMethodNChoices = sizeof ( m_rbMethodChoices ) / sizeof ( wxString ) ;
m_rbMethod = new wxRadioBox ( this , wxID_ANY , _L ( " Method " ) , wxDefaultPosition , wxDefaultSize , m_rbMethodNChoices , m_rbMethodChoices , 1 , wxRA_SPECIFY_COLS ) ;
m_rbMethod - > SetSelection ( 0 ) ;
v_sizer - > Add ( m_rbMethod , 0 , wxRIGHT | wxLEFT | wxALIGN_CENTER_VERTICAL , 15 ) ;
2023-08-25 09:36:16 +08:00
// Settings
2023-09-01 20:05:08 +08:00
wxStaticBoxSizer * settings_sizer = new wxStaticBoxSizer ( wxVERTICAL , this , _L ( " Settings " ) ) ;
2023-08-25 09:36:16 +08:00
// start PA
auto start_PA_sizer = new wxBoxSizer ( wxHORIZONTAL ) ;
2023-09-01 20:05:08 +08:00
auto start_pa_text = new wxStaticText ( this , wxID_ANY , _L ( " Start PA: " ) , wxDefaultPosition , wxSize ( 80 , - 1 ) , wxALIGN_LEFT ) ;
start_PA_sizer - > Add ( start_pa_text , 0 , wxALL | wxALIGN_CENTER_VERTICAL , 2 ) ;
2023-08-25 09:36:16 +08:00
2023-09-01 20:05:08 +08:00
m_tcStartPA = new wxTextCtrl ( this , wxID_ANY , " 0 " , wxDefaultPosition , wxSize ( 100 , - 1 ) , wxBORDER_SIMPLE ) ;
m_tcStartPA - > SetValidator ( wxTextValidator ( wxFILTER_NUMERIC ) ) ;
start_PA_sizer - > Add ( m_tcStartPA , 0 , wxALL | wxALIGN_CENTER_VERTICAL , 2 ) ;
2023-08-25 09:36:16 +08:00
settings_sizer - > Add ( start_PA_sizer ) ;
// end PA
auto end_PA_sizer = new wxBoxSizer ( wxHORIZONTAL ) ;
2023-09-01 20:05:08 +08:00
auto end_pa_text = new wxStaticText ( this , wxID_ANY , _L ( " End PA: " ) , wxDefaultPosition , wxSize ( 80 , - 1 ) , wxALIGN_LEFT ) ;
2023-08-25 09:36:16 +08:00
end_PA_sizer - > Add ( end_pa_text , 0 , wxALL | wxALIGN_CENTER_VERTICAL , 2 ) ;
2023-09-01 20:05:08 +08:00
m_tcEndPA = new wxTextCtrl ( this , wxID_ANY , " 0.04 " , wxDefaultPosition , wxSize ( 100 , - 1 ) , wxBORDER_SIMPLE ) ;
m_tcStartPA - > SetValidator ( wxTextValidator ( wxFILTER_NUMERIC ) ) ;
end_PA_sizer - > Add ( m_tcEndPA , 0 , wxALL | wxALIGN_CENTER_VERTICAL , 2 ) ;
2023-08-25 09:36:16 +08:00
settings_sizer - > Add ( end_PA_sizer ) ;
// PA step
auto PA_step_sizer = new wxBoxSizer ( wxHORIZONTAL ) ;
2023-09-01 20:05:08 +08:00
auto PA_step_text = new wxStaticText ( this , wxID_ANY , _L ( " PA step: " ) , wxDefaultPosition , wxSize ( 80 , - 1 ) , wxALIGN_LEFT ) ;
2023-08-25 09:36:16 +08:00
PA_step_sizer - > Add ( PA_step_text , 0 , wxALL | wxALIGN_CENTER_VERTICAL , 2 ) ;
2023-09-01 20:05:08 +08:00
m_tcPAStep = new wxTextCtrl ( this , wxID_ANY , " 0.002 " , wxDefaultPosition , wxSize ( 100 , - 1 ) , wxBORDER_SIMPLE ) ;
m_tcStartPA - > SetValidator ( wxTextValidator ( wxFILTER_NUMERIC ) ) ;
PA_step_sizer - > Add ( m_tcPAStep , 0 , wxALL | wxALIGN_CENTER_VERTICAL , 2 ) ;
2023-08-25 09:36:16 +08:00
settings_sizer - > Add ( PA_step_sizer ) ;
2023-09-01 20:05:08 +08:00
v_sizer - > Add ( 0 , 5 , 0 , wxEXPAND , 5 ) ;
v_sizer - > Add ( settings_sizer , 0 , wxRIGHT | wxLEFT | wxALIGN_CENTER_VERTICAL , 15 ) ;
v_sizer - > Add ( 0 , 5 , 0 , wxEXPAND , 5 ) ;
m_btnStart = new wxButton ( this , wxID_ANY , _L ( " OK " ) ) ;
m_btnStart - > Bind ( wxEVT_BUTTON , & PA_Calibration_Dlg : : on_start , this ) ;
v_sizer - > Add ( m_btnStart , 0 , wxRIGHT | wxALIGN_RIGHT , 15 ) ;
v_sizer - > Add ( 0 , 8 , 0 , wxEXPAND , 5 ) ;
2023-08-25 09:36:16 +08:00
m_rbMethod - > Connect ( wxEVT_COMMAND_RADIOBOX_SELECTED , wxCommandEventHandler ( PA_Calibration_Dlg : : on_method_changed ) , NULL , this ) ;
2023-09-01 20:05:08 +08:00
m_btnStart - > Connect ( wxEVT_COMMAND_BUTTON_CLICKED , wxCommandEventHandler ( PA_Calibration_Dlg : : on_start ) , NULL , this ) ;
wxGetApp ( ) . UpdateDlgDarkUI ( this ) ;
2023-08-25 09:36:16 +08:00
Layout ( ) ;
Fit ( ) ;
}
PA_Calibration_Dlg : : ~ PA_Calibration_Dlg ( ) {
// Disconnect Events
m_rbMethod - > Disconnect ( wxEVT_COMMAND_RADIOBOX_SELECTED , wxCommandEventHandler ( PA_Calibration_Dlg : : on_method_changed ) , NULL , this ) ;
m_btnStart - > Disconnect ( wxEVT_COMMAND_BUTTON_CLICKED , wxCommandEventHandler ( PA_Calibration_Dlg : : on_start ) , NULL , this ) ;
}
void PA_Calibration_Dlg : : on_start ( wxCommandEvent & event ) {
bool read_double = false ;
2023-09-01 20:05:08 +08:00
double start_pa ;
double end_pa ;
double pa_step ;
read_double = m_tcStartPA - > GetValue ( ) . ToDouble ( & start_pa ) ;
read_double = read_double & & m_tcEndPA - > GetValue ( ) . ToDouble ( & end_pa ) ;
read_double = read_double & & m_tcPAStep - > GetValue ( ) . ToDouble ( & pa_step ) ;
if ( ! read_double | | start_pa < 0 | | pa_step < EPSILON | | end_pa < start_pa + pa_step ) {
MessageDialog msg_dlg ( nullptr , _L ( " Please input valid values: \n Start PA: >= 0.0 \n End PA: > Start PA + PA step \n PA step: >= 0.001) " ), wxEmptyString, wxICON_WARNING | wxOK) ;
2023-08-25 09:36:16 +08:00
msg_dlg . ShowModal ( ) ;
return ;
}
switch ( m_rbMethod - > GetSelection ( ) ) {
2023-09-01 20:05:08 +08:00
case 0 : {
m_plater - > calib_pa_line ( start_pa , end_pa , pa_step ) ;
2023-08-25 09:36:16 +08:00
break ;
2023-09-01 20:05:08 +08:00
}
case 1 : {
m_plater - > calib_pa_pattern ( start_pa , end_pa , pa_step ) ;
2023-08-25 09:36:16 +08:00
break ;
2023-09-01 20:05:08 +08:00
}
case 2 : {
m_plater - > calib_pa_tower ( start_pa , end_pa , pa_step ) ;
break ;
}
default : break ;
2023-08-25 09:36:16 +08:00
}
EndModal ( wxID_OK ) ;
}
2023-08-31 16:25:40 +08:00
2023-08-25 09:36:16 +08:00
void PA_Calibration_Dlg : : on_method_changed ( wxCommandEvent & event ) {
event . Skip ( ) ;
}
void PA_Calibration_Dlg : : on_dpi_changed ( const wxRect & suggested_rect ) {
this - > Refresh ( ) ;
Fit ( ) ;
}
} } // namespace Slic3r::GUI