From 88d5e9e4425c18089140b4811bfe6a2f5d1d162a Mon Sep 17 00:00:00 2001 From: harrierpigeon Date: Wed, 5 Aug 2026 03:34:04 -0500 Subject: [PATCH] Fix: reset BuildVolume belt state when leaving belt mode (R1) Non-belt branch of set_bed_shape reset only the 3DBed renderer, not the BuildVolume; Bed3D::set_shape early-returns on unchanged bed, so a belt->normal switch or in-place belt toggle-off left the BuildVolume with m_is_belt_printer=true and inflated Y bounds -> out-of-bounds objects treated as printable on a normal printer. --- src/slic3r/GUI/Plater.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index a67e424fc8..365384ecf9 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -12387,6 +12387,12 @@ void Plater::priv::set_bed_shape(const Pointfs &shape, // G-code load time (GCodeViewer::compute_belt_back_transform), so no mesh-side // inverse needs to be pushed to the viewer here. } else { + // Reset the BuildVolume belt state too: Bed3D::set_shape early-returns when + // the bed params are unchanged, so a belt->normal switch (or toggling belt off + // on the same printer) would otherwise leave the BuildVolume with + // m_is_belt_printer=true and an inflated Y bbox, wrongly treating out-of-bounds + // objects as printable. Idempotent for a printer that was never belt. + bed.build_volume().set_belt_printer(false, 0., false); bed.set_belt_printer(false, 0.f); if (preview) preview->get_canvas3d()->get_gcode_viewer().set_belt_printer(false, 0.f);