diff --git a/doc/Calibration.md b/doc/Calibration.md index 76991b6ce7..cede6ab376 100644 --- a/doc/Calibration.md +++ b/doc/Calibration.md @@ -187,17 +187,31 @@ Ussualy the recommended values modes are ``MZV`` or ``EI`` for Delta printers. ``` SET_VELOCITY_LIMIT MINIMUM_CRUISE_RATIO=0 ``` - 3. Use a high gloss filament to make the ringing more visible. + 3. Use an opaque, high-gloss filament to make the ringing more visible. 2. Print the Input Shaping Frequency test with a range of frequencies. + + ![image](./images/InputShaping/IS_freq_menu.png) + 1. Measure the X and Y heights and read the frequency set at that point in Orca Slicer. + + ![image](./images/InputShaping/IS_damp_klipper_print_measure.jpg) + ![image](./images/InputShaping/IS_freq_klipper_slicer_measure.png) + 2. If not a clear result, you can measure a X and Y min and max acceptable heights and repeat the test with that min and max value. **Note**: There is a chance you will need to set higher than 60Hz frequencies. Some printers with very rigid frames and excellent mechanics may exhibit frequencies exceeding 100Hz. 3. Print the Damping test setting your X and Y frequency to the value you found in the previous step. + + ![image](./images/InputShaping/IS_damp_menu.png) + 1. Measure the X and Y heights and read the damping set at that point in Orca Slicer. + + ![image](./images/InputShaping/IS_damp_klipper_print_measure.jpg) + ![image](./images/InputShaping/IS_damp_klipper_slicer_measure.png) + **Note**: Not all Resonance Compensation modes support damping -1. Restore your 3D Printer settings to avoid keep using high acceleration and jerk values. -2. Save the settings +4. Restore your 3D Printer settings to avoid keep using high acceleration and jerk values. +5. Save the settings 1. You need to go to the printer settings and set the X and Y frequency and damp to the value you found in the previous step. ### Marlin @@ -213,14 +227,28 @@ ZV Input Shaping introduces an anti-vibration signal into the stepper motion for 3. Jerk 1. If using [Classic Jerk](https://marlinfw.org/docs/configuration/configuration.html#jerk-) use a high value (e.g., 20). 2. If using [Junction Deviation](https://marlinfw.org/docs/features/junction_deviation.html) (new Marlin default mode) this test will use 0.25 (high enough to most printers). - 2. Use a high gloss filament to make the ringing more visible. -2. Print the Input Shaping Frequency test with a range of frequencies. + 2. Use an opaque, high-gloss filament to make the ringing more visible. +2. Print the Input Shaping Frequency test with a range of frequencies. + + ![image](./images/InputShaping/IS_freq_menu.png) + 1. Measure the X and Y heights and read the frequency set at that point in Orca Slicer. + + ![image](./images/InputShaping/IS_freq_marlin_print_measure.jpg) + ![image](./images/InputShaping/IS_freq_marlin_slicer_measure.png) + 2. If not a clear result, you can measure a X and Y min and max acceptable heights and repeat the test with that min and max value. **Note**: There is a chance you will need to set higher than 60Hz frequencies. Some printers with very rigid frames and excellent mechanics may exhibit frequencies exceeding 100Hz. 3. Print the Damping test setting your X and Y frequency to the value you found in the previous step. + + ![image](./images/InputShaping/IS_damp_menu.png) + 1. Measure the X and Y heights and read the damping set at that point in Orca Slicer. + + ![image](./images/InputShaping/IS_damp_marlin_print_measure.jpg) + ![image](./images/InputShaping/IS_damp_marlin_slicer_measure.png) + 4. Restore your 3D Printer settings to avoid keep using high acceleration and jerk values. 1. Reboot your printer. 2. Use the following G-code to restore your printer settings: @@ -244,7 +272,7 @@ ZV Input Shaping introduces an anti-vibration signal into the stepper motion for #### Fixed-Time Motion -TODO This calibration test is currently under development. +TODO This calibration test is currently under development. See the [Marlin documentation](https://marlinfw.org/docs/gcode/M493.html) for more information. ### Junction Deviation @@ -257,22 +285,45 @@ The default value in Marlin is typically set to 0.08mm, which may be too high fo 2. In OrcaSlicer, set: 1. Acceleration high enough to trigger ringing (e.g., 2000 mm/s²). 2. Speed high enough to trigger ringing (e.g., 100 mm/s). - 3. Use a high gloss filament to make the ringing more visible. + 3. Use an opaque, high-gloss filament to make the ringing more visible. 2. You need to print the Junction Deviation test. + + ![image](./images/JunctionDeviation/jd_first_menu.png) + 1. Measure the X and Y heights and read the frequency set at that point in Orca Slicer. - 2. If not a clear result, you can measure a X and Y min and max acceptable heights and repeat the test with that min and max value. + + ![image](./images/JunctionDeviation/jd_first_print_measure.jpg) + ![image](./images/JunctionDeviation/jd_first_slicer_measure.png) + + 2. It’s very likely that you’ll need to set values lower than 0.08 mm, as shown in the previous example. To determine a more accurate maximum JD value, you can print a new calibration tower with a maximum value set at the point where the corners start losing sharpness. + 3. + ![image](./images/JunctionDeviation/jd_second_menu.png) + + 4. Measure the X and Y heights and read the frequency set at that point in Orca Slicer. + + ![image](./images/JunctionDeviation/jd_second_print_measure.jpg) + ![image](./images/JunctionDeviation/jd_second_slicer_measure.png) 3. Save the settings - 1. Use the following G-code to set the frequency: + 1. Set your Maximun Junction Deviation value in [Printer settings/Motion ability/Jerk limitation]. + 2. Use the following G-code to set the mm: ```gcode M205 J#JunctionDeviationValue M500 ``` Example ```gcode - M205 J0.013 + M205 J0.012 M500 ``` - 2. Set it in your Marlin Compilation. + 3. Recompile four MarlinFW + 1. In Configuration.h set: + ```cpp + #define JUNCTION_DEVIATION_MM 0.012 // (mm) Distance from real junction edge + ``` + 2. Check Classic Jerk is disabled (commented). + ```cpp + //#define CLASSIC_JERK + ``` ## VFA diff --git a/doc/images/InputShaping/IS_damp_klipper_print_measure.jpg b/doc/images/InputShaping/IS_damp_klipper_print_measure.jpg new file mode 100644 index 0000000000..38d8b5aa19 Binary files /dev/null and b/doc/images/InputShaping/IS_damp_klipper_print_measure.jpg differ diff --git a/doc/images/InputShaping/IS_damp_klipper_slicer_measure.png b/doc/images/InputShaping/IS_damp_klipper_slicer_measure.png new file mode 100644 index 0000000000..a050ee98c1 Binary files /dev/null and b/doc/images/InputShaping/IS_damp_klipper_slicer_measure.png differ diff --git a/doc/images/InputShaping/IS_damp_marlin_print_measure.jpg b/doc/images/InputShaping/IS_damp_marlin_print_measure.jpg new file mode 100644 index 0000000000..ea40d66b7c Binary files /dev/null and b/doc/images/InputShaping/IS_damp_marlin_print_measure.jpg differ diff --git a/doc/images/InputShaping/IS_damp_marlin_slicer_measure.png b/doc/images/InputShaping/IS_damp_marlin_slicer_measure.png new file mode 100644 index 0000000000..d255eacb9d Binary files /dev/null and b/doc/images/InputShaping/IS_damp_marlin_slicer_measure.png differ diff --git a/doc/images/InputShaping/IS_damp_menu.png b/doc/images/InputShaping/IS_damp_menu.png new file mode 100644 index 0000000000..5f8fbeb59f Binary files /dev/null and b/doc/images/InputShaping/IS_damp_menu.png differ diff --git a/doc/images/InputShaping/IS_freq_klipper_print_measure.jpg b/doc/images/InputShaping/IS_freq_klipper_print_measure.jpg new file mode 100644 index 0000000000..6eed83ef36 Binary files /dev/null and b/doc/images/InputShaping/IS_freq_klipper_print_measure.jpg differ diff --git a/doc/images/InputShaping/IS_freq_klipper_slicer_measure.png b/doc/images/InputShaping/IS_freq_klipper_slicer_measure.png new file mode 100644 index 0000000000..d73e5258ec Binary files /dev/null and b/doc/images/InputShaping/IS_freq_klipper_slicer_measure.png differ diff --git a/doc/images/InputShaping/IS_freq_marlin_print_measure.jpg b/doc/images/InputShaping/IS_freq_marlin_print_measure.jpg new file mode 100644 index 0000000000..ae311923eb Binary files /dev/null and b/doc/images/InputShaping/IS_freq_marlin_print_measure.jpg differ diff --git a/doc/images/InputShaping/IS_freq_marlin_slicer_measure.png b/doc/images/InputShaping/IS_freq_marlin_slicer_measure.png new file mode 100644 index 0000000000..c8f6746fe6 Binary files /dev/null and b/doc/images/InputShaping/IS_freq_marlin_slicer_measure.png differ diff --git a/doc/images/InputShaping/IS_freq_menu.png.png b/doc/images/InputShaping/IS_freq_menu.png.png new file mode 100644 index 0000000000..df51c0787f Binary files /dev/null and b/doc/images/InputShaping/IS_freq_menu.png.png differ diff --git a/doc/images/JunctionDeviation/jd_first_menu.png b/doc/images/JunctionDeviation/jd_first_menu.png new file mode 100644 index 0000000000..263126143b Binary files /dev/null and b/doc/images/JunctionDeviation/jd_first_menu.png differ diff --git a/doc/images/JunctionDeviation/jd_first_print_measure.jpg b/doc/images/JunctionDeviation/jd_first_print_measure.jpg new file mode 100644 index 0000000000..a850264848 Binary files /dev/null and b/doc/images/JunctionDeviation/jd_first_print_measure.jpg differ diff --git a/doc/images/JunctionDeviation/jd_first_slicer_measure.png b/doc/images/JunctionDeviation/jd_first_slicer_measure.png new file mode 100644 index 0000000000..35a9d05164 Binary files /dev/null and b/doc/images/JunctionDeviation/jd_first_slicer_measure.png differ diff --git a/doc/images/JunctionDeviation/jd_second_menu.png b/doc/images/JunctionDeviation/jd_second_menu.png new file mode 100644 index 0000000000..016b2a4aaa Binary files /dev/null and b/doc/images/JunctionDeviation/jd_second_menu.png differ diff --git a/doc/images/JunctionDeviation/jd_second_print_measure.jpg b/doc/images/JunctionDeviation/jd_second_print_measure.jpg new file mode 100644 index 0000000000..da0c4fc9bb Binary files /dev/null and b/doc/images/JunctionDeviation/jd_second_print_measure.jpg differ diff --git a/doc/images/JunctionDeviation/jd_second_slicer_measure.png b/doc/images/JunctionDeviation/jd_second_slicer_measure.png new file mode 100644 index 0000000000..afdaf677af Binary files /dev/null and b/doc/images/JunctionDeviation/jd_second_slicer_measure.png differ diff --git a/resources/calib/input_shaping/fast_input_shaping_test.stl b/resources/calib/input_shaping/fast_tower_test.stl similarity index 100% rename from resources/calib/input_shaping/fast_input_shaping_test.stl rename to resources/calib/input_shaping/fast_tower_test.stl diff --git a/src/libslic3r/GCodeWriter.cpp b/src/libslic3r/GCodeWriter.cpp index 8bdecb8190..0826721036 100644 --- a/src/libslic3r/GCodeWriter.cpp +++ b/src/libslic3r/GCodeWriter.cpp @@ -318,7 +318,7 @@ std::string GCodeWriter::set_junction_deviation(double junction_deviation){ if (FLAVOR_IS_NOT(gcfMarlinFirmware)) { throw std::runtime_error("Junction deviation is only supported by Marlin firmware"); } - gcode << "M205 J" << junction_deviation << " ; Junction Deviation\n"; + gcode << "M205 J" << std::fixed << std::setprecision(3) << junction_deviation << " ; Junction Deviation\n"; return gcode.str(); } @@ -365,7 +365,7 @@ std::string GCodeWriter::set_input_shaping(char axis, float damp, float freq) co gcode << " SHAPER_FREQ_X=" << std::fixed << std::setprecision(2) << freq << " SHAPER_FREQ_Y=" << std::fixed << std::setprecision(2) << freq; } if (damp > 0.0f) { - gcode << " DAMPING_RATIO_X=" << damp << " DAMPING_RATIO_Y=" << damp; + gcode << " DAMPING_RATIO_X=" << std::fixed << std::setprecision(3) << damp << " DAMPING_RATIO_Y=" << std::fixed << std::setprecision(3) << damp; } } } else { @@ -380,10 +380,13 @@ std::string GCodeWriter::set_input_shaping(char axis, float damp, float freq) co } if (damp > 0.0f) { - gcode << " D" << std::fixed << std::setprecision(2) << damp; + gcode << " D" << std::fixed << std::setprecision(3) << damp; } } - gcode << "; Override input shaping value\n"; + if (GCodeWriter::full_gcode_comment){ + gcode << " ; Override input shaping"; + } + gcode << "\n"; return gcode.str(); } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 5e457d3720..c05e6b4c5e 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -10201,7 +10201,7 @@ void Plater::calib_input_shaping_freq(const Calib_Params& params) if (params.mode != CalibMode::Calib_Input_shaping_freq) return; - add_model(false, Slic3r::resources_dir() + (params.test_model < 1 ? "/calib/input_shaping/ringing_tower.stl" : "/calib/input_shaping/fast_input_shaping_test.stl")); + add_model(false, Slic3r::resources_dir() + (params.test_model < 1 ? "/calib/input_shaping/ringing_tower.stl" : "/calib/input_shaping/fast_tower_test.stl")); auto print_config = &wxGetApp().preset_bundle->prints.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 { 0.0 }); @@ -10210,6 +10210,7 @@ void Plater::calib_input_shaping_freq(const Calib_Params& params) filament_config->set_key_value("filament_max_volumetric_speed", new ConfigOptionFloats { 200 }); filament_config->set_key_value("enable_pressure_advance", new ConfigOptionBools {false }); filament_config->set_key_value("pressure_advance", new ConfigOptionFloats { 0.0 }); + print_config->set_key_value("layer_height", new ConfigOptionFloat(0.2)); print_config->set_key_value("enable_overhang_speed", new ConfigOptionBool { false }); print_config->set_key_value("timelapse_type", new ConfigOptionEnum(tlTraditional)); print_config->set_key_value("wall_loops", new ConfigOptionInt(1)); @@ -10219,6 +10220,10 @@ void Plater::calib_input_shaping_freq(const Calib_Params& params) 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_smooth", new ConfigOptionBool(true)); + print_config->set_key_value("bottom_surface_pattern", new ConfigOptionEnum(ipRectilinear)); + print_config->set_key_value("outer_wall_speed", new ConfigOptionFloat(200)); + print_config->set_key_value("default_acceleration", new ConfigOptionFloat(2000)); + print_config->set_key_value("outer_wall_acceleration", new ConfigOptionFloat(2000)); model().objects[0]->config.set_key_value("brim_type", new ConfigOptionEnum(btOuterOnly)); 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)); @@ -10240,7 +10245,7 @@ void Plater::calib_input_shaping_damp(const Calib_Params& params) if (params.mode != CalibMode::Calib_Input_shaping_damp) return; - add_model(false, Slic3r::resources_dir() + (params.test_model < 1 ? "/calib/input_shaping/ringing_tower.stl" : "/calib/input_shaping/fast_input_shaping_test.stl")); + add_model(false, Slic3r::resources_dir() + (params.test_model < 1 ? "/calib/input_shaping/ringing_tower.stl" : "/calib/input_shaping/fast_tower_test.stl")); auto print_config = &wxGetApp().preset_bundle->prints.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 { 0.0 }); @@ -10249,6 +10254,7 @@ void Plater::calib_input_shaping_damp(const Calib_Params& params) filament_config->set_key_value("filament_max_volumetric_speed", new ConfigOptionFloats { 200 }); filament_config->set_key_value("enable_pressure_advance", new ConfigOptionBools{false}); filament_config->set_key_value("pressure_advance", new ConfigOptionFloats{0.0}); + print_config->set_key_value("layer_height", new ConfigOptionFloat(0.2)); print_config->set_key_value("enable_overhang_speed", new ConfigOptionBool{false}); print_config->set_key_value("timelapse_type", new ConfigOptionEnum(tlTraditional)); print_config->set_key_value("wall_loops", new ConfigOptionInt(1)); @@ -10258,6 +10264,10 @@ void Plater::calib_input_shaping_damp(const Calib_Params& params) 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_smooth", new ConfigOptionBool(true)); + print_config->set_key_value("bottom_surface_pattern", new ConfigOptionEnum(ipRectilinear)); + print_config->set_key_value("outer_wall_speed", new ConfigOptionFloat(200)); + print_config->set_key_value("default_acceleration", new ConfigOptionFloat(2000)); + print_config->set_key_value("outer_wall_acceleration", new ConfigOptionFloat(2000)); model().objects[0]->config.set_key_value("brim_type", new ConfigOptionEnum(btOuterOnly)); 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)); @@ -10279,7 +10289,7 @@ void Plater::calib_junction_deviation(const Calib_Params& params) if (params.mode != CalibMode::Calib_Junction_Deviation) return; - add_model(false, Slic3r::resources_dir() + (params.test_model < 1 ? "/calib/input_shaping/ringing_tower.stl" : "/calib/input_shaping/fast_input_shaping_test.stl")); + add_model(false, Slic3r::resources_dir() + (params.test_model < 1 ? "/calib/input_shaping/ringing_tower.stl" : "/calib/input_shaping/fast_tower_test.stl")); auto print_config = &wxGetApp().preset_bundle->prints.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 { 0.0 }); @@ -10288,6 +10298,7 @@ void Plater::calib_junction_deviation(const Calib_Params& params) filament_config->set_key_value("filament_max_volumetric_speed", new ConfigOptionFloats{200}); filament_config->set_key_value("enable_pressure_advance", new ConfigOptionBools{false}); filament_config->set_key_value("pressure_advance", new ConfigOptionFloats{0.0}); + print_config->set_key_value("layer_height", new ConfigOptionFloat(0.2)); print_config->set_key_value("enable_overhang_speed", new ConfigOptionBool{false}); print_config->set_key_value("timelapse_type", new ConfigOptionEnum(tlTraditional)); print_config->set_key_value("wall_loops", new ConfigOptionInt(1)); @@ -10297,6 +10308,10 @@ void Plater::calib_junction_deviation(const Calib_Params& params) 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_smooth", new ConfigOptionBool(true)); + print_config->set_key_value("bottom_surface_pattern", new ConfigOptionEnum(ipRectilinear)); + print_config->set_key_value("outer_wall_speed", new ConfigOptionFloat(200)); + print_config->set_key_value("default_acceleration", new ConfigOptionFloat(2000)); + print_config->set_key_value("outer_wall_acceleration", new ConfigOptionFloat(2000)); model().objects[0]->config.set_key_value("brim_type", new ConfigOptionEnum(btOuterOnly)); 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)); diff --git a/src/slic3r/GUI/calib_dlg.cpp b/src/slic3r/GUI/calib_dlg.cpp index edf76c99f1..3d30c97c42 100644 --- a/src/slic3r/GUI/calib_dlg.cpp +++ b/src/slic3r/GUI/calib_dlg.cpp @@ -827,7 +827,7 @@ Input_Shaping_Freq_Test_Dlg::Input_Shaping_Freq_Test_Dlg(wxWindow* parent, wxWin m_tiFreqStartX = new TextInput(this, std::to_string(15), _L("HZ"), "", wxDefaultPosition, ti_size, wxTE_CENTRE); m_tiFreqStartX->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); auto end_x_text = new wxStaticText(this, wxID_ANY, end_x_str, wxDefaultPosition, st_size, wxALIGN_LEFT); - m_tiFreqEndX = new TextInput(this, std::to_string(60), _L("HZ"), "", wxDefaultPosition, ti_size, wxTE_CENTRE); + m_tiFreqEndX = new TextInput(this, std::to_string(110), _L("HZ"), "", wxDefaultPosition, ti_size, wxTE_CENTRE); m_tiFreqEndX->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); x_freq_sizer->Add(start_x_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2); @@ -842,7 +842,7 @@ Input_Shaping_Freq_Test_Dlg::Input_Shaping_Freq_Test_Dlg(wxWindow* parent, wxWin 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 = new TextInput(this, std::to_string(110), _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); @@ -855,7 +855,7 @@ Input_Shaping_Freq_Test_Dlg::Input_Shaping_Freq_Test_Dlg(wxWindow* parent, wxWin wxString damping_factor_str = _L("Damp: "); auto damping_factor_sizer = new wxBoxSizer(wxHORIZONTAL); 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.35), "", "", wxDefaultPosition, ti_size, wxTE_CENTRE); + m_tiDampingFactor = new TextInput(this, wxString::Format("%.3f", 0.15), "", "", wxDefaultPosition, ti_size, wxTE_CENTRE); m_tiDampingFactor->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); damping_factor_sizer->Add(damping_factor_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2); @@ -863,7 +863,7 @@ Input_Shaping_Freq_Test_Dlg::Input_Shaping_Freq_Test_Dlg(wxWindow* parent, wxWin settings_sizer->Add(damping_factor_sizer); // Add a note explaining that 0 means use default value - auto note_text = new wxStaticText(this, wxID_ANY, _L("Note: 0 Damp = Printer default."), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); + auto note_text = new wxStaticText(this, wxID_ANY, _L("Recommended: Set Damp to 0.\nThis will use the printer's default or the last saved value."), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); note_text->SetForegroundColour(wxColour(128, 128, 128)); settings_sizer->Add(note_text, 0, wxALL, 5); @@ -983,10 +983,10 @@ Input_Shaping_Damp_Test_Dlg::Input_Shaping_Damp_Test_Dlg(wxWindow* parent, wxWin // 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 = new TextInput(this, wxString::Format("%.3f", 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 = new TextInput(this, wxString::Format("%.3f", 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);