Fix option nullable

This commit is contained in:
Noisyfox 2025-10-10 16:57:16 +08:00
parent dd08cca05e
commit 56d8bd8fbe
14 changed files with 36 additions and 36 deletions

View file

@ -1591,7 +1591,7 @@ int CLI::run(int argc, char **argv)
current_process_name = config.option<ConfigOptionString>("print_settings_id")->value;
current_printer_model = config.option<ConfigOptionString>("printer_model", true)->value;
current_filaments_name = config.option<ConfigOptionStrings>("filament_settings_id")->values;
current_extruder_count = config.option<ConfigOptionFloatsNullable>("nozzle_diameter")->values.size();
current_extruder_count = config.option<ConfigOptionFloats>("nozzle_diameter")->values.size();
current_printer_variant_count = config.option<ConfigOptionStrings>("printer_extruder_variant", true)->values.size();
current_print_variant_count = config.option<ConfigOptionStrings>("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<ConfigOptionFloatsNullable>("nozzle_diameter")) {
new_extruder_count = m_print_config.option<ConfigOptionFloatsNullable>("nozzle_diameter")->values.size();
if (m_print_config.option<ConfigOptionFloats>("nozzle_diameter")) {
new_extruder_count = m_print_config.option<ConfigOptionFloats>("nozzle_diameter")->values.size();
new_is_multi_extruder = new_extruder_count > 1;
new_printer_extruder_variants = m_print_config.option<ConfigOptionStrings>("printer_extruder_variant", true)->values;
new_printer_variant_count = new_printer_extruder_variants.size();

View file

@ -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<const ConfigOptionFloatsNullable*>(config.option("nozzle_diameter"));
auto* nozzle_diameter_option = dynamic_cast<const ConfigOptionFloats*>(config.option("nozzle_diameter"));
std::string nozzle_diameters_str;
if (nozzle_diameter_option)
nozzle_diameters_str = nozzle_diameter_option->serialize();

View file

@ -86,7 +86,7 @@ DynamicPrintConfig PresetBundle::construct_full_config(
filament_maps.resize(num_filaments, 1);
}
auto *extruder_diameter = dynamic_cast<const ConfigOptionFloatsNullable *>(out.option("nozzle_diameter"));
auto *extruder_diameter = dynamic_cast<const ConfigOptionFloats *>(out.option("nozzle_diameter"));
// Collect the "compatible_printers_condition" and "inherits" values over all presets (print, filaments, printers) into a single vector.
std::vector<std::string> compatible_printers_condition;
std::vector<std::string> compatible_prints_condition;

View file

@ -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<ConfigOptionFloatsNullable>("nozzle_diameter")->size();
size_t extruder_num = new_full_config.option<ConfigOptionFloats>("nozzle_diameter")->size();
update_apply_status(status == PrintBase::APPLY_STATUS_INVALIDATED);
}
print_objects_new.emplace_back((*it_old)->print_object);

View file

@ -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<ConfigOptionFloatsNullable>("nozzle_diameter")->values.size();
size_t nozzle_nums = full_config.option<ConfigOptionFloats>("nozzle_diameter")->values.size();
if (nozzle_nums > 1)
{
if (m_show_type == ShowType::LEFT)

View file

@ -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<ConfigOptionFloatsNullable *>(m_printer_preset->config.option("nozzle_diameter", true));
auto nozzle_diameter = dynamic_cast<ConfigOptionFloats *>(m_printer_preset->config.option("nozzle_diameter", true));
if (nozzle_diameter) {
std::unordered_map<std::string, float>::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<Preset> printer_preset = iter->second;
if (printer_preset) {
auto nozzle_diameter = dynamic_cast<ConfigOptionFloatsNullable *>(printer_preset->config.option("nozzle_diameter", true));
auto nozzle_diameter = dynamic_cast<ConfigOptionFloats *>(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<Preset> printer_preset = iter->second;
if (printer_preset) {
auto nozzle_diameter = dynamic_cast<ConfigOptionFloatsNullable *>(printer_preset->config.option("nozzle_diameter", true));
auto nozzle_diameter = dynamic_cast<ConfigOptionFloats *>(printer_preset->config.option("nozzle_diameter", true));
return nozzle_diameter->values.size();
}
}

View file

@ -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<ConfigOptionFloatsNullable>("nozzle_diameter");
const auto nozzle_diameters = full_config.option<ConfigOptionFloats>("nozzle_diameter");
return nozzle_diameters->size() > 1;
}

View file

@ -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<ConfigOptionFloatsNullable>("nozzle_diameter");
const auto nozzle_diameters = full_config.option<ConfigOptionFloats>("nozzle_diameter");
if (nozzle_diameters->size() <= 1)
return true;

View file

@ -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<std::string> &filament_presets, std::string &error_msg)
{
float nozzle_diameter = config.option<ConfigOptionFloatsNullable>("nozzle_diameter")->values[0];
float nozzle_diameter = config.option<ConfigOptionFloats>("nozzle_diameter")->values[0];
auto volume_type_opt = config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type");
auto get_filament_alias = [](std::string preset_name) -> std::string {

View file

@ -6230,7 +6230,7 @@ std::vector<size_t> Plater::priv::load_files(const std::vector<fs::path>& input_
double preset_nozzle_diameter = 0.4;
const ConfigOption *opt = printer_preset.config.option("nozzle_diameter");
if (opt) preset_nozzle_diameter = static_cast<const ConfigOptionFloatsNullable *>(opt)->values[0];
if (opt) preset_nozzle_diameter = static_cast<const ConfigOptionFloats *>(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<ConfigOptionFloatsNullable>("nozzle_diameter")->values[0];
double preset_nozzle_diameter = cur_preset.config.option<ConfigOptionFloats>("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<ConfigOptionFloatsNullable>("nozzle_diameter");
auto * opt_new = config.option<ConfigOptionFloatsNullable>("nozzle_diameter");
auto * opt_old = p->config->option<ConfigOptionFloats>("nozzle_diameter");
auto * opt_new = config.option<ConfigOptionFloats>("nozzle_diameter");
if (opt_old && opt_new) {
old_nozzle_size = opt_old->values.size();
new_nozzle_size = opt_new->values.size();

View file

@ -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<ConfigOptionFloatsNullable>("nozzle_diameter")->values.size();
size_t nozzle_nums = full_config.option<ConfigOptionFloats>("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<ConfigOptionFloatsNullable>("nozzle_diameter")->values.size();
size_t nozzle_nums = full_config.option<ConfigOptionFloats>("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<ConfigOptionFloatsNullable>("nozzle_diameter");
auto opt_nozzle_diameters = preset_bundle->printers.get_edited_preset().config.option<ConfigOptionFloats>("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<ConfigOptionFloatsNullable>("nozzle_diameter");
auto opt_nozzle_diameters = preset_bundle->printers.get_edited_preset().config.option<ConfigOptionFloats>("nozzle_diameter");
const ConfigOptionEnumsGenericNullable *nozzle_type = preset_bundle->printers.get_edited_preset().config.option<ConfigOptionEnumsGenericNullable>("nozzle_type");
std::vector<std::string> 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<ConfigOptionFloatsNullable>("nozzle_diameter")->values.size();
size_t nozzle_nums = full_config.option<ConfigOptionFloats>("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<ConfigOptionFloatsNullable>("nozzle_diameter")->values.size();
size_t nozzle_nums = full_config.option<ConfigOptionFloats>("nozzle_diameter")->values.size();
if (nozzle_nums > 1) {
m_mapping_popup.set_show_type(ShowType::LEFT_AND_RIGHT);//special
}

View file

@ -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<ConfigOptionFloatsNullable>("min_layer_height")->values;
auto min_layer_height_from_nozzle = m_preset_bundle->full_config().option<ConfigOptionFloats>("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<ConfigOptionFloatsNullable>("max_layer_height")->values;
auto max_layer_height_from_nozzle = m_preset_bundle->full_config().option<ConfigOptionFloats>("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);
}
}

View file

@ -212,7 +212,7 @@ wxString WipingDialog::BuildTableObjStr()
auto full_config = wxGetApp().preset_bundle->full_config();
auto filament_colors = full_config.option<ConfigOptionStrings>("filament_colour")->values;
auto flush_multiplier = full_config.option<ConfigOptionFloats>("flush_multiplier")->values;
int nozzle_num = full_config.option<ConfigOptionFloatsNullable>("nozzle_diameter")->values.size();
int nozzle_num = full_config.option<ConfigOptionFloats>("nozzle_diameter")->values.size();
auto raw_matrix_data = full_config.option<ConfigOptionFloats>("flush_volumes_matrix")->values;
auto nozzle_flush_dataset = full_config.option<ConfigOptionIntsNullable>("nozzle_flush_dataset")->values;

View file

@ -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<const ConfigOptionFloatsNullable*>(config.option("nozzle_diameter"));
auto nozzle_diameters_opt = dynamic_cast<const ConfigOptionFloats*>(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<ConfigOptionFloatsNullable>("outer_wall_speed");
ConfigOptionFloats *wall_speed_speed_opt = print_config.option<ConfigOptionFloats>("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<CalibInfo> &
{
DynamicPrintConfig print_config = calib_infos[0].print_prest->config;
float nozzle_diameter = full_config.option<ConfigOptionFloatsNullable>("nozzle_diameter")->get_at(0);
int extruder_count = full_config.option<ConfigOptionFloatsNullable>("nozzle_diameter")->values.size();
float nozzle_diameter = full_config.option<ConfigOptionFloats>("nozzle_diameter")->get_at(0);
int extruder_count = full_config.option<ConfigOptionFloats>("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<CalibInfo> &
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<ConfigOptionFloatsNullable>("outer_wall_speed");
ConfigOptionFloats *wall_speed_speed_opt = print_config.option<ConfigOptionFloats>("outer_wall_speed");
std::vector<double> 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<CalibInfo> &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<ConfigOptionFloatsNullable>("nozzle_diameter");
const ConfigOptionFloats *nozzle_diameter_config = printer_config.option<ConfigOptionFloats>("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<ConfigOptionFloatsNullable>("nozzle_diameter");
const ConfigOptionFloats *nozzle_diameter_config = cali_info.printer_prest->config.option<ConfigOptionFloats>("nozzle_diameter");
float nozzle_diameter = nozzle_diameter_config->values[0];
float diameter = obj->GetExtderSystem()->GetNozzleDiameter(cali_info.extruder_id);