From 8c7cc6972fab58770b9e090e1b473f2745666c2c Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sat, 9 May 2026 13:15:17 +0800 Subject: [PATCH] FIX: context: fix the .gcode.3mf not shown issue (#13360) filament_self_index difference caused JIRA: no-jira Change-Id: Ia70fe8a8095b8067fe13bbfc9e5c39d9f3ee05d3 (cherry picked from commit 3a55a3a1eef94f577376cd697c3b72cb46967672) Co-authored-by: lane.wei --- src/libslic3r/Print.hpp | 2 +- src/libslic3r/PrintApply.cpp | 26 +++++++++++++++++++------- src/libslic3r/PrintBase.hpp | 2 +- src/libslic3r/SLAPrint.cpp | 2 +- src/libslic3r/SLAPrint.hpp | 2 +- src/slic3r/GUI/PartPlate.cpp | 7 ++++--- 6 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index eeb74a87ed..144698faa0 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -905,7 +905,7 @@ public: // List of existing PrintObject IDs, to remove notifications for non-existent IDs. std::vector print_object_ids() const override; - ApplyStatus apply(const Model &model, DynamicPrintConfig config) override; + ApplyStatus apply(const Model &model, DynamicPrintConfig config, bool extruder_applied = false) override; void process(long long *time_cost_with_cache = nullptr, bool use_cache = false) override; // Exports G-code into a file name based on the path_template, returns the file path of the generated G-code file. diff --git a/src/libslic3r/PrintApply.cpp b/src/libslic3r/PrintApply.cpp index ac2d56780f..c9b500a85c 100644 --- a/src/libslic3r/PrintApply.cpp +++ b/src/libslic3r/PrintApply.cpp @@ -1104,7 +1104,7 @@ static PrintObjectRegions* generate_print_object_regions( return out.release(); } -Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_config) +Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_config, bool extruder_applied) { #ifdef _DEBUG check_model_ids_validity(model); @@ -1156,13 +1156,25 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_ } //apply extruder related values - new_full_config.update_values_to_printer_extruders(new_full_config, printer_options_with_variant_1, "printer_extruder_id", "printer_extruder_variant"); - new_full_config.update_values_to_printer_extruders(new_full_config, printer_options_with_variant_2, "printer_extruder_id", "printer_extruder_variant", 2); - //update print config related with variants - new_full_config.update_values_to_printer_extruders(new_full_config, print_options_with_variant, "print_extruder_id", "print_extruder_variant"); + if (!extruder_applied) { + new_full_config.update_values_to_printer_extruders(new_full_config, printer_options_with_variant_1, "printer_extruder_id", "printer_extruder_variant"); + new_full_config.update_values_to_printer_extruders(new_full_config, printer_options_with_variant_2, "printer_extruder_id", "printer_extruder_variant", 2); + //update print config related with variants + new_full_config.update_values_to_printer_extruders(new_full_config, print_options_with_variant, "print_extruder_id", "print_extruder_variant"); + + m_ori_full_print_config = new_full_config; + new_full_config.update_values_to_printer_extruders_for_multiple_filaments(new_full_config, filament_options_with_variant, "filament_self_index", "filament_extruder_variant"); + } + // else { + // int extruder_count; + // bool different_extruder = new_full_config.support_different_extruders(extruder_count); + // print_variant_index.resize(extruder_count); + // for (int e_index = 0; e_index < extruder_count; e_index++) + // { + // print_variant_index[e_index] = e_index; + // } + // } - m_ori_full_print_config = new_full_config; - new_full_config.update_values_to_printer_extruders_for_multiple_filaments(new_full_config, filament_options_with_variant, "filament_self_index", "filament_extruder_variant"); auto opt_filament_map = new_full_config.option("filament_map"); std::vector filament_maps = opt_filament_map ? opt_filament_map->values : std::vector(); diff --git a/src/libslic3r/PrintBase.hpp b/src/libslic3r/PrintBase.hpp index 21092ff257..4158c23065 100644 --- a/src/libslic3r/PrintBase.hpp +++ b/src/libslic3r/PrintBase.hpp @@ -407,7 +407,7 @@ public: // Some data was changed, which in turn invalidated already calculated steps. APPLY_STATUS_INVALIDATED, }; - virtual ApplyStatus apply(const Model &model, DynamicPrintConfig config) = 0; + virtual ApplyStatus apply(const Model &model, DynamicPrintConfig config, bool extruder_applied = false) = 0; const Model& model() const { return m_model; } struct TaskParams { diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index 569d22501e..ca07f8754e 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -184,7 +184,7 @@ std::vector SLAPrint::print_object_ids() const return out; } -SLAPrint::ApplyStatus SLAPrint::apply(const Model &model, DynamicPrintConfig config) +SLAPrint::ApplyStatus SLAPrint::apply(const Model &model, DynamicPrintConfig config, bool extruder_applied) { #ifdef _DEBUG check_model_ids_validity(model); diff --git a/src/libslic3r/SLAPrint.hpp b/src/libslic3r/SLAPrint.hpp index 887942c9cf..a8c49674fc 100644 --- a/src/libslic3r/SLAPrint.hpp +++ b/src/libslic3r/SLAPrint.hpp @@ -450,7 +450,7 @@ public: bool empty() const override { return m_objects.empty(); } // List of existing PrintObject IDs, to remove notifications for non-existent IDs. std::vector print_object_ids() const override; - ApplyStatus apply(const Model &model, DynamicPrintConfig config) override; + ApplyStatus apply(const Model &model, DynamicPrintConfig config, bool extruder_applied = false) override; void set_task(const TaskParams ¶ms) override; void process(long long *time_cost_with_cache = nullptr, bool use_cache = false) override; void finalize() override; diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 8a7d10711a..9c9b3baf8c 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -3414,12 +3414,13 @@ int PartPlate::load_gcode_from_file(const std::string& filename) int ret = 0; // process gcode - DynamicPrintConfig full_config = wxGetApp().preset_bundle->full_config(); + std::vector filament_maps = this->get_filament_maps(); + DynamicPrintConfig full_config = wxGetApp().preset_bundle->full_config(false, filament_maps); full_config.apply(m_config, true); - m_print->apply(*m_model, full_config); + m_print->apply(*m_model, full_config, false); //BBS: need to apply two times, for after the first apply, the m_print got its object, //which will affect the config when new_full_config.normalize_fdm(used_filaments); - m_print->apply(*m_model, full_config); + m_print->apply(*m_model, full_config, false); // BBS: use backup path to save temp gcode // auto path = get_tmp_gcode_path();