SPE-2580: Disable wipe tower in arrange if we know there is none.

This commit is contained in:
Martin Šach 2024-11-26 21:53:08 +01:00 committed by Lukas Matena
parent c8cac7f678
commit 1675e08268
3 changed files with 16 additions and 6 deletions

View File

@ -216,7 +216,17 @@ void SceneBuilder::build_arrangeable_slicer_model(ArrangeableSlicerModel &amodel
if (m_fff_print && !m_xl_printer)
m_xl_printer = is_XL_printer(m_fff_print->config());
const bool has_wipe_tower = !m_wipetower_handlers.empty();
const bool has_wipe_tower{std::any_of(
m_wipetower_handlers.begin(),
m_wipetower_handlers.end(),
[](const AnyPtr<WipeTowerHandler> &handler){
bool is_on_current_bed{false};
handler->visit([&](const Arrangeable &arrangeable){
is_on_current_bed = arrangeable.get_bed_index() == s_multiple_beds.get_active_bed();
});
return is_on_current_bed;
}
)};
if (m_xl_printer && !has_wipe_tower) {
m_bed = XLBed{bounding_box(m_bed), bed_gap(m_bed)};

View File

@ -1351,10 +1351,8 @@ bool GLCanvas3D::is_arrange_alignment_enabled() const
if (!is_XL_printer(*m_config)) {
return false;
}
for (const WipeTowerInfo &wti : this->get_wipe_tower_infos()) {
if (bool{wti}) {
return false;
}
if (this->m_wipe_tower_bounding_boxes[s_multiple_beds.get_active_bed()]) {
return false;
}
return true;
}
@ -2553,6 +2551,8 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re
} else {
delete volume;
}
} else {
m_wipe_tower_bounding_boxes[bed_idx] = std::nullopt;
}
}
s_multiple_beds.ensure_wipe_towers_on_beds(wxGetApp().plater()->model(), wxGetApp().plater()->get_fff_prints());

View File

@ -920,4 +920,4 @@ bool PresetArchiveDatabase::sync_blocking(PresetUpdaterUIStatus* ui_status)
return true;
}
} // Slic3r
} // Slic3r