diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp index 5478f61b03..5776e6d1e8 100644 --- a/src/libslic3r/Arrange.cpp +++ b/src/libslic3r/Arrange.cpp @@ -687,7 +687,9 @@ void arrange(ArrangePolygons &items, const SegmentedRectangleBed &bed, const ArrangeParams ¶ms) { - arrange(items, excludes, bed.bb, params); + auto arrbed = bed.bb; + arrbed.offset(-bed.inset); + arrange(items, excludes, arrbed, params); if (! excludes.empty()) return; @@ -744,6 +746,19 @@ void arrange(ArrangePolygons &items, Vec2crd d = bb.center() - pilebb[bedidx].center(); + auto bedbb = bed.bb; + bedbb.offset(-bed.inset); + auto pilebbx = pilebb[bedidx]; + pilebbx.translate(d); + + Point corr{0, 0}; + corr.x() = -std::min(0, pilebbx.min.x() - bedbb.min.x()) + -std::max(0, pilebbx.max.x() - bedbb.max.x()); + corr.y() = -std::min(0, pilebbx.min.y() - bedbb.min.y()) + -std::max(0, pilebbx.max.y() - bedbb.max.y()); + + d += corr; + for (auto &itm : items) if (itm.bed_idx == bedidx) itm.translation += d; diff --git a/src/libslic3r/Arrange.hpp b/src/libslic3r/Arrange.hpp index 13a8e4d606..d5e5ea7c3e 100644 --- a/src/libslic3r/Arrange.hpp +++ b/src/libslic3r/Arrange.hpp @@ -38,6 +38,7 @@ public: struct SegmentedRectangleBed { Vec<2, size_t> segments; BoundingBox bb; + coord_t inset = 0; SegmentedRectangleBed (const BoundingBox &bb, size_t segments_x, diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index c6a324b533..b9d50a78d6 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -4663,7 +4663,9 @@ Points get_bed_shape(const DynamicPrintConfig &config) void get_bed_shape(const DynamicPrintConfig &cfg, arrangement::ArrangeBed &out) { if (is_XL_printer(cfg)) { - out = arrangement::SegmentedRectangleBed{get_extents(get_bed_shape(cfg)), 4, 4}; + arrangement::SegmentedRectangleBed bed{get_extents(get_bed_shape(cfg)), 4, 4}; + bed.inset = scaled(10.); + out = bed; } else { out = arrangement::to_arrange_bed(get_bed_shape(cfg)); }