From 56d8bd8fbe08b74cb7dfdf7859f86a5857fbc2c3 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Fri, 10 Oct 2025 16:57:16 +0800 Subject: [PATCH] Fix option nullable --- src/OrcaSlicer.cpp | 6 +++--- src/libslic3r/Format/bbs_3mf.cpp | 2 +- src/libslic3r/PresetBundle.cpp | 2 +- src/libslic3r/PrintApply.cpp | 2 +- src/slic3r/GUI/AmsMappingPopup.cpp | 2 +- src/slic3r/GUI/CreatePresetsDialog.cpp | 6 +++--- src/slic3r/GUI/FilamentGroupPopup.cpp | 2 +- src/slic3r/GUI/FilamentMapDialog.cpp | 2 +- src/slic3r/GUI/PartPlate.cpp | 2 +- src/slic3r/GUI/Plater.cpp | 8 ++++---- src/slic3r/GUI/SyncAmsInfoDialog.cpp | 12 ++++++------ src/slic3r/GUI/Tab.cpp | 8 ++++---- src/slic3r/GUI/WipeTowerDialog.cpp | 2 +- src/slic3r/Utils/CalibUtils.cpp | 16 ++++++++-------- 14 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index e0e19567f7..e3e0a5e3c8 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -1591,7 +1591,7 @@ int CLI::run(int argc, char **argv) current_process_name = config.option("print_settings_id")->value; current_printer_model = config.option("printer_model", true)->value; current_filaments_name = config.option("filament_settings_id")->values; - current_extruder_count = config.option("nozzle_diameter")->values.size(); + current_extruder_count = config.option("nozzle_diameter")->values.size(); current_printer_variant_count = config.option("printer_extruder_variant", true)->values.size(); current_print_variant_count = config.option("print_extruder_variant", true)->values.size(); current_is_multi_extruder = current_extruder_count > 1; @@ -2834,8 +2834,8 @@ int CLI::run(int argc, char **argv) flush_and_exit(ret); } } - if (m_print_config.option("nozzle_diameter")) { - new_extruder_count = m_print_config.option("nozzle_diameter")->values.size(); + if (m_print_config.option("nozzle_diameter")) { + new_extruder_count = m_print_config.option("nozzle_diameter")->values.size(); new_is_multi_extruder = new_extruder_count > 1; new_printer_extruder_variants = m_print_config.option("printer_extruder_variant", true)->values; new_printer_variant_count = new_printer_extruder_variants.size(); diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index f2b6cf1804..20bf8be8c6 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -7899,7 +7899,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) add_vector(stream, nozzle_volume_types); stream << "\"/>\n"; - auto* nozzle_diameter_option = dynamic_cast(config.option("nozzle_diameter")); + auto* nozzle_diameter_option = dynamic_cast(config.option("nozzle_diameter")); std::string nozzle_diameters_str; if (nozzle_diameter_option) nozzle_diameters_str = nozzle_diameter_option->serialize(); diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index f176095dd9..8848f55e1a 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -86,7 +86,7 @@ DynamicPrintConfig PresetBundle::construct_full_config( filament_maps.resize(num_filaments, 1); } - auto *extruder_diameter = dynamic_cast(out.option("nozzle_diameter")); + auto *extruder_diameter = dynamic_cast(out.option("nozzle_diameter")); // Collect the "compatible_printers_condition" and "inherits" values over all presets (print, filaments, printers) into a single vector. std::vector compatible_printers_condition; std::vector compatible_prints_condition; diff --git a/src/libslic3r/PrintApply.cpp b/src/libslic3r/PrintApply.cpp index c7fb3bf0fa..a25a452718 100644 --- a/src/libslic3r/PrintApply.cpp +++ b/src/libslic3r/PrintApply.cpp @@ -1556,7 +1556,7 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_ // The PrintObject already exists and the copies differ. PrintBase::ApplyStatus status = (*it_old)->print_object->set_instances(std::move(new_instances.instances)); if (status != PrintBase::APPLY_STATUS_UNCHANGED) { - size_t extruder_num = new_full_config.option("nozzle_diameter")->size(); + size_t extruder_num = new_full_config.option("nozzle_diameter")->size(); update_apply_status(status == PrintBase::APPLY_STATUS_INVALIDATED); } print_objects_new.emplace_back((*it_old)->print_object); diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index f7b7194c63..c0a2c918c6 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -980,7 +980,7 @@ void AmsMapingPopup::update_ams_data_multi_machines() void AmsMapingPopup::update_title(MachineObject* obj) { const auto& full_config = wxGetApp().preset_bundle->full_config(); - size_t nozzle_nums = full_config.option("nozzle_diameter")->values.size(); + size_t nozzle_nums = full_config.option("nozzle_diameter")->values.size(); if (nozzle_nums > 1) { if (m_show_type == ShowType::LEFT) diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index 57305148e9..65d3fe0bf3 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -2878,7 +2878,7 @@ wxWindow *CreatePrinterPresetDialog::create_page2_dialog_buttons(wxWindow *paren if (printer_variant) printer_variant->value = printer_nozzle_name; - auto nozzle_diameter = dynamic_cast(m_printer_preset->config.option("nozzle_diameter", true)); + auto nozzle_diameter = dynamic_cast(m_printer_preset->config.option("nozzle_diameter", true)); if (nozzle_diameter) { std::unordered_map::const_iterator iter = nozzle_diameter_map.find(printer_nozzle_name); if (nozzle_diameter_map.end() != iter) { @@ -2935,7 +2935,7 @@ bool CreatePrinterPresetDialog::data_init() if (iter != m_printer_name_to_preset.end()) { std::shared_ptr printer_preset = iter->second; if (printer_preset) { - auto nozzle_diameter = dynamic_cast(printer_preset->config.option("nozzle_diameter", true)); + auto nozzle_diameter = dynamic_cast(printer_preset->config.option("nozzle_diameter", true)); return nozzle_diameter->values.size(); } } @@ -3048,7 +3048,7 @@ wxArrayString CreatePrinterPresetDialog::printer_preset_sort_with_nozzle_diamete if (iter != m_printer_name_to_preset.end()) { std::shared_ptr printer_preset = iter->second; if (printer_preset) { - auto nozzle_diameter = dynamic_cast(printer_preset->config.option("nozzle_diameter", true)); + auto nozzle_diameter = dynamic_cast(printer_preset->config.option("nozzle_diameter", true)); return nozzle_diameter->values.size(); } } diff --git a/src/slic3r/GUI/FilamentGroupPopup.cpp b/src/slic3r/GUI/FilamentGroupPopup.cpp index a5dac6e88a..5bdf379cfb 100644 --- a/src/slic3r/GUI/FilamentGroupPopup.cpp +++ b/src/slic3r/GUI/FilamentGroupPopup.cpp @@ -18,7 +18,7 @@ static bool should_pop_up() { const auto &preset_bundle = wxGetApp().preset_bundle; const auto &full_config = preset_bundle->full_config(); - const auto nozzle_diameters = full_config.option("nozzle_diameter"); + const auto nozzle_diameters = full_config.option("nozzle_diameter"); return nozzle_diameters->size() > 1; } diff --git a/src/slic3r/GUI/FilamentMapDialog.cpp b/src/slic3r/GUI/FilamentMapDialog.cpp index 360b22e6ff..3406255a86 100644 --- a/src/slic3r/GUI/FilamentMapDialog.cpp +++ b/src/slic3r/GUI/FilamentMapDialog.cpp @@ -41,7 +41,7 @@ extern std::string& get_right_extruder_unprintable_text(); bool try_pop_up_before_slice(bool is_slice_all, Plater* plater_ref, PartPlate* partplate_ref, bool force_pop_up) { auto full_config = wxGetApp().preset_bundle->full_config(); - const auto nozzle_diameters = full_config.option("nozzle_diameter"); + const auto nozzle_diameters = full_config.option("nozzle_diameter"); if (nozzle_diameters->size() <= 1) return true; diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 99adf6c30b..c092c93c09 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1867,7 +1867,7 @@ bool PartPlate::check_mixture_filament_compatible(const DynamicPrintConfig &conf bool PartPlate::check_compatible_of_nozzle_and_filament(const DynamicPrintConfig &config, const std::vector &filament_presets, std::string &error_msg) { - float nozzle_diameter = config.option("nozzle_diameter")->values[0]; + float nozzle_diameter = config.option("nozzle_diameter")->values[0]; auto volume_type_opt = config.option("nozzle_volume_type"); auto get_filament_alias = [](std::string preset_name) -> std::string { diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index f26abc0353..63e07fdf90 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -6230,7 +6230,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ double preset_nozzle_diameter = 0.4; const ConfigOption *opt = printer_preset.config.option("nozzle_diameter"); - if (opt) preset_nozzle_diameter = static_cast(opt)->values[0]; + if (opt) preset_nozzle_diameter = static_cast(opt)->values[0]; float machine_nozzle_diameter = obj->GetExtderSystem()->GetNozzleDiameter(0); std::string machine_type = obj->printer_type; @@ -8555,7 +8555,7 @@ void Plater::priv::on_select_preset(wxCommandEvent &evt) PresetBundle *preset_bundle = wxGetApp().preset_bundle; Preset& cur_preset = preset_bundle->printers.get_edited_preset(); if (cur_preset.get_printer_type(preset_bundle) == obj->get_show_printer_type()) { - double preset_nozzle_diameter = cur_preset.config.option("nozzle_diameter")->values[0]; + double preset_nozzle_diameter = cur_preset.config.option("nozzle_diameter")->values[0]; bool same_nozzle_diameter = true; const auto& extruders = obj->GetExtderSystem()->GetExtruders(); @@ -15408,8 +15408,8 @@ void Plater::on_config_change(const DynamicPrintConfig &config) t_config_option_keys diff_keys = p->config->diff(config); size_t old_nozzle_size = 1, new_nozzle_size = 1; - auto * opt_old = p->config->option("nozzle_diameter"); - auto * opt_new = config.option("nozzle_diameter"); + auto * opt_old = p->config->option("nozzle_diameter"); + auto * opt_new = config.option("nozzle_diameter"); if (opt_old && opt_new) { old_nozzle_size = opt_old->values.size(); new_nozzle_size = opt_new->values.size(); diff --git a/src/slic3r/GUI/SyncAmsInfoDialog.cpp b/src/slic3r/GUI/SyncAmsInfoDialog.cpp index 92c10542d0..08d1baa622 100644 --- a/src/slic3r/GUI/SyncAmsInfoDialog.cpp +++ b/src/slic3r/GUI/SyncAmsInfoDialog.cpp @@ -221,7 +221,7 @@ void SyncAmsInfoDialog::deal_ok() bool SyncAmsInfoDialog::get_is_double_extruder() { const auto &full_config = wxGetApp().preset_bundle->full_config(); - size_t nozzle_nums = full_config.option("nozzle_diameter")->values.size(); + size_t nozzle_nums = full_config.option("nozzle_diameter")->values.size(); bool use_double_extruder = nozzle_nums > 1 ? true : false; return use_double_extruder; } @@ -1226,7 +1226,7 @@ bool SyncAmsInfoDialog::do_ams_mapping(MachineObject *obj_) const auto &full_config = wxGetApp().preset_bundle->full_config(); const auto &project_config = wxGetApp().preset_bundle->project_config; - size_t nozzle_nums = full_config.option("nozzle_diameter")->values.size(); + size_t nozzle_nums = full_config.option("nozzle_diameter")->values.size(); m_filaments_map = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_real_filament_maps(project_config); int filament_result = 0; @@ -1415,7 +1415,7 @@ bool SyncAmsInfoDialog::build_nozzles_info(std::string &nozzles_info) PresetBundle *preset_bundle = wxGetApp().preset_bundle; if (!preset_bundle) return false; - auto opt_nozzle_diameters = preset_bundle->printers.get_edited_preset().config.option("nozzle_diameter"); + auto opt_nozzle_diameters = preset_bundle->printers.get_edited_preset().config.option("nozzle_diameter"); if (opt_nozzle_diameters == nullptr) { BOOST_LOG_TRIVIAL(error) << "build_nozzles_info, opt_nozzle_diameters is nullptr"; return false; @@ -1907,7 +1907,7 @@ bool SyncAmsInfoDialog::is_same_nozzle_diameters(NozzleType &tag_nozzle_type, fl try { PresetBundle *preset_bundle = wxGetApp().preset_bundle; - auto opt_nozzle_diameters = preset_bundle->printers.get_edited_preset().config.option("nozzle_diameter"); + auto opt_nozzle_diameters = preset_bundle->printers.get_edited_preset().config.option("nozzle_diameter"); const ConfigOptionEnumsGenericNullable *nozzle_type = preset_bundle->printers.get_edited_preset().config.option("nozzle_type"); std::vector preset_nozzle_types(nozzle_type->size()); @@ -2379,7 +2379,7 @@ void SyncAmsInfoDialog::update_show_status() if (m_ams_mapping_result.empty()) { do_ams_mapping(obj_); } const auto &full_config = wxGetApp().preset_bundle->full_config(); - size_t nozzle_nums = full_config.option("nozzle_diameter")->values.size(); + size_t nozzle_nums = full_config.option("nozzle_diameter")->values.size(); // the nozzle type of preset and machine are different if (nozzle_nums > 1) { @@ -2730,7 +2730,7 @@ void SyncAmsInfoDialog::reset_and_sync_ams_list() if (!dev_manager) return; MachineObject *obj_ = dev_manager->get_selected_machine(); const auto & full_config = wxGetApp().preset_bundle->full_config(); - size_t nozzle_nums = full_config.option("nozzle_diameter")->values.size(); + size_t nozzle_nums = full_config.option("nozzle_diameter")->values.size(); if (nozzle_nums > 1) { m_mapping_popup.set_show_type(ShowType::LEFT_AND_RIGHT);//special } diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 5688f29878..a4890ea1d3 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1908,23 +1908,23 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) if (m_preset_bundle->get_printer_extruder_count() > 1){ int extruder_idx = std::atoi(opt_key.substr(opt_key.find_last_of('#') + 1).c_str()); if (opt_key.find("min_layer_height") != std::string::npos) { - auto min_layer_height_from_nozzle = m_preset_bundle->full_config().option("min_layer_height")->values; + auto min_layer_height_from_nozzle = m_preset_bundle->full_config().option("min_layer_height")->values; if (extruder_idx < min_layer_height_from_nozzle.size()) { double value = min_layer_height_from_nozzle[extruder_idx]; std::fill(min_layer_height_from_nozzle.begin(), min_layer_height_from_nozzle.end(), value); } auto new_conf = *m_config; - new_conf.set_key_value("min_layer_height", new ConfigOptionFloatsNullable(min_layer_height_from_nozzle)); + new_conf.set_key_value("min_layer_height", new ConfigOptionFloats(min_layer_height_from_nozzle)); m_config_manipulation.apply(m_config, &new_conf); } else if (opt_key.find("max_layer_height") != std::string::npos) { - auto max_layer_height_from_nozzle = m_preset_bundle->full_config().option("max_layer_height")->values; + auto max_layer_height_from_nozzle = m_preset_bundle->full_config().option("max_layer_height")->values; if (extruder_idx < max_layer_height_from_nozzle.size()) { double value = max_layer_height_from_nozzle[extruder_idx]; std::fill(max_layer_height_from_nozzle.begin(), max_layer_height_from_nozzle.end(), value); } auto new_conf = *m_config; - new_conf.set_key_value("max_layer_height", new ConfigOptionFloatsNullable(max_layer_height_from_nozzle)); + new_conf.set_key_value("max_layer_height", new ConfigOptionFloats(max_layer_height_from_nozzle)); m_config_manipulation.apply(m_config, &new_conf); } } diff --git a/src/slic3r/GUI/WipeTowerDialog.cpp b/src/slic3r/GUI/WipeTowerDialog.cpp index 675c2bb007..52b7a416f5 100644 --- a/src/slic3r/GUI/WipeTowerDialog.cpp +++ b/src/slic3r/GUI/WipeTowerDialog.cpp @@ -212,7 +212,7 @@ wxString WipingDialog::BuildTableObjStr() auto full_config = wxGetApp().preset_bundle->full_config(); auto filament_colors = full_config.option("filament_colour")->values; auto flush_multiplier = full_config.option("flush_multiplier")->values; - int nozzle_num = full_config.option("nozzle_diameter")->values.size(); + int nozzle_num = full_config.option("nozzle_diameter")->values.size(); auto raw_matrix_data = full_config.option("flush_volumes_matrix")->values; auto nozzle_flush_dataset = full_config.option("nozzle_flush_dataset")->values; diff --git a/src/slic3r/Utils/CalibUtils.cpp b/src/slic3r/Utils/CalibUtils.cpp index 423b748ffd..e7459d5e84 100644 --- a/src/slic3r/Utils/CalibUtils.cpp +++ b/src/slic3r/Utils/CalibUtils.cpp @@ -273,7 +273,7 @@ static bool check_nozzle_diameter_and_type(const DynamicPrintConfig &full_config static void init_multi_extruder_params_for_cali(DynamicPrintConfig& config, const CalibInfo& calib_info) { int extruder_count = 1; - auto nozzle_diameters_opt = dynamic_cast(config.option("nozzle_diameter")); + auto nozzle_diameters_opt = dynamic_cast(config.option("nozzle_diameter")); if (nozzle_diameters_opt != nullptr) { extruder_count = (int)(nozzle_diameters_opt->size()); } @@ -761,7 +761,7 @@ void CalibUtils::calib_pa_pattern(const CalibInfo &calib_info, Model& model) int index = get_index_for_extruder_parameter(print_config, "outer_wall_speed", calib_info.extruder_id, calib_info.extruder_type, calib_info.nozzle_volume_type); float wall_speed = CalibPressureAdvance::find_optimal_PA_speed(full_config, print_config.get_abs_value("line_width"), print_config.get_abs_value("layer_height"), calib_info.extruder_id, 0); - ConfigOptionFloatsNullable *wall_speed_speed_opt = print_config.option("outer_wall_speed"); + ConfigOptionFloats *wall_speed_speed_opt = print_config.option("outer_wall_speed"); wall_speed_speed_opt->values[index] = wall_speed; for (const auto& opt : SuggestedConfigCalibPAPattern().nozzle_ratio_pairs) { @@ -800,8 +800,8 @@ void CalibUtils::set_for_auto_pa_model_and_config(const std::vector & { DynamicPrintConfig print_config = calib_infos[0].print_prest->config; - float nozzle_diameter = full_config.option("nozzle_diameter")->get_at(0); - int extruder_count = full_config.option("nozzle_diameter")->values.size(); + float nozzle_diameter = full_config.option("nozzle_diameter")->get_at(0); + int extruder_count = full_config.option("nozzle_diameter")->values.size(); for (const auto opt : SuggestedConfigCalibPAPattern().float_pairs) { print_config.set_key_value(opt.first, new ConfigOptionFloat(opt.second)); } @@ -815,11 +815,11 @@ void CalibUtils::set_for_auto_pa_model_and_config(const std::vector & float wall_speed = CalibPressureAdvance::find_optimal_PA_speed(full_config, print_config.get_abs_value("line_width"), print_config.get_abs_value("layer_height"), calib_info.extruder_id, 0); - ConfigOptionFloatsNullable *wall_speed_speed_opt = print_config.option("outer_wall_speed"); + ConfigOptionFloats *wall_speed_speed_opt = print_config.option("outer_wall_speed"); std::vector new_speeds = wall_speed_speed_opt->values; new_speeds[index] = wall_speed; ModelObject* object = model.objects[calib_info.index]; - object->config.set_key_value("outer_wall_speed", new ConfigOptionFloatsNullable(new_speeds)); + object->config.set_key_value("outer_wall_speed", new ConfigOptionFloats(new_speeds)); } for (const auto opt : SuggestedConfigCalibPAPattern().nozzle_ratio_pairs) { @@ -983,7 +983,7 @@ bool CalibUtils::calib_generic_auto_pa_cali(const std::vector &calib_ else if (params.mode == CalibMode::Calib_Auto_PA_Line) js["cali_type"] = "cali_auto_pa_line"; - const ConfigOptionFloatsNullable *nozzle_diameter_config = printer_config.option("nozzle_diameter"); + const ConfigOptionFloats *nozzle_diameter_config = printer_config.option("nozzle_diameter"); assert(nozzle_diameter_config->values.size() > 0); float nozzle_diameter = nozzle_diameter_config->values[0]; @@ -1484,7 +1484,7 @@ bool CalibUtils::check_printable_status_before_cali(const MachineObject* obj, co return false; } - const ConfigOptionFloatsNullable *nozzle_diameter_config = cali_info.printer_prest->config.option("nozzle_diameter"); + const ConfigOptionFloats *nozzle_diameter_config = cali_info.printer_prest->config.option("nozzle_diameter"); float nozzle_diameter = nozzle_diameter_config->values[0]; float diameter = obj->GetExtderSystem()->GetNozzleDiameter(cali_info.extruder_id);