Improve bridge over infill filtering, fix tests
This commit is contained in:
parent
32c05aa47a
commit
68d0f2da2b
@ -2147,20 +2147,27 @@ void PrintObject::bridge_over_infill()
|
|||||||
expansion_area = closing(expansion_area, SCALED_EPSILON);
|
expansion_area = closing(expansion_area, SCALED_EPSILON);
|
||||||
expansion_area = intersection(expansion_area, deep_infill_area);
|
expansion_area = intersection(expansion_area, deep_infill_area);
|
||||||
Polylines anchors = intersection_pl(infill_lines[lidx - 1], shrink(expansion_area, spacing));
|
Polylines anchors = intersection_pl(infill_lines[lidx - 1], shrink(expansion_area, spacing));
|
||||||
|
Polygons internal_unsupported_area = shrink(deep_infill_area, spacing * 4.5);
|
||||||
|
|
||||||
#ifdef DEBUG_BRIDGE_OVER_INFILL
|
#ifdef DEBUG_BRIDGE_OVER_INFILL
|
||||||
debug_draw(std::to_string(lidx) + "_" + std::to_string(cluster_idx) + "_" + std::to_string(job_idx) + "_" + "_total_area",
|
debug_draw(std::to_string(lidx) + "_" + std::to_string(cluster_idx) + "_" + std::to_string(job_idx) + "_" + "_total_area",
|
||||||
to_lines(total_fill_area), to_lines(expansion_area), to_lines(deep_infill_area), to_lines(anchors));
|
to_lines(total_fill_area), to_lines(expansion_area), to_lines(deep_infill_area), to_lines(anchors));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
std::vector<CandidateSurface> expanded_surfaces;
|
std::vector<CandidateSurface> expanded_surfaces;
|
||||||
expanded_surfaces.reserve(surfaces_by_layer[lidx].size());
|
expanded_surfaces.reserve(surfaces_by_layer[lidx].size());
|
||||||
for (const CandidateSurface &candidate : surfaces_by_layer[lidx]) {
|
for (const CandidateSurface &candidate : surfaces_by_layer[lidx]) {
|
||||||
const Flow &flow = candidate.region->bridging_flow(frSolidInfill, true);
|
const Flow &flow = candidate.region->bridging_flow(frSolidInfill, true);
|
||||||
Polygons area_to_be_bridge = expand(candidate.new_polys, flow.scaled_spacing());
|
Polygons area_to_be_bridge = expand(candidate.new_polys, flow.scaled_spacing());
|
||||||
area_to_be_bridge = intersection(area_to_be_bridge, deep_infill_area);
|
area_to_be_bridge = intersection(area_to_be_bridge, deep_infill_area);
|
||||||
Polygons limiting_area = union_(area_to_be_bridge, expansion_area);
|
|
||||||
|
area_to_be_bridge.erase(std::remove_if(area_to_be_bridge.begin(), area_to_be_bridge.end(),
|
||||||
|
[internal_unsupported_area](const Polygon &p) {
|
||||||
|
return intersection({p}, internal_unsupported_area).empty();
|
||||||
|
}),
|
||||||
|
area_to_be_bridge.end());
|
||||||
|
|
||||||
|
Polygons limiting_area = union_(area_to_be_bridge, expansion_area);
|
||||||
|
|
||||||
if (area_to_be_bridge.empty())
|
if (area_to_be_bridge.empty())
|
||||||
continue;
|
continue;
|
||||||
|
@ -529,7 +529,7 @@ SCENARIO("Perimeters3", "[Perimeters]")
|
|||||||
auto config = Slic3r::DynamicPrintConfig::full_print_config_with({
|
auto config = Slic3r::DynamicPrintConfig::full_print_config_with({
|
||||||
{ "skirts", 0 },
|
{ "skirts", 0 },
|
||||||
{ "perimeters", 3 },
|
{ "perimeters", 3 },
|
||||||
{ "layer_height", 0.4 },
|
{ "layer_height", 0.15 },
|
||||||
{ "bridge_speed", 99 },
|
{ "bridge_speed", 99 },
|
||||||
{ "enable_dynamic_overhang_speeds", false },
|
{ "enable_dynamic_overhang_speeds", false },
|
||||||
// to prevent bridging over sparse infill
|
// to prevent bridging over sparse infill
|
||||||
|
Loading…
Reference in New Issue
Block a user