From d6a8f881de9ec125fe73fa2e5be27baebc0689b4 Mon Sep 17 00:00:00 2001 From: "xun.zhang" Date: Thu, 12 Jun 2025 10:48:39 +0800 Subject: [PATCH] FIX: add a new way to calc params size jira: NONE Signed-off-by: xun.zhang Change-Id: I75a983a8c2ec1d9e4b691e32e8beead0868d2644 (cherry picked from commit 55162b1f7d4f9e0abc3de961fda5085b66f73b2f) (cherry picked from commit c86da564e0cd4155b155b84debd7f0f0da1b20d4) --- src/libslic3r/PrintConfig.cpp | 44 ++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index dc988c97f1..48677c1d12 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -7789,27 +7789,29 @@ void handle_legacy_sla(DynamicPrintConfig &config) size_t DynamicPrintConfig::get_parameter_size(const std::string& param_name, size_t extruder_nums) { - if (extruder_nums > 1) { - size_t volume_type_size = 2; - auto nozzle_volume_type_opt = dynamic_cast(this->option("nozzle_volume_type")); - if (nozzle_volume_type_opt) { - volume_type_size = nozzle_volume_type_opt->values.size(); - } - if (printer_options_with_variant_1.count(param_name) > 0) { - return extruder_nums * volume_type_size; - } - else if (printer_options_with_variant_2.count(param_name) > 0) { - return extruder_nums * volume_type_size * 2; - } - else if (filament_options_with_variant.count(param_name) > 0) { - return extruder_nums * volume_type_size; - } - else if (print_options_with_variant.count(param_name) > 0) { - return extruder_nums * volume_type_size; - } - else { - return extruder_nums; - } + constexpr size_t default_param_length = 1; + size_t filament_variant_length = default_param_length; + size_t process_variant_length = default_param_length; + size_t machine_variant_length = default_param_length; + + if (this->has("filament_extruder_variant")) + filament_variant_length = this->option("filament_extruder_variant")->size(); + if (this->has("print_extruder_variant")) + process_variant_length = this->option("print_extruder_variant")->size(); + if (this->has("printer_extruder_variant")) + machine_variant_length = this->option("printer_extruder_variant")->size(); + + if (printer_options_with_variant_1.count(param_name) > 0) { + return machine_variant_length; + } + else if (printer_options_with_variant_2.count(param_name) > 0) { + return machine_variant_length * 2; + } + else if (filament_options_with_variant.count(param_name) > 0) { + return filament_variant_length; + } + else if (print_options_with_variant.count(param_name) > 0) { + return process_variant_length; } return extruder_nums; }