From cdec42e3617e096b51a444533dda96eb685ff35c Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sat, 6 Sep 2025 19:45:25 +0800 Subject: [PATCH] Fix crash due to not reading the `extruder_type` option from preset files --- src/libslic3r/Preset.cpp | 2 +- src/libslic3r/PrintConfig.cpp | 13 ++++++------- src/libslic3r/PrintConfig.hpp | 1 + 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 7cff645335..4caf2c8f75 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -907,7 +907,7 @@ static std::vector s_Preset_printer_options { "print_host_webui", "printhost_cafile","printhost_port","printhost_authorization_type", "printhost_user", "printhost_password", "printhost_ssl_ignore_revoke", "thumbnails", "thumbnails_format", - "use_firmware_retraction", "use_relative_e_distances", "printer_notes", + "use_relative_e_distances", "extruder_type", "use_firmware_retraction", "printer_notes", "grab_length", "physical_extruder_map", "cooling_tube_retraction", "cooling_tube_length", "high_current_on_filament_swap", "parking_pos_retraction", "extra_loading_move", "purge_in_prime_tower", "enable_filament_ramming", diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 1fa262a653..20e727dbf6 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -7175,7 +7175,6 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va "can_switch_nozzle_type", "can_add_auxiliary_fan", "extra_flush_volume", "spaghetti_detector", "adaptive_layer_height", "z_hop_type", "z_lift_type", "bed_temperature_difference","long_retraction_when_cut", "retraction_distance_when_cut", - "extruder_type", "internal_bridge_support_thickness","extruder_clearance_max_radius", "top_area_threshold", "reduce_wall_solid_infill","filament_load_time","filament_unload_time", "smooth_coefficient", "overhang_totally_speed", "silent_mode", "overhang_speed_classic", @@ -8187,14 +8186,14 @@ void DynamicPrintConfig::update_values_to_printer_extruders(DynamicPrintConfig& //apply process settings //auto opt_nozzle_diameters = this->option("nozzle_diameter"); //int extruder_count = opt_nozzle_diameters->size(); - //auto opt_extruder_type = dynamic_cast(printer_config.option("extruder_type")); - //auto opt_nozzle_volume_type = dynamic_cast(printer_config.option("nozzle_volume_type")); + auto opt_extruder_type = dynamic_cast(printer_config.option("extruder_type")); + auto opt_nozzle_volume_type = dynamic_cast(printer_config.option("nozzle_volume_type")); std::vector variant_index; if (extruder_id > 0 && extruder_id <= extruder_count) { variant_index.resize(1); - ExtruderType extruder_type = ExtruderType::etDirectDrive; // TODO:Orca hack (ExtruderType)(opt_extruder_type->get_at(extruder_id - 1)); - NozzleVolumeType nozzle_volume_type = NozzleVolumeType::nvtStandard; // TODO:Orca hack (NozzleVolumeType)(opt_nozzle_volume_type->get_at(extruder_id - 1)); + ExtruderType extruder_type = (ExtruderType)(opt_extruder_type->get_at(extruder_id - 1)); + NozzleVolumeType nozzle_volume_type = (NozzleVolumeType)(opt_nozzle_volume_type->get_at(extruder_id - 1)); //variant index variant_index[0] = get_index_for_extruder(extruder_id, id_name, extruder_type, nozzle_volume_type, variant_name); @@ -8212,8 +8211,8 @@ void DynamicPrintConfig::update_values_to_printer_extruders(DynamicPrintConfig& for (int e_index = 0; e_index < extruder_count; e_index++) { - ExtruderType extruder_type = ExtruderType::etDirectDrive; // TODO:Orca hack (ExtruderType)(opt_extruder_type->get_at(e_index)); - NozzleVolumeType nozzle_volume_type = NozzleVolumeType::nvtStandard; // (NozzleVolumeType)(opt_nozzle_volume_type->get_at(e_index)); + ExtruderType extruder_type = (ExtruderType)(opt_extruder_type->get_at(e_index)); + NozzleVolumeType nozzle_volume_type = (NozzleVolumeType)(opt_nozzle_volume_type->get_at(e_index)); //variant index variant_index[e_index] = get_index_for_extruder(e_index+1, id_name, extruder_type, nozzle_volume_type, variant_name); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index e540ac9f7c..00417c5bf2 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1279,6 +1279,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionBool, support_air_filtration)) ((ConfigOptionEnum,printer_structure)) ((ConfigOptionBool, support_chamber_temp_control)) + ((ConfigOptionEnumsGeneric, extruder_type)) ((ConfigOptionEnumsGeneric, nozzle_volume_type)) ((ConfigOptionStrings, extruder_ams_count)) ((ConfigOptionInts, printer_extruder_id))