Fix junction deviation and jerk settings behavior (#14004)
* Fix junction deviation and jerk settings behavior Process settings now follow the selected printer's junction deviation configuration. When machine_max_junction_deviation is enabled, default_junction_deviation is shown and jerk settings are hidden. When junction deviation is disabled, jerk settings are restored and default_junction_deviation is hidden. Fix a validation issue where junction deviation mismatch warnings could be reported even when machine_max_junction_deviation was set to 0. Warnings now apply only when junction deviation is active and point directly to default_junction_deviation. Also simplify Motion ability page visibility checks by reusing local firmware-flavor booleans. * GUI tweak - separate Junction Deviation segment - JD and Jerk stay visible
This commit is contained in:
@@ -571,7 +571,11 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
|
||||
{
|
||||
PresetBundle *preset_bundle = wxGetApp().preset_bundle;
|
||||
|
||||
auto gcflavor = preset_bundle->printers.get_edited_preset().config.option<ConfigOptionEnum<GCodeFlavor>>("gcode_flavor")->value;
|
||||
const GCodeFlavor gcflavor = preset_bundle->printers.get_edited_preset().config.option<ConfigOptionEnum<GCodeFlavor>>("gcode_flavor")->value;
|
||||
|
||||
// Orca: use booleans to avoid repeated comparisons with enum values
|
||||
const bool gcf_is_marlin_firmware = gcflavor == GCodeFlavor::gcfMarlinFirmware;
|
||||
const bool gcf_is_klipper = gcflavor == GCodeFlavor::gcfKlipper;
|
||||
|
||||
bool have_volumetric_extrusion_rate_slope = config->option<ConfigOptionFloat>("max_volumetric_extrusion_rate_slope")->value > 0;
|
||||
float have_volumetric_extrusion_rate_slope_segment_length = config->option<ConfigOptionFloat>("max_volumetric_extrusion_rate_slope_segment_length")->value;
|
||||
@@ -675,23 +679,28 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
|
||||
"top_surface_acceleration", "travel_acceleration", "bridge_acceleration", "sparse_infill_acceleration", "internal_solid_infill_acceleration"})
|
||||
toggle_field(el, have_default_acceleration);
|
||||
|
||||
bool machine_supports_junction_deviation = false;
|
||||
if (gcflavor == gcfMarlinFirmware) {
|
||||
if (const auto *machine_jd = preset_bundle->printers.get_edited_preset().config.option<ConfigOptionFloats>("machine_max_junction_deviation")) {
|
||||
machine_supports_junction_deviation = !machine_jd->values.empty() && machine_jd->values.front() > 0.0;
|
||||
}
|
||||
}
|
||||
toggle_line("default_junction_deviation", gcflavor == gcfMarlinFirmware);
|
||||
if (machine_supports_junction_deviation) {
|
||||
toggle_field("default_junction_deviation", true);
|
||||
toggle_field("default_jerk", false);
|
||||
for (auto el : { "outer_wall_jerk", "inner_wall_jerk", "initial_layer_jerk", "initial_layer_travel_jerk", "top_surface_jerk", "travel_jerk", "infill_jerk"})
|
||||
const bool junction_deviation_enabled =
|
||||
gcf_is_marlin_firmware &&
|
||||
[&]() {
|
||||
const auto *machine_jd = preset_bundle->printers.get_edited_preset().config.option<ConfigOptionFloats>("machine_max_junction_deviation");
|
||||
return machine_jd && !machine_jd->values.empty() && machine_jd->values.front() > 0.0;
|
||||
}();
|
||||
|
||||
toggle_line("default_junction_deviation", gcf_is_marlin_firmware);
|
||||
toggle_field("default_junction_deviation", junction_deviation_enabled);
|
||||
toggle_field("default_jerk", !junction_deviation_enabled);
|
||||
|
||||
const std::initializer_list<const char*> jerk_options = {
|
||||
"outer_wall_jerk", "inner_wall_jerk", "initial_layer_jerk",
|
||||
"initial_layer_travel_jerk", "top_surface_jerk", "travel_jerk", "infill_jerk"
|
||||
};
|
||||
|
||||
if (junction_deviation_enabled) {
|
||||
for (auto el : jerk_options)
|
||||
toggle_line(el, false);
|
||||
} else {
|
||||
toggle_field("default_junction_deviation", false);
|
||||
toggle_field("default_jerk", true);
|
||||
bool have_default_jerk = config->has("default_jerk") && config->opt_float("default_jerk") > 0;
|
||||
for (auto el : { "outer_wall_jerk", "inner_wall_jerk", "initial_layer_jerk", "initial_layer_travel_jerk", "top_surface_jerk", "travel_jerk", "infill_jerk"}) {
|
||||
const bool have_default_jerk = config->has("default_jerk") && config->opt_float("default_jerk") > 0;
|
||||
for (auto el : jerk_options) {
|
||||
toggle_line(el, true);
|
||||
toggle_field(el, have_default_jerk);
|
||||
}
|
||||
@@ -905,8 +914,8 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
|
||||
toggle_field("wipe_speed",!is_role_based_wipe_speed);
|
||||
|
||||
for (auto el : {"accel_to_decel_enable", "accel_to_decel_factor"})
|
||||
toggle_line(el, gcflavor == gcfKlipper);
|
||||
if(gcflavor == gcfKlipper)
|
||||
toggle_line(el, gcf_is_klipper);
|
||||
if(gcf_is_klipper)
|
||||
toggle_field("accel_to_decel_factor", config->opt_bool("accel_to_decel_enable"));
|
||||
|
||||
bool have_make_overhang_printable = config->opt_bool("make_overhang_printable");
|
||||
|
||||
Reference in New Issue
Block a user