From 2034cadb562d2d4f39a84d0e7c72bc02a23a5f3e Mon Sep 17 00:00:00 2001 From: "xin.zhang" Date: Mon, 6 Jan 2025 22:02:21 +0800 Subject: [PATCH] FIX: the API return wrong extruder number; remove the assert jira: [STUDIO-9532] Change-Id: Ia91a1d277e35f17588de417aee68f418eceb0a11 --- src/slic3r/GUI/DeviceManager.cpp | 1 - src/slic3r/GUI/PartPlate.cpp | 19 +++++++++++++++---- src/slic3r/GUI/PartPlate.hpp | 2 +- src/slic3r/GUI/SelectMachine.cpp | 2 +- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 7cbee03e1..dc2b948f2 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -6216,7 +6216,6 @@ void MachineObject::check_ams_filament_valid() stream << std::fixed << std::setprecision(1) << diameter; std::string nozzle_diameter_str = stream.str(); if (m_nozzle_filament_data.find(nozzle_diameter_str) == m_nozzle_filament_data.end()) { - assert(false); continue; } auto &data = m_nozzle_filament_data[nozzle_diameter_str]; diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 79a2e31dc..46368f244 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1259,16 +1259,27 @@ std::vector PartPlate::get_extruders_without_support(bool conside_custom_gc return plate_extruders; } -/* -1 is invalid, return extruder 0 or 1*/ -int PartPlate::get_used_nozzle_by_filament_id(int idx) const +/* -1 is invalid, return physical extruder idx*/ +/* logical extruder: 1-left, 2-right*/ +/* physical extruder: 0-right, 1-left*/ +int PartPlate::get_physical_extruder_by_filament_id(const DynamicConfig& g_config, int idx) const { - const std::vector& filament_map = get_filament_maps(); + const std::vector& filament_map = get_real_filament_maps(g_config); if (filament_map.size() < idx) { return -1; } - return filament_map[idx - 1] - 1; + int logical_ext_idx = filament_map[idx - 1]; + switch (logical_ext_idx) + { + case 1: return 1; + case 2: return 0; + default: break; + } + + assert(0); + return -1; } std::vector PartPlate::get_used_filaments() diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index e0c6a9efb..441d4828f 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -310,7 +310,7 @@ public: std::vector get_extruders_without_support(bool conside_custom_gcode = false) const; // get used filaments, 1 based idx std::vector get_used_filaments(); - int get_used_nozzle_by_filament_id(int idx) const; + int get_physical_extruder_by_filament_id(const DynamicConfig& g_config, 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 0b40fb561..842e7443c 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1993,7 +1993,7 @@ bool SelectMachineDialog::is_same_nozzle_diameters(float& tag_nozzle_diameter) c auto used_filament_idxs = cur_plate->get_used_filaments();/*the index is started from 1*/ for (int used_filament_idx : used_filament_idxs) { - int used_nozzle_idx = cur_plate->get_used_nozzle_by_filament_id(used_filament_idx); + int used_nozzle_idx = cur_plate->get_physical_extruder_by_filament_id(preset_bundle->project_config, used_filament_idx); if (used_nozzle_idx == -1) { assert(0);