From 1e712f19c97837ccda9d5b381f0668488036131e 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 --- src/slic3r/GUI/PartPlate.cpp | 22 +++++++++++++++++----- src/slic3r/GUI/PartPlate.hpp | 3 ++- src/slic3r/GUI/SelectMachine.cpp | 24 +++++++++++------------- src/slic3r/GUI/SendMultiMachinePage.cpp | 2 +- 4 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 860286b84..79a2e31dc 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1259,16 +1259,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 a83634904..e0c6a9efb 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -309,7 +309,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 4a000ccbf..beb6efff6 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1510,7 +1510,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 @@ -1991,21 +1991,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; } @@ -2221,7 +2219,7 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) if (m_print_type == PrintFromType::FROM_NORMAL) { /*check nozzle diameter*/ - float nozzle_diameter; + float nozzle_diameter = 0; if (!is_same_nozzle_diameters(nozzle_diameter)) { has_slice_warnings = true; @@ -3700,7 +3698,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 6541e944f..5edc6bb5a 100644 --- a/src/slic3r/GUI/SendMultiMachinePage.cpp +++ b/src/slic3r/GUI/SendMultiMachinePage.cpp @@ -1382,7 +1382,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()) {