From 78b9fcb71bb6d5e8060603f57307321c2de88931 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 4 Nov 2022 16:44:43 +0800 Subject: [PATCH] filter out tiny gaps --- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 6 ++++++ resources/i18n/zh_cn/BambuStudio.mo | Bin 169545 -> 169798 bytes src/libslic3r/Fill/Fill.cpp | 1 + src/libslic3r/Fill/FillBase.hpp | 2 ++ src/libslic3r/Fill/FillRectilinear.cpp | 8 ++++++++ src/libslic3r/Layer.cpp | 3 ++- src/libslic3r/PerimeterGenerator.cpp | 12 +++++++++++- src/libslic3r/Preset.cpp | 3 ++- src/libslic3r/PrintConfig.cpp | 7 +++++++ src/libslic3r/PrintConfig.hpp | 1 + src/libslic3r/PrintObject.cpp | 7 ++++--- src/slic3r/GUI/PresetHints.cpp | 2 +- src/slic3r/GUI/Tab.cpp | 1 + 13 files changed, 46 insertions(+), 7 deletions(-) diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index 546fbd4721..dd06811855 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -4810,6 +4810,12 @@ msgstr "桥接" msgid "Gap infill" msgstr "填缝" +msgid "Filter out tiny gaps" +msgstr "忽略微小间隙" + +msgid "Filter out gaps smaller than the threshold specified. This setting won't affact top/bottom layers" +msgstr "小于指定阈值的微小间隙不填充。本设置不会对顶/底层起作用" + msgid "Support interface" msgstr "支撑面" diff --git a/resources/i18n/zh_cn/BambuStudio.mo b/resources/i18n/zh_cn/BambuStudio.mo index e4c39a9372d981bf78494dedc74b98e4650a6065..0b8385bf70849b8cdc90b74babd9749459af5222 100644 GIT binary patch delta 41111 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 Qy$kv_Xym_regions[surface_fill.region_id]; + params.config = &layerm->region().config(); for (ExPolygon& expoly : surface_fill.expolygons) { f->no_overlap_expolygons = intersection_ex(layerm->fill_no_overlap_expolygons, ExPolygons() = { expoly }); // Spacing is modified by the filler to indicate adjustments. Reset it for each expolygon. diff --git a/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp index 9487e463b8..cffeab04dd 100644 --- a/src/libslic3r/Fill/FillBase.hpp +++ b/src/libslic3r/Fill/FillBase.hpp @@ -74,6 +74,8 @@ struct FillParams bool using_internal_flow{ false }; //BBS: only used for new top surface pattern float no_extrusion_overlap{ 0.0 }; + const PrintRegionConfig* config{ nullptr }; + }; static_assert(IsTriviallyCopyable::value, "FillParams class is not POD (and it should be - see constructor)."); diff --git a/src/libslic3r/Fill/FillRectilinear.cpp b/src/libslic3r/Fill/FillRectilinear.cpp index 0d7f5940fc..5723807395 100644 --- a/src/libslic3r/Fill/FillRectilinear.cpp +++ b/src/libslic3r/Fill/FillRectilinear.cpp @@ -3169,9 +3169,17 @@ void FillMonotonicLineWGapFill::fill_surface_extrusion(const Surface* surface, c } if (!polylines.empty() && !is_bridge(params.extrusion_role)) { + if (!surface->is_top() && !surface->is_bottom()) { + polylines.erase(std::remove_if(polylines.begin(), polylines.end(), + [&](const ThickPolyline& p) { + return p.length() < scale_(params.config->filter_out_gap_fill.value); + }), polylines.end()); + } + ExtrusionEntityCollection gap_fill; variable_width(polylines, erGapFill, params.flow, gap_fill.entities); coll_nosort->append(std::move(gap_fill.entities)); + } } diff --git a/src/libslic3r/Layer.cpp b/src/libslic3r/Layer.cpp index 3bde8102d3..9172ea2406 100644 --- a/src/libslic3r/Layer.cpp +++ b/src/libslic3r/Layer.cpp @@ -171,7 +171,8 @@ void Layer::make_perimeters() && config.inner_wall_speed == other_config.inner_wall_speed && config.outer_wall_speed == other_config.outer_wall_speed && config.small_perimeter_speed == other_config.small_perimeter_speed - && config.gap_infill_speed.value == other_config.gap_infill_speed.value + && config.gap_infill_speed.value == other_config.gap_infill_speed.value + && config.filter_out_gap_fill.value == other_config.filter_out_gap_fill.value && config.detect_overhang_wall == other_config.detect_overhang_wall && config.opt_serialize("inner_wall_line_width") == other_config.opt_serialize("inner_wall_line_width") && config.detect_thin_wall == other_config.detect_thin_wall diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 3b1a3145f3..47d6eeda32 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -715,6 +715,15 @@ void PerimeterGenerator::process() ++ irun; } #endif + // SoftFever: don't filter out tiny gap fills for first and top layer. So that the print looks better :) + if (this->layer_id != 0 && this->upper_slices != nullptr) + { + polylines.erase(std::remove_if(polylines.begin(), polylines.end(), + [&](const ThickPolyline& p) { + return p.length() < scale_(config->filter_out_gap_fill.value); + }), polylines.end()); + } + if (! polylines.empty()) { ExtrusionEntityCollection gap_fill; @@ -728,7 +737,8 @@ void PerimeterGenerator::process() //FIXME Vojtech: This grows by a rounded extrusion width, not by line spacing, // therefore it may cover the area, but no the volume. last = diff_ex(last, gap_fill.polygons_covered_by_width(10.f)); - this->gap_fill->append(std::move(gap_fill.entities)); + this->gap_fill->append(std::move(gap_fill.entities)); + } } diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 5ce16eab3c..555c52020a 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -346,6 +346,7 @@ void Preset::normalize(DynamicPrintConfig &config) } } + handle_legacy_sla(config); } @@ -697,7 +698,7 @@ static std::vector s_Preset_print_options { #endif /* HAS_PRESSURE_EQUALIZER */ "inner_wall_speed", "outer_wall_speed", "small_perimeter_speed", "small_perimeter_threshold", "sparse_infill_speed", "internal_solid_infill_speed", "top_surface_speed", "support_speed", "support_object_xy_distance", "support_interface_speed", - "bridge_speed", "bridge_angle", "gap_infill_speed", "travel_speed", "travel_speed_z", "initial_layer_speed", + "bridge_speed", "bridge_angle", "filter_out_gap_fill", "gap_infill_speed", "travel_speed", "travel_speed_z", "initial_layer_speed", "outer_wall_acceleration", "inner_wall_acceleration", "initial_layer_acceleration", "top_surface_acceleration", "default_acceleration", "travel_acceleration", "skirt_loops", "skirt_distance", "skirt_height", "draft_shield", "default_jerk", "outer_wall_jerk", "inner_wall_jerk", "top_surface_jerk", "initial_layer_jerk","travel_jerk", "brim_width", "brim_object_gap", "brim_type", "enable_support", "support_type", "support_threshold_angle", "enforce_support_layers", diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 436503e8bd..fd861cd114 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -1488,6 +1488,13 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0.8)); + def = this->add("filter_out_gap_fill", coFloat); + def->label = L("Filter out tiny gaps"); + def->category = L("Layers and Perimeters"); + def->tooltip = L("Filter out gaps smaller than the threshold specified. This setting won't affact top/bottom layers"); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(0)); + def = this->add("gap_infill_speed", coFloat); def->label = L("Gap infill"); def->category = L("Speed"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 8a1ae18af9..590cda6e56 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -679,6 +679,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionEnum, fuzzy_skin)) ((ConfigOptionFloat, fuzzy_skin_thickness)) ((ConfigOptionFloat, fuzzy_skin_point_distance)) + ((ConfigOptionFloat, filter_out_gap_fill)) ((ConfigOptionFloat, gap_infill_speed)) ((ConfigOptionInt, sparse_infill_filament)) ((ConfigOptionFloat, sparse_infill_line_width)) diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index bad5b3fc20..957d42f3d3 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -673,7 +673,8 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "inner_wall_line_width" || opt_key == "infill_wall_overlap") { steps.emplace_back(posPerimeters); - } else if (opt_key == "gap_infill_speed") { + } else if (opt_key == "gap_infill_speed" + || opt_key == "filter_out_gap_fill" ) { // Return true if gap-fill speed has changed from zero value to non-zero or from non-zero value to zero. auto is_gap_fill_changed_state_due_to_speed = [&opt_key, &old_config, &new_config]() -> bool { if (opt_key == "gap_infill_speed") { @@ -687,9 +688,9 @@ bool PrintObject::invalidate_state_by_config_options( }; // Filtering of unprintable regions in multi-material segmentation depends on if gap-fill is enabled or not. - // So step posSlice is invalidated when gap-fill was enabled/disabled by option "gap_fill_enabled" or by + // So step posSlice is invalidated when gap-fill was enabled/disabled by option "filter_out_gap_fill" or by // changing "gap_infill_speed" to force recomputation of the multi-material segmentation. - if (this->is_mm_painted() && (opt_key == "gap_infill_speed" && is_gap_fill_changed_state_due_to_speed())) + if (this->is_mm_painted() && (opt_key == "filter_out_gap_fill" && (opt_key == "gap_infill_speed" && is_gap_fill_changed_state_due_to_speed()))) steps.emplace_back(posSlice); steps.emplace_back(posPerimeters); } else if ( diff --git a/src/slic3r/GUI/PresetHints.cpp b/src/slic3r/GUI/PresetHints.cpp index 5c7861ec87..c338049abc 100644 --- a/src/slic3r/GUI/PresetHints.cpp +++ b/src/slic3r/GUI/PresetHints.cpp @@ -103,7 +103,7 @@ std::string PresetHints::maximum_volumetric_flow_description(const PresetBundle double bridge_flow = print_config.opt_float("bridge_flow"); double inner_wall_speed = print_config.opt_float("inner_wall_speed"); double outer_wall_speed = print_config.get_abs_value("outer_wall_speed", inner_wall_speed); - // double gap_infill_speed = print_config.opt_bool("gap_fill_enabled") ? print_config.opt_float("gap_infill_speed") : 0.; + // double gap_infill_speed = print_config.opt_bool("filter_out_gap_fill") ? print_config.opt_float("gap_infill_speed") : 0.; double sparse_infill_speed = print_config.opt_float("sparse_infill_speed"); double small_perimeter_speed = print_config.get_abs_value("small_perimeter_speed", inner_wall_speed); double internal_solid_infill_speed = print_config.opt_float("internal_solid_infill_speed"); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 11e5fd5858..ffa4e411ab 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1806,6 +1806,7 @@ void TabPrint::build() optgroup->append_single_option_line("sparse_infill_pattern", "fill-patterns#infill types and their properties of sparse"); optgroup->append_single_option_line("top_surface_pattern", "fill-patterns#Infill of the top surface and bottom surface"); optgroup->append_single_option_line("bottom_surface_pattern", "fill-patterns#Infill of the top surface and bottom surface"); + optgroup->append_single_option_line("filter_out_gap_fill"); optgroup = page->new_optgroup(L("Advanced"), L"param_advanced"); optgroup->append_single_option_line("infill_wall_overlap");