From 6244510b2550c8d0eacccb9f0642dc61204e05a1 Mon Sep 17 00:00:00 2001 From: Ian Bassi Date: Mon, 20 Apr 2026 19:18:03 -0300 Subject: [PATCH] Fallback to per-move validation when bbox outside (#13179) --- src/libslic3r/BuildVolume.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/BuildVolume.cpp b/src/libslic3r/BuildVolume.cpp index 3802fbc014..1ac200d9c8 100644 --- a/src/libslic3r/BuildVolume.cpp +++ b/src/libslic3r/BuildVolume.cpp @@ -527,7 +527,16 @@ bool BuildVolume::all_paths_inside(const GCodeProcessorResult& paths, const Boun build_volume.max.z() = std::numeric_limits::max(); if (ignore_bottom) build_volume.min.z() = -std::numeric_limits::max(); - return build_volume.contains(paths_bbox); + // BBox-only callers may provide no moves. Validate bbox corners regardless of paths_bbox.defined. + if (paths.moves.empty()) + return build_volume.contains(paths_bbox.min) && build_volume.contains(paths_bbox.max); + if (paths_bbox.defined && build_volume.contains(paths_bbox)) + return true; + + // Fallback: validate only relevant extrusion moves. + const BoundingBox3Base build_volumef(build_volume.min.cast(), build_volume.max.cast()); + return std::all_of(paths.moves.begin(), paths.moves.end(), [move_valid, build_volumef](const GCodeProcessorResult::MoveVertex &move) + { return !move_valid(move) || build_volumef.contains(move.position); }); } case BuildVolume_Type::Circle: {