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>
namespace Slic3r {
namespace GUI {
wxBoxSizer * create_item_checkbox ( wxString title , wxWindow * parent , bool * value , CheckBoxInWT * & checkbox )
{
wxBoxSizer * m_sizer_checkbox = new wxBoxSizer ( wxHORIZONTAL ) ;
m_sizer_checkbox - > Add ( 0 , 0 , 0 , wxEXPAND | wxLEFT , 5 ) ;
checkbox = new : : CheckBoxInWT ( parent ) ;
m_sizer_checkbox - > Add ( checkbox , 0 , wxALIGN_CENTER , 0 ) ;
m_sizer_checkbox - > Add ( 0 , 0 , 0 , wxEXPAND | wxLEFT , 8 ) ;
auto checkbox_title = new wxStaticText ( parent , wxID_ANY , title , wxDefaultPosition , wxSize ( - 1 , - 1 ) , 0 ) ;
checkbox_title - > SetForegroundColour ( wxColour ( 144 , 144 , 144 ) ) ;
checkbox_title - > SetFont ( : : Label : : Body_13 ) ;
checkbox_title - > Wrap ( - 1 ) ;
m_sizer_checkbox - > Add ( checkbox_title , 0 , wxALIGN_CENTER | wxALL , 3 ) ;
checkbox - > SetValue ( true ) ;
checkbox - > Bind ( wxEVT_TOGGLEBUTTON , [ parent , checkbox , value ] ( wxCommandEvent & e ) {
( * value ) = ( * value ) ? false : true ;
e . Skip ( ) ;
} ) ;
return m_sizer_checkbox ;
}
2023-08-30 11:12:12 +08:00
FRF_Calibration_Dlg : : FRF_Calibration_Dlg ( wxWindow * parent , wxWindowID id , Plater * plater )
2023-08-31 10:30:12 +08:00
: DPIDialog ( parent , id , _L ( " Flowrate Fine Calibration " ) , wxDefaultPosition , parent - > FromDIP ( wxSize ( - 1 , 280 ) ) , wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER ) , m_plater ( plater )
2023-08-30 11:12:12 +08:00
{
wxBoxSizer * v_sizer = new wxBoxSizer ( wxVERTICAL ) ;
SetSizer ( v_sizer ) ;
// Settings
2023-08-30 16:53:46 +08:00
auto filament_config = & wxGetApp ( ) . preset_bundle - > filaments . get_edited_preset ( ) . config ;
2023-08-31 09:32:08 +08:00
wxString start_length_str = _L ( " Extrusion Multiplier: " ) ;
2023-08-30 11:12:12 +08:00
auto text_size = wxWindow : : GetTextExtent ( start_length_str ) ;
text_size . x = text_size . x * 1.5 ;
auto st_size = FromDIP ( wxSize ( text_size . x , - 1 ) ) ;
auto ti_size = FromDIP ( wxSize ( 90 , - 1 ) ) ;
2023-08-30 16:53:46 +08:00
auto desc_size = FromDIP ( wxSize ( 300 , - 1 ) ) ;
// extru
auto multip = filament_config - > opt_float ( " extrusion_multiplier " , 0 ) ;
std : : string multip_str = std : : to_string ( multip ) ;
if ( multip_str . find ( " . " ) > 0 ) {
size_t fp = multip_str . rfind ( " . " ) ;
size_t f = multip_str . rfind ( " 0 " ) ;
while ( f > fp ) {
if ( f ! = - 1 ) {
multip_str = multip_str . erase ( f ) ;
}
f = multip_str . rfind ( " 0 " ) ;
}
fp = multip_str . rfind ( " . " ) ;
if ( fp = = multip_str . size ( ) - 1 ) {
multip_str = multip_str . erase ( fp ) ;
}
}
2023-08-30 11:12:12 +08:00
auto start_length_sizer = new wxBoxSizer ( wxHORIZONTAL ) ;
auto start_length_text = new wxStaticText ( this , wxID_ANY , start_length_str , wxDefaultPosition , st_size , wxALIGN_LEFT ) ;
2023-08-30 16:53:46 +08:00
m_tiExtru = new TextInput ( this , multip_str , " " , " " , wxDefaultPosition , ti_size , wxTE_CENTRE ) ;
2023-08-30 11:12:12 +08:00
m_tiExtru - > GetTextCtrl ( ) - > SetValidator ( wxTextValidator ( wxFILTER_NUMERIC ) ) ;
2023-08-30 16:53:46 +08:00
// desc
2023-08-31 10:30:12 +08:00
auto setting_desc = new wxStaticText ( this , wxID_ANY , _u8L ( " Please input the best value from the coarse calibration to further determine a more accurate extrusion multiplier. " ) ,
2023-08-30 16:53:46 +08:00
wxDefaultPosition , desc_size , wxALIGN_LEFT ) ;
setting_desc - > Wrap ( setting_desc - > GetClientSize ( ) . x ) ;
// delay
2023-08-30 11:12:12 +08:00
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 ) ;
2023-08-30 16:53:46 +08:00
v_sizer - > Add ( 0 , FromDIP ( 10 ) , 0 , wxEXPAND , 5 ) ;
v_sizer - > Add ( setting_desc , 0 , wxALL | wxALIGN_CENTER_VERTICAL , 2 ) ;
2023-08-31 09:32:08 +08:00
v_sizer - > Add ( start_length_sizer ) ;
2023-08-30 11:12:12 +08:00
v_sizer - > Add ( 0 , FromDIP ( 10 ) , 0 , wxEXPAND , 5 ) ;
m_btnStart = new Button ( this , _L ( " OK " ) ) ;
2023-08-30 16:53:46 +08:00
StateColor btn_bg_blue ( std : : pair < wxColour , int > ( wxColour ( 51 , 91 , 188 ) , StateColor : : Pressed ) ,
std : : pair < wxColour , int > ( wxColour ( 51 , 109 , 251 ) , StateColor : : Hovered ) ,
std : : pair < wxColour , int > ( wxColour ( 68 , 121 , 251 ) , StateColor : : Normal ) ) ;
2023-08-30 11:12:12 +08:00
2023-08-30 16:53:46 +08:00
m_btnStart - > SetBackgroundColor ( btn_bg_blue ) ;
m_btnStart - > SetBorderColor ( wxColour ( 68 , 121 , 251 ) ) ;
2023-08-30 11:12:12 +08:00
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 ) ;
2023-08-30 16:53:46 +08:00
if ( ! read_double | | m_params . start < 0.9 ) {
2023-08-31 09:32:08 +08:00
MessageDialog msg_dlg ( nullptr , _L ( " Please input valid values: \n 0.9 <= Extrusion Multiplier <= 1.1 \n " ) , wxEmptyString , wxICON_WARNING | wxOK ) ;
msg_dlg . ShowModal ( ) ;
2023-08-30 16:53:46 +08:00
m_tiExtru - > GetTextCtrl ( ) - > SetValue ( " 0.9 " ) ;
return ;
} else if ( ! read_double | | m_params . start > 1.1 ) {
2023-08-31 09:32:08 +08:00
MessageDialog msg_dlg ( nullptr , _L ( " Please input valid values: \n 0.9 <= Extrusion Multiplier <= 1.1 \n " ) , wxEmptyString , wxICON_WARNING | wxOK ) ;
msg_dlg . ShowModal ( ) ;
2023-08-30 16:53:46 +08:00
m_tiExtru - > GetTextCtrl ( ) - > SetValue ( " 1.1 " ) ;
2023-08-30 11:12:12 +08:00
return ;
}
m_params . mode = CalibMode : : Calib_FRF ;
2023-08-30 17:11:44 +08:00
m_plater - > calib_flowrate_fine ( m_params ) ;
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-08-31 16:25:40 +08:00
: DPIDialog ( parent , id , _L ( " Pressure Advance Calibration " ) , wxDefaultPosition , parent - > FromDIP ( wxSize ( - 1 , 280 ) ) , wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER ) , m_plater ( plater )
2023-08-25 09:36:16 +08:00
{
wxBoxSizer * v_sizer = new wxBoxSizer ( wxVERTICAL ) ;
SetSizer ( v_sizer ) ;
wxBoxSizer * choice_sizer = new wxBoxSizer ( wxHORIZONTAL ) ;
choice_sizer - > Add ( FromDIP ( 5 ) , 0 , 0 , wxEXPAND , 5 ) ;
2023-08-31 16:25:40 +08:00
wxString m_rbMethodChoices [ ] = { _L ( " PA Line " ) , _L ( " PA Pattern " ) , _L ( " PA Tower " ) } ;
2023-08-25 09:36:16 +08:00
int m_rbMethodNChoices = sizeof ( m_rbMethodChoices ) / sizeof ( wxString ) ;
2023-08-31 16:25:40 +08:00
m_rbMethod = new wxRadioBox ( this , wxID_ANY , _L ( " Method " ) , wxDefaultPosition , wxDefaultSize , m_rbMethodNChoices , m_rbMethodChoices , 1 , wxRA_SPECIFY_COLS ) ;
2023-08-25 09:36:16 +08:00
m_rbMethod - > SetSelection ( 0 ) ;
choice_sizer - > Add ( m_rbMethod , 0 , wxALL , 5 ) ;
v_sizer - > Add ( choice_sizer ) ;
// Settings
//
wxString start_pa_str = _L ( " Start PA: " ) ;
wxString end_pa_str = _L ( " End PA: " ) ;
wxString PA_step_str = _L ( " PA step: " ) ;
auto text_size = wxWindow : : GetTextExtent ( start_pa_str ) ;
text_size . IncTo ( wxWindow : : GetTextExtent ( end_pa_str ) ) ;
text_size . IncTo ( wxWindow : : GetTextExtent ( PA_step_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 ) ) ;
// start PA
auto start_PA_sizer = new wxBoxSizer ( wxHORIZONTAL ) ;
auto start_pa_text = new wxStaticText ( this , wxID_ANY , start_pa_str , wxDefaultPosition , st_size , wxALIGN_LEFT ) ;
m_tiStartPA = new TextInput ( this , " " , " " , " " , wxDefaultPosition , ti_size , wxTE_CENTRE | wxTE_PROCESS_ENTER ) ;
m_tiStartPA - > GetTextCtrl ( ) - > SetValidator ( wxTextValidator ( wxFILTER_NUMERIC ) ) ;
start_PA_sizer - > Add ( start_pa_text , 0 , wxALL | wxALIGN_CENTER_VERTICAL , 2 ) ;
start_PA_sizer - > Add ( m_tiStartPA , 0 , wxALL | wxALIGN_CENTER_VERTICAL , 2 ) ;
settings_sizer - > Add ( start_PA_sizer ) ;
// end PA
auto end_PA_sizer = new wxBoxSizer ( wxHORIZONTAL ) ;
auto end_pa_text = new wxStaticText ( this , wxID_ANY , end_pa_str , wxDefaultPosition , st_size , wxALIGN_LEFT ) ;
m_tiEndPA = new TextInput ( this , " " , " " , " " , wxDefaultPosition , ti_size , wxTE_CENTRE | wxTE_PROCESS_ENTER ) ;
m_tiStartPA - > GetTextCtrl ( ) - > SetValidator ( wxTextValidator ( wxFILTER_NUMERIC ) ) ;
end_PA_sizer - > Add ( end_pa_text , 0 , wxALL | wxALIGN_CENTER_VERTICAL , 2 ) ;
end_PA_sizer - > Add ( m_tiEndPA , 0 , wxALL | wxALIGN_CENTER_VERTICAL , 2 ) ;
settings_sizer - > Add ( end_PA_sizer ) ;
// PA step
auto PA_step_sizer = new wxBoxSizer ( wxHORIZONTAL ) ;
auto PA_step_text = new wxStaticText ( this , wxID_ANY , PA_step_str , wxDefaultPosition , st_size , wxALIGN_LEFT ) ;
m_tiPAStep = new TextInput ( this , " " , " " , " " , wxDefaultPosition , ti_size , wxTE_CENTRE | wxTE_PROCESS_ENTER ) ;
m_tiStartPA - > GetTextCtrl ( ) - > SetValidator ( wxTextValidator ( wxFILTER_NUMERIC ) ) ;
PA_step_sizer - > Add ( PA_step_text , 0 , wxALL | wxALIGN_CENTER_VERTICAL , 2 ) ;
PA_step_sizer - > Add ( m_tiPAStep , 0 , wxALL | wxALIGN_CENTER_VERTICAL , 2 ) ;
settings_sizer - > Add ( PA_step_sizer ) ;
v_sizer - > Add ( settings_sizer ) ;
v_sizer - > Add ( 0 , FromDIP ( 10 ) , 0 , wxEXPAND , 5 ) ;
m_btnStart = new Button ( this , _L ( " OK " ) ) ;
2023-08-30 16:53:46 +08:00
StateColor btn_bg_green ( std : : pair < wxColour , int > ( wxColour ( 51 , 91 , 188 ) , StateColor : : Pressed ) ,
std : : pair < wxColour , int > ( wxColour ( 51 , 109 , 251 ) , StateColor : : Hovered ) ,
std : : pair < wxColour , int > ( wxColour ( 68 , 121 , 251 ) , StateColor : : Normal ) ) ;
2023-08-25 09:36:16 +08:00
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 , & PA_Calibration_Dlg : : on_start , this ) ;
v_sizer - > Add ( m_btnStart , 0 , wxALL | wxALIGN_RIGHT , FromDIP ( 5 ) ) ;
PA_Calibration_Dlg : : reset_params ( ) ;
// Connect Events
m_rbMethod - > Connect ( wxEVT_COMMAND_RADIOBOX_SELECTED , wxCommandEventHandler ( PA_Calibration_Dlg : : on_method_changed ) , NULL , this ) ;
this - > Connect ( wxEVT_SHOW , wxShowEventHandler ( PA_Calibration_Dlg : : on_show ) ) ;
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 : : reset_params ( ) {
int method = m_rbMethod - > GetSelection ( ) ;
m_tiStartPA - > GetTextCtrl ( ) - > SetValue ( wxString : : FromDouble ( 0.0 ) ) ;
switch ( method ) {
case 1 :
m_params . mode = CalibMode : : Calib_PA_Pattern ;
m_tiEndPA - > GetTextCtrl ( ) - > SetValue ( wxString : : FromDouble ( 0.08 ) ) ;
m_tiPAStep - > GetTextCtrl ( ) - > SetValue ( wxString : : FromDouble ( 0.005 ) ) ;
break ;
2023-08-31 16:25:40 +08:00
case 2 :
2023-08-25 09:36:16 +08:00
m_params . mode = CalibMode : : Calib_PA_Tower ;
m_tiEndPA - > GetTextCtrl ( ) - > SetValue ( wxString : : FromDouble ( 0.1 ) ) ;
m_tiPAStep - > GetTextCtrl ( ) - > SetValue ( wxString : : FromDouble ( 0.002 ) ) ;
break ;
2023-08-31 16:25:40 +08:00
default :
m_params . mode = CalibMode : : Calib_PA_Line ;
m_tiEndPA - > GetTextCtrl ( ) - > SetValue ( wxString : : FromDouble ( 0.1 ) ) ;
m_tiPAStep - > GetTextCtrl ( ) - > SetValue ( wxString : : FromDouble ( 0.002 ) ) ;
break ;
2023-08-25 09:36:16 +08:00
}
}
void PA_Calibration_Dlg : : on_start ( wxCommandEvent & event ) {
bool read_double = false ;
read_double = m_tiStartPA - > GetTextCtrl ( ) - > GetValue ( ) . ToDouble ( & m_params . start ) ;
read_double = read_double & & m_tiEndPA - > GetTextCtrl ( ) - > GetValue ( ) . ToDouble ( & m_params . end ) ;
read_double = read_double & & m_tiPAStep - > GetTextCtrl ( ) - > GetValue ( ) . ToDouble ( & m_params . step ) ;
if ( ! read_double | | m_params . start < 0 | | m_params . step < EPSILON | | m_params . end < m_params . start + m_params . step ) {
MessageDialog msg_dlg ( nullptr , _L ( " Please input valid values: \n Start PA: >= 0.0 \n End PA: > Start PA \n PA step: >= 0.001) " ), wxEmptyString, wxICON_WARNING | wxOK) ;
msg_dlg . ShowModal ( ) ;
return ;
}
switch ( m_rbMethod - > GetSelection ( ) ) {
case 1 :
2023-08-31 16:25:40 +08:00
m_params . mode = CalibMode : : Calib_PA_Pattern ;
2023-08-25 09:36:16 +08:00
break ;
case 2 :
2023-08-31 16:25:40 +08:00
m_params . mode = CalibMode : : Calib_PA_Tower ;
2023-08-25 09:36:16 +08:00
break ;
default :
2023-08-31 16:25:40 +08:00
m_params . mode = CalibMode : : Calib_PA_Line ;
2023-08-25 09:36:16 +08:00
}
2023-08-31 16:25:40 +08:00
m_plater - > calib_pa ( m_rbMethod - > GetSelection ( ) , m_tiStartPA - > GetTextCtrl ( ) - > GetValue ( ) , m_tiEndPA - > GetTextCtrl ( ) - > GetValue ( ) , m_tiPAStep - > GetTextCtrl ( ) - > GetValue ( ) ) ;
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 ) {
PA_Calibration_Dlg : : reset_params ( ) ;
event . Skip ( ) ;
}
void PA_Calibration_Dlg : : on_dpi_changed ( const wxRect & suggested_rect ) {
this - > Refresh ( ) ;
Fit ( ) ;
}
void PA_Calibration_Dlg : : on_show ( wxShowEvent & event ) {
PA_Calibration_Dlg : : reset_params ( ) ;
}
} } // namespace Slic3r::GUI