mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-07 15:07:31 -06:00
FastTower and Granular Parameters
Co-Authored-By: Rodrigo <162915171+rf47@users.noreply.github.com>
This commit is contained in:
parent
1857849cba
commit
3662b5139c
6 changed files with 154 additions and 60 deletions
BIN
resources/calib/input_shaping/fast_input_shaping_test.stl
Normal file
BIN
resources/calib/input_shaping/fast_input_shaping_test.stl
Normal file
Binary file not shown.
|
@ -3769,13 +3769,22 @@ LayerResult GCode::process_layer(
|
||||||
sprintf(buf, "; Calib_Retraction_tower: Z_HEIGHT: %g, length:%g\n", print_z, _length);
|
sprintf(buf, "; Calib_Retraction_tower: Z_HEIGHT: %g, length:%g\n", print_z, _length);
|
||||||
gcode += buf;
|
gcode += buf;
|
||||||
} else if (print.calib_mode() == CalibMode::Calib_Input_shaping_freq) {
|
} else if (print.calib_mode() == CalibMode::Calib_Input_shaping_freq) {
|
||||||
gcode += writer().set_input_shaping('A', print.calib_params().step, m_layer_index < 2 ? 0.f : (print.calib_params().start) + ((print.calib_params().end)-(print.calib_params().start)) * (m_layer_index - 2) / (m_layer_count - 3));
|
if (m_layer_index == 1){
|
||||||
|
gcode += writer().set_input_shaping('A', print.calib_params().start, 0.f);
|
||||||
|
} else {
|
||||||
|
if (print.calib_params().freqStartX == print.calib_params().freqStartY && print.calib_params().freqEndX == print.calib_params().freqEndY) {
|
||||||
|
gcode += writer().set_input_shaping('A', 0.f, (print.calib_params().freqStartX) + ((print.calib_params().freqEndX)-(print.calib_params().freqStartX)) * (m_layer_index - 2) / (m_layer_count - 3));
|
||||||
|
} else {
|
||||||
|
gcode += writer().set_input_shaping('X', 0.f, (print.calib_params().freqStartX) + ((print.calib_params().freqEndX)-(print.calib_params().freqStartX)) * (m_layer_index - 2) / (m_layer_count - 3));
|
||||||
|
gcode += writer().set_input_shaping('Y', 0.f, (print.calib_params().freqStartY) + ((print.calib_params().freqEndY)-(print.calib_params().freqStartY)) * (m_layer_index - 2) / (m_layer_count - 3));
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (print.calib_mode() == CalibMode::Calib_Input_shaping_damp) {
|
} else if (print.calib_mode() == CalibMode::Calib_Input_shaping_damp) {
|
||||||
if (m_layer_index == 1){
|
if (m_layer_index == 1){
|
||||||
gcode += writer().set_input_shaping('X', 0.f, print.calib_params().start);
|
gcode += writer().set_input_shaping('X', 0.f, print.calib_params().freqStartX);
|
||||||
gcode += writer().set_input_shaping('Y', 0.f, print.calib_params().end);
|
gcode += writer().set_input_shaping('Y', 0.f, print.calib_params().freqStartY);
|
||||||
} else {
|
} else {
|
||||||
gcode += writer().set_input_shaping('A', float(m_layer_index) / float(m_layer_count), 0.f);
|
gcode += writer().set_input_shaping('A', print.calib_params().start + ((print.calib_params().end)-(print.calib_params().start)) * (m_layer_index) / (m_layer_count), 0.f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,8 @@ struct Calib_Params
|
||||||
Calib_Params() : mode(CalibMode::Calib_None){};
|
Calib_Params() : mode(CalibMode::Calib_None){};
|
||||||
double start, end, step;
|
double start, end, step;
|
||||||
bool print_numbers;
|
bool print_numbers;
|
||||||
|
double freqStartX, freqEndX, freqStartY, freqEndY;
|
||||||
|
int test_model;
|
||||||
std::vector<double> accelerations;
|
std::vector<double> accelerations;
|
||||||
std::vector<double> speeds;
|
std::vector<double> speeds;
|
||||||
|
|
||||||
|
@ -338,4 +339,4 @@ private:
|
||||||
const double m_glyph_padding_vertical{1};
|
const double m_glyph_padding_vertical{1};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Slic3
|
} // namespace Slic3r
|
|
@ -10158,7 +10158,7 @@ void Plater::calib_input_shaping_freq(const Calib_Params& params)
|
||||||
if (params.mode != CalibMode::Calib_Input_shaping_freq)
|
if (params.mode != CalibMode::Calib_Input_shaping_freq)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
add_model(false, Slic3r::resources_dir() + "/calib/input_shaping/ringing_tower.stl");
|
add_model(false, Slic3r::resources_dir() + (params.test_model < 1 ? "/calib/input_shaping/ringing_tower.stl" : "/calib/input_shaping/fast_input_shaping_test.stl"));
|
||||||
auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config;
|
auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config;
|
||||||
auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config;
|
auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config;
|
||||||
filament_config->set_key_value("slow_down_layer_time", new ConfigOptionFloats { 2.0 });
|
filament_config->set_key_value("slow_down_layer_time", new ConfigOptionFloats { 2.0 });
|
||||||
|
@ -10169,7 +10169,9 @@ void Plater::calib_input_shaping_freq(const Calib_Params& params)
|
||||||
print_config->set_key_value("top_shell_layers", new ConfigOptionInt(0));
|
print_config->set_key_value("top_shell_layers", new ConfigOptionInt(0));
|
||||||
print_config->set_key_value("bottom_shell_layers", new ConfigOptionInt(1));
|
print_config->set_key_value("bottom_shell_layers", new ConfigOptionInt(1));
|
||||||
print_config->set_key_value("sparse_infill_density", new ConfigOptionPercent(0));
|
print_config->set_key_value("sparse_infill_density", new ConfigOptionPercent(0));
|
||||||
|
print_config->set_key_value("detect_thin_wall", new ConfigOptionBool(false));
|
||||||
print_config->set_key_value("spiral_mode", new ConfigOptionBool(true));
|
print_config->set_key_value("spiral_mode", new ConfigOptionBool(true));
|
||||||
|
print_config->set_key_value("spiral_mode_smooth", new ConfigOptionBool(true));
|
||||||
model().objects[0]->config.set_key_value("brim_type", new ConfigOptionEnum<BrimType>(btOuterOnly));
|
model().objects[0]->config.set_key_value("brim_type", new ConfigOptionEnum<BrimType>(btOuterOnly));
|
||||||
model().objects[0]->config.set_key_value("brim_width", new ConfigOptionFloat(3.0));
|
model().objects[0]->config.set_key_value("brim_width", new ConfigOptionFloat(3.0));
|
||||||
model().objects[0]->config.set_key_value("brim_object_gap", new ConfigOptionFloat(0.0));
|
model().objects[0]->config.set_key_value("brim_object_gap", new ConfigOptionFloat(0.0));
|
||||||
|
@ -10191,7 +10193,7 @@ void Plater::calib_input_shaping_damp(const Calib_Params& params)
|
||||||
if (params.mode != CalibMode::Calib_Input_shaping_damp)
|
if (params.mode != CalibMode::Calib_Input_shaping_damp)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
add_model(false, Slic3r::resources_dir() + "/calib/input_shaping/ringing_tower.stl");
|
add_model(false, Slic3r::resources_dir() + (params.test_model < 1 ? "/calib/input_shaping/ringing_tower.stl" : "/calib/input_shaping/fast_input_shaping_test.stl"));
|
||||||
auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config;
|
auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config;
|
||||||
auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config;
|
auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config;
|
||||||
filament_config->set_key_value("slow_down_layer_time", new ConfigOptionFloats { 2.0 });
|
filament_config->set_key_value("slow_down_layer_time", new ConfigOptionFloats { 2.0 });
|
||||||
|
@ -10202,7 +10204,9 @@ void Plater::calib_input_shaping_damp(const Calib_Params& params)
|
||||||
print_config->set_key_value("top_shell_layers", new ConfigOptionInt(0));
|
print_config->set_key_value("top_shell_layers", new ConfigOptionInt(0));
|
||||||
print_config->set_key_value("bottom_shell_layers", new ConfigOptionInt(1));
|
print_config->set_key_value("bottom_shell_layers", new ConfigOptionInt(1));
|
||||||
print_config->set_key_value("sparse_infill_density", new ConfigOptionPercent(0));
|
print_config->set_key_value("sparse_infill_density", new ConfigOptionPercent(0));
|
||||||
|
print_config->set_key_value("detect_thin_wall", new ConfigOptionBool(false));
|
||||||
print_config->set_key_value("spiral_mode", new ConfigOptionBool(true));
|
print_config->set_key_value("spiral_mode", new ConfigOptionBool(true));
|
||||||
|
print_config->set_key_value("spiral_mode_smooth", new ConfigOptionBool(true));
|
||||||
model().objects[0]->config.set_key_value("brim_type", new ConfigOptionEnum<BrimType>(btOuterOnly));
|
model().objects[0]->config.set_key_value("brim_type", new ConfigOptionEnum<BrimType>(btOuterOnly));
|
||||||
model().objects[0]->config.set_key_value("brim_width", new ConfigOptionFloat(3.0));
|
model().objects[0]->config.set_key_value("brim_width", new ConfigOptionFloat(3.0));
|
||||||
model().objects[0]->config.set_key_value("brim_object_gap", new ConfigOptionFloat(0.0));
|
model().objects[0]->config.set_key_value("brim_object_gap", new ConfigOptionFloat(0.0));
|
||||||
|
|
|
@ -722,7 +722,7 @@ Retraction_Test_Dlg::Retraction_Test_Dlg(wxWindow* parent, wxWindowID id, Plater
|
||||||
auto end_length_sizer = new wxBoxSizer(wxHORIZONTAL);
|
auto end_length_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
auto end_length_text = new wxStaticText(this, wxID_ANY, end_length_str, wxDefaultPosition, st_size, wxALIGN_LEFT);
|
auto end_length_text = new wxStaticText(this, wxID_ANY, end_length_str, wxDefaultPosition, st_size, wxALIGN_LEFT);
|
||||||
m_tiEnd = new TextInput(this, std::to_string(2), _L("mm"), "", wxDefaultPosition, ti_size, wxTE_CENTRE);
|
m_tiEnd = new TextInput(this, std::to_string(2), _L("mm"), "", wxDefaultPosition, ti_size, wxTE_CENTRE);
|
||||||
m_tiEnd->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC));//m_tiStart->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
|
m_tiStart->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
|
||||||
end_length_sizer->Add(end_length_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
end_length_sizer->Add(end_length_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
||||||
end_length_sizer->Add(m_tiEnd, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
end_length_sizer->Add(m_tiEnd, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
||||||
settings_sizer->Add(end_length_sizer);
|
settings_sizer->Add(end_length_sizer);
|
||||||
|
@ -798,37 +798,64 @@ Input_Shaping_Freq_Test_Dlg::Input_Shaping_Freq_Test_Dlg(wxWindow* parent, wxWin
|
||||||
wxBoxSizer* v_sizer = new wxBoxSizer(wxVERTICAL);
|
wxBoxSizer* v_sizer = new wxBoxSizer(wxVERTICAL);
|
||||||
SetSizer(v_sizer);
|
SetSizer(v_sizer);
|
||||||
|
|
||||||
|
// Model selection
|
||||||
|
wxString m_rbModelChoices[] = { _L("Ringing Tower"), _L("Fast Tower") };
|
||||||
|
int m_rbModelNChoices = sizeof(m_rbModelChoices) / sizeof(wxString);
|
||||||
|
m_rbModel = new wxRadioBox(this, wxID_ANY, _L("Test model"), wxDefaultPosition, wxDefaultSize, m_rbModelNChoices, m_rbModelChoices, 1, wxRA_SPECIFY_ROWS);
|
||||||
|
m_rbModel->SetSelection(0);
|
||||||
|
v_sizer->Add(m_rbModel, 0, wxALL | wxEXPAND, 5);
|
||||||
|
|
||||||
// Settings
|
// Settings
|
||||||
//
|
//
|
||||||
wxString start_length_str = _L("Start: ");
|
wxString start_x_str = _L("Start X: ");
|
||||||
wxString end_length_str = _L("End: ");
|
wxString end_x_str = _L("End X: ");
|
||||||
auto text_size = wxWindow::GetTextExtent(start_length_str);
|
wxString start_y_str = _L("Start Y: ");
|
||||||
text_size.IncTo(wxWindow::GetTextExtent(end_length_str));
|
wxString end_y_str = _L("End Y: ");
|
||||||
|
auto text_size = wxWindow::GetTextExtent(start_x_str);
|
||||||
|
text_size.IncTo(wxWindow::GetTextExtent(end_x_str));
|
||||||
|
text_size.IncTo(wxWindow::GetTextExtent(start_y_str));
|
||||||
|
text_size.IncTo(wxWindow::GetTextExtent(end_y_str));
|
||||||
text_size.x = text_size.x * 1.5;
|
text_size.x = text_size.x * 1.5;
|
||||||
wxStaticBoxSizer* settings_sizer = new wxStaticBoxSizer(wxVERTICAL, this, _L("Frequency settings"));
|
wxStaticBoxSizer* settings_sizer = new wxStaticBoxSizer(wxVERTICAL, this, _L("Frequency settings"));
|
||||||
|
|
||||||
auto st_size = FromDIP(wxSize(text_size.x, -1));
|
auto st_size = FromDIP(wxSize(text_size.x, -1));
|
||||||
auto ti_size = FromDIP(wxSize(90, -1));
|
auto ti_size = FromDIP(wxSize(90, -1));
|
||||||
|
|
||||||
auto start_length_sizer = new wxBoxSizer(wxHORIZONTAL);
|
// X axis frequencies
|
||||||
auto start_length_text = new wxStaticText(this, wxID_ANY, start_length_str, wxDefaultPosition, st_size, wxALIGN_LEFT);
|
auto x_freq_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
m_tiStart = new TextInput(this, std::to_string(15), _L("HZ"), "", wxDefaultPosition, ti_size, wxTE_CENTRE);
|
auto start_x_text = new wxStaticText(this, wxID_ANY, start_x_str, wxDefaultPosition, st_size, wxALIGN_LEFT);
|
||||||
m_tiStart->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
|
m_tiFreqStartX = new TextInput(this, std::to_string(15), _L("HZ"), "", wxDefaultPosition, ti_size, wxTE_CENTRE);
|
||||||
auto end_length_text = new wxStaticText(this, wxID_ANY, end_length_str, wxDefaultPosition, st_size, wxALIGN_LEFT);
|
m_tiFreqStartX->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
|
||||||
m_tiEnd = new TextInput(this, std::to_string(45), _L("HZ"), "", wxDefaultPosition, ti_size, wxTE_CENTRE);
|
auto end_x_text = new wxStaticText(this, wxID_ANY, end_x_str, wxDefaultPosition, st_size, wxALIGN_LEFT);
|
||||||
m_tiEnd->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
|
m_tiFreqEndX = new TextInput(this, std::to_string(60), _L("HZ"), "", wxDefaultPosition, ti_size, wxTE_CENTRE);
|
||||||
|
m_tiFreqEndX->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
|
||||||
|
|
||||||
start_length_sizer->Add(start_length_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
x_freq_sizer->Add(start_x_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
||||||
start_length_sizer->Add(m_tiStart, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
x_freq_sizer->Add(m_tiFreqStartX, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
||||||
start_length_sizer->Add(end_length_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
x_freq_sizer->Add(end_x_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
||||||
start_length_sizer->Add(m_tiEnd, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
x_freq_sizer->Add(m_tiFreqEndX, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
||||||
settings_sizer->Add(start_length_sizer);
|
settings_sizer->Add(x_freq_sizer);
|
||||||
|
|
||||||
|
// Y axis frequencies
|
||||||
|
auto y_freq_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
auto start_y_text = new wxStaticText(this, wxID_ANY, start_y_str, wxDefaultPosition, st_size, wxALIGN_LEFT);
|
||||||
|
m_tiFreqStartY = new TextInput(this, std::to_string(15), _L("HZ"), "", wxDefaultPosition, ti_size, wxTE_CENTRE);
|
||||||
|
m_tiFreqStartY->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
|
||||||
|
auto end_y_text = new wxStaticText(this, wxID_ANY, end_y_str, wxDefaultPosition, st_size, wxALIGN_LEFT);
|
||||||
|
m_tiFreqEndY = new TextInput(this, std::to_string(60), _L("HZ"), "", wxDefaultPosition, ti_size, wxTE_CENTRE);
|
||||||
|
m_tiFreqEndY->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
|
||||||
|
|
||||||
|
y_freq_sizer->Add(start_y_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
||||||
|
y_freq_sizer->Add(m_tiFreqStartY, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
||||||
|
y_freq_sizer->Add(end_y_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
||||||
|
y_freq_sizer->Add(m_tiFreqEndY, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
||||||
|
settings_sizer->Add(y_freq_sizer);
|
||||||
|
|
||||||
// Damping Factor
|
// Damping Factor
|
||||||
wxString damping_factor_str = _L("Damp: ");
|
wxString damping_factor_str = _L("Damp: ");
|
||||||
auto damping_factor_sizer = new wxBoxSizer(wxHORIZONTAL);
|
auto damping_factor_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
auto damping_factor_text = new wxStaticText(this, wxID_ANY, damping_factor_str, wxDefaultPosition, st_size, wxALIGN_LEFT);
|
auto damping_factor_text = new wxStaticText(this, wxID_ANY, damping_factor_str, wxDefaultPosition, st_size, wxALIGN_LEFT);
|
||||||
m_tiDampingFactor = new TextInput(this, wxString::Format("%.2f", 0.15), "", "", wxDefaultPosition, ti_size, wxTE_CENTRE);
|
m_tiDampingFactor = new TextInput(this, wxString::Format("%.2f", 0.35), "", "", wxDefaultPosition, ti_size, wxTE_CENTRE);
|
||||||
m_tiDampingFactor->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
|
m_tiDampingFactor->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
|
||||||
|
|
||||||
damping_factor_sizer->Add(damping_factor_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
damping_factor_sizer->Add(damping_factor_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
||||||
|
@ -872,26 +899,33 @@ Input_Shaping_Freq_Test_Dlg::~Input_Shaping_Freq_Test_Dlg() {
|
||||||
|
|
||||||
void Input_Shaping_Freq_Test_Dlg::on_start(wxCommandEvent& event) {
|
void Input_Shaping_Freq_Test_Dlg::on_start(wxCommandEvent& event) {
|
||||||
bool read_double = false;
|
bool read_double = false;
|
||||||
read_double = m_tiStart->GetTextCtrl()->GetValue().ToDouble(&m_params.start);
|
read_double = m_tiFreqStartX->GetTextCtrl()->GetValue().ToDouble(&m_params.freqStartX);
|
||||||
read_double = read_double && m_tiEnd->GetTextCtrl()->GetValue().ToDouble(&m_params.end);
|
read_double = read_double && m_tiFreqEndX->GetTextCtrl()->GetValue().ToDouble(&m_params.freqEndX);
|
||||||
|
read_double = read_double && m_tiFreqStartY->GetTextCtrl()->GetValue().ToDouble(&m_params.freqStartY);
|
||||||
|
read_double = read_double && m_tiFreqEndY->GetTextCtrl()->GetValue().ToDouble(&m_params.freqEndY);
|
||||||
|
read_double = read_double && m_tiDampingFactor->GetTextCtrl()->GetValue().ToDouble(&m_params.start);
|
||||||
|
|
||||||
double dampingFactor = 0.0;
|
if (!read_double ||
|
||||||
bool read_damping = m_tiDampingFactor->GetTextCtrl()->GetValue().ToDouble(&dampingFactor);
|
m_params.freqStartX < 0 || m_params.freqEndX > 500 ||
|
||||||
|
m_params.freqStartY < 0 || m_params.freqEndX > 500 ||
|
||||||
if (!read_double || m_params.start < 0 || m_params.end > 500|| m_params.end < m_params.start) {
|
m_params.freqStartX >= m_params.freqEndX ||
|
||||||
MessageDialog msg_dlg(nullptr, _L("Please input valid values:\nStart > 0\nEnd < 500\nStart < End"), wxEmptyString, wxICON_WARNING | wxOK);
|
m_params.freqStartY >= m_params.freqEndY) {
|
||||||
|
MessageDialog msg_dlg(nullptr, _L("Please input valid values\n(0 < FreqStart < FreqEnd < 500"), wxEmptyString, wxICON_WARNING | wxOK);
|
||||||
msg_dlg.ShowModal();
|
msg_dlg.ShowModal();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!read_damping || dampingFactor < 0 || dampingFactor >= 1) {
|
if (m_params.start < 0 || m_params.start >= 1) {
|
||||||
MessageDialog msg_dlg(nullptr, _L("Please input a valid damping factor (0 < Damping/zeta factor <= 1)"), wxEmptyString, wxICON_WARNING | wxOK);
|
MessageDialog msg_dlg(nullptr, _L("Please input a valid damping factor (0 < Damping/zeta factor <= 1)"), wxEmptyString, wxICON_WARNING | wxOK);
|
||||||
msg_dlg.ShowModal();
|
msg_dlg.ShowModal();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_params.step = dampingFactor;
|
|
||||||
m_params.mode = CalibMode::Calib_Input_shaping_freq;
|
m_params.mode = CalibMode::Calib_Input_shaping_freq;
|
||||||
|
|
||||||
|
// Set model type based on selection
|
||||||
|
m_params.test_model = m_rbModel->GetSelection() == 0 ? 0 : 1; // 0 = Ringing Tower, 1 = Fast Tower
|
||||||
|
|
||||||
m_plater->calib_input_shaping_freq(m_params);
|
m_plater->calib_input_shaping_freq(m_params);
|
||||||
EndModal(wxID_OK);
|
EndModal(wxID_OK);
|
||||||
}
|
}
|
||||||
|
@ -899,7 +933,6 @@ void Input_Shaping_Freq_Test_Dlg::on_start(wxCommandEvent& event) {
|
||||||
void Input_Shaping_Freq_Test_Dlg::on_dpi_changed(const wxRect& suggested_rect) {
|
void Input_Shaping_Freq_Test_Dlg::on_dpi_changed(const wxRect& suggested_rect) {
|
||||||
this->Refresh();
|
this->Refresh();
|
||||||
Fit();
|
Fit();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Input_Shaping_Damp_Test_Dlg
|
// Input_Shaping_Damp_Test_Dlg
|
||||||
|
@ -911,31 +944,57 @@ Input_Shaping_Damp_Test_Dlg::Input_Shaping_Damp_Test_Dlg(wxWindow* parent, wxWin
|
||||||
wxBoxSizer* v_sizer = new wxBoxSizer(wxVERTICAL);
|
wxBoxSizer* v_sizer = new wxBoxSizer(wxVERTICAL);
|
||||||
SetSizer(v_sizer);
|
SetSizer(v_sizer);
|
||||||
|
|
||||||
|
// Model selection
|
||||||
|
wxString m_rbModelChoices[] = { _L("Ringing Tower"), _L("Fast Tower") };
|
||||||
|
int m_rbModelNChoices = sizeof(m_rbModelChoices) / sizeof(wxString);
|
||||||
|
m_rbModel = new wxRadioBox(this, wxID_ANY, _L("Test model"), wxDefaultPosition, wxDefaultSize, m_rbModelNChoices, m_rbModelChoices, 1, wxRA_SPECIFY_ROWS);
|
||||||
|
m_rbModel->SetSelection(0);
|
||||||
|
v_sizer->Add(m_rbModel, 0, wxALL | wxEXPAND, 5);
|
||||||
|
|
||||||
// Settings
|
// Settings
|
||||||
//
|
//
|
||||||
wxString start_length_str = _L("X: ");
|
wxString freq_x_str = _L("Freq X: ");
|
||||||
wxString end_length_str = _L("Y: ");
|
wxString freq_y_str = _L("Freq Y: ");
|
||||||
auto text_size = wxWindow::GetTextExtent(start_length_str);
|
wxString damp_start_str = _L("Start damp: ");
|
||||||
text_size.IncTo(wxWindow::GetTextExtent(end_length_str));
|
wxString damp_end_str = _L("End damp: ");
|
||||||
|
auto text_size = wxWindow::GetTextExtent(freq_x_str);
|
||||||
|
text_size.IncTo(wxWindow::GetTextExtent(freq_y_str));
|
||||||
|
text_size.IncTo(wxWindow::GetTextExtent(damp_start_str));
|
||||||
|
text_size.IncTo(wxWindow::GetTextExtent(damp_end_str));
|
||||||
text_size.x = text_size.x * 1.5;
|
text_size.x = text_size.x * 1.5;
|
||||||
wxStaticBoxSizer* settings_sizer = new wxStaticBoxSizer(wxVERTICAL, this, _L("Frequency settings"));
|
wxStaticBoxSizer* settings_sizer = new wxStaticBoxSizer(wxVERTICAL, this, _L("Frequency settings"));
|
||||||
|
|
||||||
auto st_size = FromDIP(wxSize(text_size.x, -1));
|
auto st_size = FromDIP(wxSize(text_size.x, -1));
|
||||||
auto ti_size = FromDIP(wxSize(90, -1));
|
auto ti_size = FromDIP(wxSize(90, -1));
|
||||||
|
|
||||||
auto start_length_sizer = new wxBoxSizer(wxHORIZONTAL);
|
auto freq_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
auto start_length_text = new wxStaticText(this, wxID_ANY, start_length_str, wxDefaultPosition, st_size, wxALIGN_LEFT);
|
auto freq_x_text = new wxStaticText(this, wxID_ANY, freq_x_str, wxDefaultPosition, st_size, wxALIGN_LEFT);
|
||||||
m_tiStart = new TextInput(this, std::to_string(40), _L("HZ"), "", wxDefaultPosition, ti_size, wxTE_CENTRE);
|
m_tiFreqX = new TextInput(this, std::to_string(30), _L("HZ"), "", wxDefaultPosition, ti_size, wxTE_CENTRE);
|
||||||
m_tiStart->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
|
m_tiFreqX->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
|
||||||
auto end_length_text = new wxStaticText(this, wxID_ANY, end_length_str, wxDefaultPosition, st_size, wxALIGN_LEFT);
|
auto freq_y_text = new wxStaticText(this, wxID_ANY, freq_y_str, wxDefaultPosition, st_size, wxALIGN_LEFT);
|
||||||
m_tiEnd = new TextInput(this, std::to_string(40), _L("HZ"), "", wxDefaultPosition, ti_size, wxTE_CENTRE);
|
m_tiFreqY = new TextInput(this, std::to_string(30), _L("HZ"), "", wxDefaultPosition, ti_size, wxTE_CENTRE);
|
||||||
m_tiEnd->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
|
m_tiFreqY->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
|
||||||
|
|
||||||
start_length_sizer->Add(start_length_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
freq_sizer->Add(freq_x_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
||||||
start_length_sizer->Add(m_tiStart, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
freq_sizer->Add(m_tiFreqX, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
||||||
start_length_sizer->Add(end_length_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
freq_sizer->Add(freq_y_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
||||||
start_length_sizer->Add(m_tiEnd, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
freq_sizer->Add(m_tiFreqY, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
||||||
settings_sizer->Add(start_length_sizer);
|
settings_sizer->Add(freq_sizer);
|
||||||
|
|
||||||
|
// Damping Factor Start and End
|
||||||
|
auto damp_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
auto damp_start_text = new wxStaticText(this, wxID_ANY, damp_start_str, wxDefaultPosition, st_size, wxALIGN_LEFT);
|
||||||
|
m_tiDampingFactorStart = new TextInput(this, wxString::Format("%.2f", 0.00), "", "", wxDefaultPosition, ti_size, wxTE_CENTRE);
|
||||||
|
m_tiDampingFactorStart->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
|
||||||
|
auto damp_end_text = new wxStaticText(this, wxID_ANY, damp_end_str, wxDefaultPosition, st_size, wxALIGN_LEFT);
|
||||||
|
m_tiDampingFactorEnd = new TextInput(this, wxString::Format("%.2f", 0.40), "", "", wxDefaultPosition, ti_size, wxTE_CENTRE);
|
||||||
|
m_tiDampingFactorEnd->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
|
||||||
|
|
||||||
|
damp_sizer->Add(damp_start_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
||||||
|
damp_sizer->Add(m_tiDampingFactorStart, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
||||||
|
damp_sizer->Add(damp_end_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
||||||
|
damp_sizer->Add(m_tiDampingFactorEnd, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
|
||||||
|
settings_sizer->Add(damp_sizer);
|
||||||
|
|
||||||
// Add a note to explain users to use their previously calculated frequency
|
// Add a note to explain users to use their previously calculated frequency
|
||||||
auto note_text = new wxStaticText(this, wxID_ANY, _L("Note: Set frequencies to the previously calculated values"),
|
auto note_text = new wxStaticText(this, wxID_ANY, _L("Note: Set frequencies to the previously calculated values"),
|
||||||
|
@ -974,16 +1033,32 @@ Input_Shaping_Damp_Test_Dlg::~Input_Shaping_Damp_Test_Dlg() {
|
||||||
|
|
||||||
void Input_Shaping_Damp_Test_Dlg::on_start(wxCommandEvent& event) {
|
void Input_Shaping_Damp_Test_Dlg::on_start(wxCommandEvent& event) {
|
||||||
bool read_double = false;
|
bool read_double = false;
|
||||||
read_double = m_tiStart->GetTextCtrl()->GetValue().ToDouble(&m_params.start);
|
read_double = m_tiFreqX->GetTextCtrl()->GetValue().ToDouble(&m_params.freqStartX);
|
||||||
read_double = read_double && m_tiEnd->GetTextCtrl()->GetValue().ToDouble(&m_params.end);
|
read_double = read_double && m_tiFreqY->GetTextCtrl()->GetValue().ToDouble(&m_params.freqStartY);
|
||||||
|
read_double = read_double && m_tiDampingFactorStart->GetTextCtrl()->GetValue().ToDouble(&m_params.start);
|
||||||
|
read_double = read_double && m_tiDampingFactorEnd->GetTextCtrl()->GetValue().ToDouble(&m_params.end);
|
||||||
|
|
||||||
if (!read_double || m_params.start < 0 || m_params.start > 500 || m_params.end < 0 || m_params.end > 500) {
|
|
||||||
|
if (!read_double ||
|
||||||
|
m_params.freqStartX < 0 || m_params.freqStartX > 500 ||
|
||||||
|
m_params.freqStartY < 0 || m_params.freqStartY > 500 ) {
|
||||||
MessageDialog msg_dlg(nullptr, _L("Please input valid values\n(0 < Freq < 500"), wxEmptyString, wxICON_WARNING | wxOK);
|
MessageDialog msg_dlg(nullptr, _L("Please input valid values\n(0 < Freq < 500"), wxEmptyString, wxICON_WARNING | wxOK);
|
||||||
msg_dlg.ShowModal();
|
msg_dlg.ShowModal();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_params.start < 0 || m_params.end > 1
|
||||||
|
|| m_params.start >= m_params.end) {
|
||||||
|
MessageDialog msg_dlg(nullptr, _L("Please input a valid damping factor (0 <= DampingStart < DampingEnd <= 1)"), wxEmptyString, wxICON_WARNING | wxOK);
|
||||||
|
msg_dlg.ShowModal();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
m_params.mode = CalibMode::Calib_Input_shaping_damp;
|
m_params.mode = CalibMode::Calib_Input_shaping_damp;
|
||||||
|
|
||||||
|
// Set model type based on selection
|
||||||
|
m_params.test_model = m_rbModel->GetSelection() == 0 ? 0 : 1; // 0 = Ringing Tower, 1 = Fast Tower
|
||||||
|
|
||||||
m_plater->calib_input_shaping_damp(m_params);
|
m_plater->calib_input_shaping_damp(m_params);
|
||||||
EndModal(wxID_OK);
|
EndModal(wxID_OK);
|
||||||
}
|
}
|
||||||
|
@ -991,7 +1066,6 @@ void Input_Shaping_Damp_Test_Dlg::on_start(wxCommandEvent& event) {
|
||||||
void Input_Shaping_Damp_Test_Dlg::on_dpi_changed(const wxRect& suggested_rect) {
|
void Input_Shaping_Damp_Test_Dlg::on_dpi_changed(const wxRect& suggested_rect) {
|
||||||
this->Refresh();
|
this->Refresh();
|
||||||
Fit();
|
Fit();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}} // namespace Slic3r::GUI
|
}} // namespace Slic3r::GUI
|
||||||
|
|
|
@ -137,8 +137,11 @@ protected:
|
||||||
virtual void on_start(wxCommandEvent& event);
|
virtual void on_start(wxCommandEvent& event);
|
||||||
Calib_Params m_params;
|
Calib_Params m_params;
|
||||||
|
|
||||||
TextInput* m_tiStart;
|
wxRadioBox* m_rbModel;
|
||||||
TextInput* m_tiEnd;
|
TextInput* m_tiFreqStartX;
|
||||||
|
TextInput* m_tiFreqEndX;
|
||||||
|
TextInput* m_tiFreqStartY;
|
||||||
|
TextInput* m_tiFreqEndY;
|
||||||
TextInput* m_tiDampingFactor;
|
TextInput* m_tiDampingFactor;
|
||||||
Button* m_btnStart;
|
Button* m_btnStart;
|
||||||
Plater* m_plater;
|
Plater* m_plater;
|
||||||
|
@ -156,8 +159,11 @@ protected:
|
||||||
virtual void on_start(wxCommandEvent& event);
|
virtual void on_start(wxCommandEvent& event);
|
||||||
Calib_Params m_params;
|
Calib_Params m_params;
|
||||||
|
|
||||||
TextInput* m_tiStart;
|
wxRadioBox* m_rbModel;
|
||||||
TextInput* m_tiEnd;
|
TextInput* m_tiFreqX;
|
||||||
|
TextInput* m_tiFreqY;
|
||||||
|
TextInput* m_tiDampingFactorStart;
|
||||||
|
TextInput* m_tiDampingFactorEnd;
|
||||||
Button* m_btnStart;
|
Button* m_btnStart;
|
||||||
Plater* m_plater;
|
Plater* m_plater;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue