From fde4d4182157292217488ba21630e504fab6cf24 Mon Sep 17 00:00:00 2001 From: Arthur Date: Sat, 13 Jan 2024 14:51:04 +0800 Subject: [PATCH] ENH: improve auto-arranging 1. add a translation jira: STUDIO-5758 2. fix by-object arranging failing issue due to wrong exclusion_gap jira: STUDIO-5941 Change-Id: Icbdbdf7d8ba91be7f355d31a5f81a9f79356dc7e (cherry picked from commit eed212e3550cb2256625a6fd09fc3d69d66659c4) --- src/libslic3r/Arrange.cpp | 6 +++--- src/slic3r/GUI/Jobs/ArrangeJob.cpp | 6 ++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp index 8221c6ea4..6b52b843a 100644 --- a/src/libslic3r/Arrange.cpp +++ b/src/libslic3r/Arrange.cpp @@ -131,10 +131,10 @@ void update_selected_items_inflation(ArrangePolygons& selected, const DynamicPri void update_unselected_items_inflation(ArrangePolygons& unselected, const DynamicPrintConfig* print_cfg, const ArrangeParams& params) { - float exclusion_gap = 1.f; + coord_t exclusion_gap = scale_(1.f); if (params.is_seq_print) { // bed_shrink_x is typically (-params.min_obj_distance / 2+5) for seq_print - exclusion_gap = std::max(exclusion_gap, params.min_obj_distance / 2 + params.bed_shrink_x + 1.f); // +1mm gap so the exclusion region is not too close + exclusion_gap = std::max(exclusion_gap, params.min_obj_distance / 2 + scaled(params.bed_shrink_x + 1.f)); // +1mm gap so the exclusion region is not too close // dont forget to move the excluded region for (auto& region : unselected) { if (region.is_virt_object) region.poly.translate(scaled(params.bed_shrink_x), scaled(params.bed_shrink_y)); @@ -147,7 +147,7 @@ void update_unselected_items_inflation(ArrangePolygons& unselected, const Dynami // 其他物体的膨胀轮廓是可以跟它们重叠的。 std::for_each(unselected.begin(), unselected.end(), [&](auto& ap) { ap.inflation = !ap.is_virt_object ? (params.min_obj_distance == 0 ? scaled(ap.brim_width) : params.min_obj_distance / 2) - : (ap.is_extrusion_cali_object ? 0 : scale_(exclusion_gap)); }); + : (ap.is_extrusion_cali_object ? 0 : exclusion_gap); }); } void update_selected_items_axis_align(ArrangePolygons& selected, const DynamicPrintConfig* print_cfg, const ArrangeParams& params) diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index c6ad864f3..f422c334f 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -477,7 +477,7 @@ void ArrangeJob::prepare() auto polys_to_draw = m_selected; for (auto it = polys_to_draw.begin(); it != polys_to_draw.end(); it++) { it->poly.translate(center); - bbox.merge(it->poly); + bbox.merge(get_extents(it->poly)); } SVG svg("SVG/arrange_poly.svg", bbox); if (svg.is_opened()) { @@ -510,9 +510,7 @@ void ArrangeJob::check_unprintable() m_unprintable.push_back(*it); it = m_selected.erase(it); if (it->poly.area() < 0.001) { - auto msg = (boost::format( - _utf8("Object %s has zero size and can't be arranged.")) - % _utf8(it->name)).str(); + auto msg = (boost::format(_u8L("Object %1% has zero size and can't be arranged.")) % it->name).str(); m_plater->get_notification_manager()->push_notification(NotificationType::BBLPlateInfo, NotificationManager::NotificationLevel::WarningNotificationLevel, msg); }