From aca0f883f7fb40a4c2f4f14fef57a528166d8208 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Fri, 23 May 2025 17:02:36 +0800 Subject: [PATCH] FIX: the wipe tower out of bounds prompt is incorrect when there are multiple plates, jira: STUDIO-11817 Change-Id: Ie0b9ac36d568f6d4d6cd134056e4d850612c1961 (cherry picked from commit 5f624b72484a3ddf15318e4e0fcbdc41b98b3a85) --- src/slic3r/GUI/3DScene.cpp | 5 ++++- src/slic3r/GUI/3DScene.hpp | 2 +- src/slic3r/GUI/GLCanvas3D.cpp | 6 +++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index cb65428997..4c43757834 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -1070,10 +1070,13 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, glsafe(::glDisable(GL_BLEND)); } -bool GLVolumeCollection::check_wipe_tower_outside_state(const Slic3r::BuildVolume &build_volume) const +bool GLVolumeCollection::check_wipe_tower_outside_state(const Slic3r::BuildVolume &build_volume, int plate_id) const { for (GLVolume *volume : this->volumes) { if (volume->is_wipe_tower) { + int wipe_tower_plate_id = volume->composite_id.object_id - 1000; + if (wipe_tower_plate_id != plate_id) + continue; const std::vector& printable_area = build_volume.printable_area(); Polygon printable_poly = Polygon::new_scale(printable_area); diff --git a/src/slic3r/GUI/3DScene.hpp b/src/slic3r/GUI/3DScene.hpp index b2e94030f5..d19d5c8e0f 100644 --- a/src/slic3r/GUI/3DScene.hpp +++ b/src/slic3r/GUI/3DScene.hpp @@ -535,7 +535,7 @@ public: // returns the containment state in the given out_state, if non-null bool check_outside_state(const Slic3r::BuildVolume& build_volume, ModelInstanceEPrintVolumeState* out_state, ObjectFilamentResults* object_results) const; void reset_outside_state(); - bool check_wipe_tower_outside_state(const Slic3r::BuildVolume &build_volume) const; + bool check_wipe_tower_outside_state(const Slic3r::BuildVolume &build_volume, int plate_id) const; void update_colors_by_extruder(const DynamicPrintConfig *config, bool is_update_alpha = true); diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 790cf68ab8..76b483842c 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -3012,8 +3012,9 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re const bool fullyOut = (state == ModelInstanceEPrintVolumeState::ModelInstancePVS_Fully_Outside); // const bool objectLimited = (state == ModelInstanceEPrintVolumeState::ModelInstancePVS_Limited); - bool show_read_wipe_tower = wxGetApp().plater()->get_partplate_list().get_selected_plate()->fff_print()->is_step_done(psWipeTower); - bool wipe_tower_outside = m_volumes.check_wipe_tower_outside_state(m_bed.build_volume()); + PartPlate *cur_plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); + bool show_read_wipe_tower = cur_plate->fff_print()->is_step_done(psWipeTower); + bool wipe_tower_outside = m_volumes.check_wipe_tower_outside_state(m_bed.build_volume(), wxGetApp().plater()->get_partplate_list().get_curr_plate_index()); bool show_wipe_tower_outside_error = show_read_wipe_tower ? !wipe_tower_outside : false; _set_warning_notification(EWarning::PrimeTowerOutside, show_wipe_tower_outside_error); @@ -3029,7 +3030,6 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re //if (printer_technology != ptSLA || !contained_min_one) // _set_warning_notification(EWarning::SlaSupportsOutside, false); - PartPlate* cur_plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); bool tpu_valid = cur_plate->check_tpu_printable_status(wxGetApp().preset_bundle->full_config(), wxGetApp().preset_bundle->get_used_tpu_filaments(cur_plate->get_extruders(true))); _set_warning_notification(EWarning::TPUPrintableError, !tpu_valid);