diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp index 5744a70765..32cfac2ea2 100644 --- a/src/libslic3r/Arrange.cpp +++ b/src/libslic3r/Arrange.cpp @@ -607,6 +607,12 @@ template auto call_with_bed(const Points &bed, Fn &&fn) } } +bool is_box(const Points &bed) +{ + return !bed.empty() && + ((1.0 - poly_area(bed) / area(BoundingBox(bed))) < 1e-3); +} + template<> void arrange(ArrangePolygons & items, const ArrangePolygons &excludes, diff --git a/src/libslic3r/Arrange.hpp b/src/libslic3r/Arrange.hpp index 1d2e3fe88b..e8fdbdff2c 100644 --- a/src/libslic3r/Arrange.hpp +++ b/src/libslic3r/Arrange.hpp @@ -143,6 +143,8 @@ inline void arrange(ArrangePolygons &items, const CircleBed &bed, const ArrangeP inline void arrange(ArrangePolygons &items, const Polygon &bed, const ArrangeParams ¶ms = {}) { arrange(items, {}, bed, params); } inline void arrange(ArrangePolygons &items, const InfiniteBed &bed, const ArrangeParams ¶ms = {}) { arrange(items, {}, bed, params); } +bool is_box(const Points &bed); + }} // namespace Slic3r::arrangement #endif // MODELARRANGE_HPP diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index dfbd66428c..ba228452c4 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -4188,7 +4188,9 @@ bool GLCanvas3D::_render_arrange_menu(float pos_x) settings_changed = true; } - if (imgui->combo(_("Alignment"), {"Center", "Top left", "Bottom left", "Bottom right", "Top right", "Random"}, settings.alignment)) { + Points bed = m_config ? get_bed_shape(*m_config) : Points{}; + + if (arrangement::is_box(bed) && imgui->combo(_("Alignment"), {"Center", "Top left", "Bottom left", "Bottom right", "Top right", "Random"}, settings.alignment)) { settings_out.alignment = settings.alignment; appcfg->set("arrange", align_key.c_str(), std::to_string(settings_out.alignment)); settings_changed = true;