From 33440082e616e21e6550874ce6a50ab9a71dc793 Mon Sep 17 00:00:00 2001 From: "xin.zhang" Date: Wed, 1 Jan 2025 16:03:06 +0800 Subject: [PATCH] FIX: wrong check while send print jira: [STUDIO-9489] Change-Id: I7ad5cc2a55cd9b55de3d98ad7bd30150b1f448af (cherry picked from commit 1e712f19c97837ccda9d5b381f0668488036131e) --- src/slic3r/GUI/PartPlate.cpp | 22 +++++++++++++++++----- src/slic3r/GUI/PartPlate.hpp | 3 ++- src/slic3r/GUI/SelectMachine.cpp | 22 ++++++++++------------ src/slic3r/GUI/SendMultiMachinePage.cpp | 2 +- 4 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 9b05eba4af..b3848420ed 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1679,16 +1679,28 @@ std::vector PartPlate::get_extruders_without_support(bool conside_custom_gc return plate_extruders; } -std::vector PartPlate::get_used_extruders() +/* -1 is invalid, return extruder 0 or 1*/ +int PartPlate::get_used_nozzle_by_filament_id(int idx) const { - std::vector used_extruders; - if (check_objects_empty_and_gcode3mf(used_extruders)) { - return used_extruders; + const std::vector& filament_map = get_filament_maps(); + if (filament_map.size() < idx) + { + return -1; + } + + return filament_map[idx - 1] - 1; +} + +std::vector PartPlate::get_used_filaments() +{ + std::vector used_filaments; + if (check_objects_empty_and_gcode3mf(used_filaments)) { + return used_filaments; } GCodeProcessorResult* result = get_slice_result(); if (!result) - return used_extruders; + return used_filaments; std::set used_extruders_set; PrintEstimatedStatistics& ps = result->print_statistics; diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index e33e0b5b25..3c57eda02c 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -325,7 +325,8 @@ public: std::vector get_extruders_under_cli(bool conside_custom_gcode, DynamicPrintConfig& full_config) const; std::vector get_extruders_without_support(bool conside_custom_gcode = false) const; // get used filaments, 1 based idx - std::vector get_used_extruders(); + std::vector get_used_filaments(); + int get_used_nozzle_by_filament_id(int idx) const; bool check_tpu_printable_status(const DynamicPrintConfig & config, const std::vector &tpu_filaments); /* instance related operations*/ diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 79999b2cea..d44cedc2b2 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1504,7 +1504,7 @@ bool SelectMachineDialog::is_nozzle_type_match(ExtderData data) { const auto& project_config = wxGetApp().preset_bundle->project_config; //check nozzle used - auto used_filaments = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_used_extruders(); // 1 based + auto used_filaments = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_used_filaments(); // 1 based auto filament_maps = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_real_filament_maps(project_config); // 1 based std::map used_extruders_flow; std::vector used_extruders; // 0 based @@ -1980,21 +1980,19 @@ bool SelectMachineDialog::is_same_nozzle_diameters(float& tag_nozzle_diameter) c try { - auto used_extruder_idxs = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_used_extruders();/*the index is started from 1*/ - for (int extruder_idx : used_extruder_idxs) + PartPlate* cur_plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); + auto used_filament_idxs = cur_plate->get_used_filaments();/*the index is started from 1*/ + for (int used_filament_idx : used_filament_idxs) { - if (opt_nozzle_diameters->size() < extruder_idx) + int used_nozzle_idx = cur_plate->get_used_nozzle_by_filament_id(used_filament_idx); + if (used_nozzle_idx == -1) { + assert(0); return false; } - tag_nozzle_diameter = float(opt_nozzle_diameters->get_at(extruder_idx)); - if (obj_->m_extder_data.extders.size() < extruder_idx) - { - return false; - } - - if (tag_nozzle_diameter != obj_->m_extder_data.extders[extruder_idx - 1].current_nozzle_diameter) + tag_nozzle_diameter = float(opt_nozzle_diameters->get_at(used_nozzle_idx)); + if (tag_nozzle_diameter != obj_->m_extder_data.extders[used_nozzle_idx].current_nozzle_diameter) { return false; } @@ -3696,7 +3694,7 @@ void SelectMachineDialog::reset_and_sync_ams_list() } } - auto extruders = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_used_extruders(); + auto extruders = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_used_filaments(); BitmapCache bmcache; MaterialHash::iterator iter = m_materialList.begin(); while (iter != m_materialList.end()) { diff --git a/src/slic3r/GUI/SendMultiMachinePage.cpp b/src/slic3r/GUI/SendMultiMachinePage.cpp index d6a7deef82..737a75b595 100644 --- a/src/slic3r/GUI/SendMultiMachinePage.cpp +++ b/src/slic3r/GUI/SendMultiMachinePage.cpp @@ -1377,7 +1377,7 @@ void SendMultiMachinePage::sync_ams_list() } } - auto extruders = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_used_extruders(); + auto extruders = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_used_filaments(); BitmapCache bmcache; MaterialHash::iterator iter = m_material_list.begin(); while (iter != m_material_list.end()) {