From a939c6e4344a33498ec41a6ecf88f7acfd1448e9 Mon Sep 17 00:00:00 2001 From: "shuai.liu" Date: Wed, 13 Sep 2023 15:43:53 +0800 Subject: [PATCH] ENH: auto adapt distance in arrangement JIRA: STUDIO-4408 1. if min_obj_distance is 0, use auto mode 2. normal support, 5mm gap, tree support, 22mm gap, no support, 0.1mm gap Change-Id: I906ccf267bef1f33a946572614d658fd50cfcda3 (cherry picked from commit 771efc935da625d8faa4cc5b77fedc5055f93c6c) --- src/BambuStudio.cpp | 5 +---- src/libslic3r/Arrange.cpp | 4 ++-- src/libslic3r/ModelArrange.cpp | 11 +++++++++-- src/slic3r/GUI/GLCanvas3D.cpp | 2 +- src/slic3r/GUI/GLCanvas3D.hpp | 2 +- 5 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index 0d95f79e4..01bc0b874 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -2614,10 +2614,7 @@ int CLI::run(int argc, char **argv) arrange_cfg.clearance_height_to_lid = height_to_lid; arrange_cfg.cleareance_radius = cleareance_radius; arrange_cfg.printable_height = print_height; - if (arrange_cfg.is_seq_print) - arrange_cfg.min_obj_distance = std::max(arrange_cfg.min_obj_distance, scaled(arrange_cfg.cleareance_radius + 0.001)); // +0.001mm to avoid clearance check fail due to rounding error - else - arrange_cfg.min_obj_distance = scaled(22.0); + arrange_cfg.min_obj_distance = 0; if (auto printer_structure_opt = m_print_config.option>("printer_structure")) { arrange_cfg.align_to_y_axis = (printer_structure_opt->value == PrinterStructure::psI3); diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp index b9df9872f..17ff71a3e 100644 --- a/src/libslic3r/Arrange.cpp +++ b/src/libslic3r/Arrange.cpp @@ -103,7 +103,7 @@ void update_selected_items_inflation(ArrangePolygons& selected, const DynamicPri Points bedpts = get_shrink_bedpts(print_cfg, params); BoundingBox bedbb = Polygon(bedpts).bounding_box(); std::for_each(selected.begin(), selected.end(), [&](ArrangePolygon& ap) { - ap.inflation = std::max(scaled(ap.brim_width), params.min_obj_distance / 2); + ap.inflation = params.min_obj_distance == 0 ? scaled(ap.brim_width) : params.min_obj_distance / 2; BoundingBox apbb = ap.poly.contour.bounding_box(); auto diffx = bedbb.size().x() - apbb.size().x() - 5; auto diffy = bedbb.size().y() - apbb.size().y() - 5; @@ -130,7 +130,7 @@ void update_unselected_items_inflation(ArrangePolygons& unselected, const Dynami // 其他物体的膨胀轮廓是可以跟它们重叠的。 double scaled_exclusion_gap = scale_(1); std::for_each(unselected.begin(), unselected.end(), - [&](auto& ap) { ap.inflation = !ap.is_virt_object ? std::max(scaled(ap.brim_width), params.min_obj_distance / 2) + [&](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 : scaled_exclusion_gap); }); } diff --git a/src/libslic3r/ModelArrange.cpp b/src/libslic3r/ModelArrange.cpp index ed3f7a509..cb3f742f6 100644 --- a/src/libslic3r/ModelArrange.cpp +++ b/src/libslic3r/ModelArrange.cpp @@ -156,12 +156,19 @@ ArrangePolygon get_instance_arrange_poly(ModelInstance* instance, const Slic3r:: ap.brim_width = 0; } #else - ap.brim_width = 0; + ap.brim_width = 1.0; // For by-layer printing, need to shrink bed a little, so the support won't go outside bed. // We set it to 5mm because that's how much a normal support will grow by default. + // normal support 5mm, other support 22mm, no support 0mm auto supp_type_ptr = obj->get_config_value(config, "enable_support"); - if (supp_type_ptr && supp_type_ptr->getBool()) + auto support_type_ptr = obj->get_config_value>(config, "support_type"); + auto support_type = support_type_ptr->value; + auto enable_support = supp_type_ptr->getBool(); + int support_int = support_type_ptr->getInt(); + + if (enable_support && (support_type == stNormalAuto || support_type == stNormal)) ap.brim_width = 5.0; + else if(enable_support) ap.brim_width = 22.0; #endif ap.height = obj->bounding_box().size().z(); diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 1069260e7..70d03e200 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -5406,7 +5406,7 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo //BBS: seq_print = true; } else { - dist_min = 0.1f; + dist_min = 0.0f; postfix = "_fff"; } } diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 7fff327d6..83a442b6c 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -473,7 +473,7 @@ public: struct ArrangeSettings { - float distance = 5.; + float distance = 0.f; // float distance_sla = 6.; float accuracy = 0.65f; // Unused currently bool enable_rotation = false;