Input shaping & JunctionDeviatio wiki + improvements (#9256)
* VFA-Calibs Wiki images * Calib Code Fixes Improve Settings JD Set Precision to 3 Change damp default Recommend 0 Fixes * IS JD Wiki * Updated with 9234 * IS Verbose
|
@ -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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||
**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.
|
||||
|
||||

|
||||
|
||||
1. Measure the X and Y heights and read the damping set at that point in Orca Slicer.
|
||||
|
||||

|
||||

|
||||
|
||||
**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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||
**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.
|
||||
|
||||

|
||||
|
||||
1. Measure the X and Y heights and read the damping set at that point in Orca Slicer.
|
||||
|
||||

|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||

|
||||
|
||||
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.
|
||||

|
||||
|
||||
4. Measure the X and Y heights and read the frequency set at that point in Orca Slicer.
|
||||
|
||||

|
||||

|
||||
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
|
||||
|
||||
|
|
BIN
doc/images/InputShaping/IS_damp_klipper_print_measure.jpg
Normal file
After Width: | Height: | Size: 5.5 MiB |
BIN
doc/images/InputShaping/IS_damp_klipper_slicer_measure.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
doc/images/InputShaping/IS_damp_marlin_print_measure.jpg
Normal file
After Width: | Height: | Size: 2.4 MiB |
BIN
doc/images/InputShaping/IS_damp_marlin_slicer_measure.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
doc/images/InputShaping/IS_damp_menu.png
Normal file
After Width: | Height: | Size: 7.3 KiB |
BIN
doc/images/InputShaping/IS_freq_klipper_print_measure.jpg
Normal file
After Width: | Height: | Size: 4 MiB |
BIN
doc/images/InputShaping/IS_freq_klipper_slicer_measure.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
doc/images/InputShaping/IS_freq_marlin_print_measure.jpg
Normal file
After Width: | Height: | Size: 151 KiB |
BIN
doc/images/InputShaping/IS_freq_marlin_slicer_measure.png
Normal file
After Width: | Height: | Size: 61 KiB |
BIN
doc/images/InputShaping/IS_freq_menu.png.png
Normal file
After Width: | Height: | Size: 8.7 KiB |
BIN
doc/images/JunctionDeviation/jd_first_menu.png
Normal file
After Width: | Height: | Size: 6.9 KiB |
BIN
doc/images/JunctionDeviation/jd_first_print_measure.jpg
Normal file
After Width: | Height: | Size: 537 KiB |
BIN
doc/images/JunctionDeviation/jd_first_slicer_measure.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
doc/images/JunctionDeviation/jd_second_menu.png
Normal file
After Width: | Height: | Size: 6.9 KiB |
BIN
doc/images/JunctionDeviation/jd_second_print_measure.jpg
Normal file
After Width: | Height: | Size: 589 KiB |
BIN
doc/images/JunctionDeviation/jd_second_slicer_measure.png
Normal file
After Width: | Height: | Size: 30 KiB |
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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<TimelapseType>(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<InfillPattern>(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<BrimType>(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<TimelapseType>(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<InfillPattern>(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<BrimType>(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<TimelapseType>(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<InfillPattern>(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<BrimType>(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));
|
||||
|
|
|
@ -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);
|
||||
|
|