diff --git a/src/libslic3r/Fill/Fill3DHoneycomb.cpp b/src/libslic3r/Fill/Fill3DHoneycomb.cpp index 4fcb1ed05..7061dc19b 100644 --- a/src/libslic3r/Fill/Fill3DHoneycomb.cpp +++ b/src/libslic3r/Fill/Fill3DHoneycomb.cpp @@ -196,7 +196,7 @@ void Fill3DHoneycomb::_fill_surface_single( { // no rotation is supported for this infill pattern // BBL: add support for rotation - auto infill_angle = float(this->angle); + auto infill_angle = float(this->angle); if (std::abs(infill_angle) >= EPSILON) expolygon.rotate(-infill_angle); BoundingBox bb = expolygon.contour.bounding_box(); diff --git a/src/libslic3r/Fill/FillFlippingLine.cpp b/src/libslic3r/Fill/FillFlippingLine.cpp index fe6f56759..4d16215c1 100644 --- a/src/libslic3r/Fill/FillFlippingLine.cpp +++ b/src/libslic3r/Fill/FillFlippingLine.cpp @@ -196,7 +196,7 @@ void FillFlippingLine ::_fill_surface_single( coord_t line_spacing = coord_t(scale_(this->spacing) / params.density); // reduce density - if (params.density < 0.999) line_spacing *= 1.5; + if (params.density < 0.999) line_spacing *= 1.08; bb.merge(align_to_grid(bb.min, Point(line_spacing * 4, line_spacing * 4))); diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index aa99d3a0c..6487524cd 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -2211,9 +2211,17 @@ void PrintObject::bridge_over_infill() }; // LAMBDA do determine optimal bridging angle - auto determine_bridging_angle = [](const Polygons &bridged_area, const Lines &anchors, InfillPattern dominant_pattern) { + auto determine_bridging_angle = [](const Polygons &bridged_area, const Lines &anchors, InfillPattern dominant_pattern, double infill_direction) { AABBTreeLines::LinesDistancer lines_tree(anchors); + // Check it the infill that require a fixed infill angle. + switch (dominant_pattern) { + case ip3DHoneycomb: + case ipFlippingLine: + return (infill_direction + 45.0) * 2.0 * M_PI / 360.; + default: break; + } + std::map counted_directions; for (const Polygon &p : bridged_area) { double acc_distance = 0; @@ -2587,11 +2595,12 @@ void PrintObject::bridge_over_infill() double bridging_angle = 0; if (!anchors.empty()) { bridging_angle = determine_bridging_angle(area_to_be_bridge, to_lines(anchors), - candidate.region->region().config().sparse_infill_pattern.value); + candidate.region->region().config().sparse_infill_pattern.value, + candidate.region->region().config().infill_direction.value); } else { // use expansion boundaries as anchors. // Also, use Infill pattern that is neutral for angle determination, since there are no infill lines. - bridging_angle = determine_bridging_angle(area_to_be_bridge, to_lines(boundary_plines), InfillPattern::ipLine); + bridging_angle = determine_bridging_angle(area_to_be_bridge, to_lines(boundary_plines), InfillPattern::ipLine, 0); } boundary_plines.insert(boundary_plines.end(), anchors.begin(), anchors.end());