mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2026-03-09 04:54:46 -06:00
Fix missing infill layers (fill_surface_by_multilines & fill_surface_trapezoidal bug fix) (#12516)
Some checks are pending
Build all / build_linux (push) Waiting to run
Build all / build_all (arm64, ${{ vars.SELF_HOSTED && 'orca-macos-arm64' || 'macos-14' }}) (push) Waiting to run
Build all / build_all (windows-latest) (push) Waiting to run
Build all / Unit Tests (push) Blocked by required conditions
Build all / Flatpak (push) Waiting to run
Some checks are pending
Build all / build_linux (push) Waiting to run
Build all / build_all (arm64, ${{ vars.SELF_HOSTED && 'orca-macos-arm64' || 'macos-14' }}) (push) Waiting to run
Build all / build_all (windows-latest) (push) Waiting to run
Build all / Unit Tests (push) Blocked by required conditions
Build all / Flatpak (push) Waiting to run
* FillRectilinear bugfix
* cleaning
* Revert "cleaning"
This reverts commit 0de21ada78.
* Filltrapezoidal is OK
* Filltrapezoidal fix 2
This commit is contained in:
parent
a38af4d85a
commit
0ef8a79cd2
1 changed files with 18 additions and 10 deletions
|
|
@ -3021,24 +3021,25 @@ bool FillRectilinear::fill_surface_by_multilines(const Surface *surface, FillPar
|
|||
multiline_fill(fill_lines, params, spacing);
|
||||
|
||||
// Contract surface polygon by half line width to avoid excesive overlap with perimeter
|
||||
ExPolygons contracted = offset_ex(surface->expolygon, -float(scale_(0.5 * this->spacing)));
|
||||
|
||||
// if contraction results in empty polygon, use original surface
|
||||
const ExPolygon &intersection_surface = contracted.empty() ? surface->expolygon : contracted.front();
|
||||
const ExPolygons contracted = offset_ex(surface->expolygon, -float(scale_(0.5 * this->spacing)));
|
||||
|
||||
// if contraction results in empty ExPolygons, use original surface
|
||||
const ExPolygons& intersection_surface = contracted.empty() ? ExPolygons{surface->expolygon} : contracted;
|
||||
|
||||
// Intersect polylines with perimeter
|
||||
fill_lines = intersection_pl(std::move(fill_lines), intersection_surface);
|
||||
|
||||
if ((params.pattern == ipLateralLattice || params.pattern == ipLateralHoneycomb ) && params.multiline >1 )
|
||||
remove_overlapped(fill_lines, line_width);
|
||||
if ((params.pattern == ipLateralLattice || params.pattern == ipLateralHoneycomb) && params.multiline > 1)
|
||||
remove_overlapped(fill_lines, line_width);
|
||||
|
||||
if (!fill_lines.empty()) {
|
||||
if (params.dont_connect()) {
|
||||
if (params.dont_connect()) {
|
||||
if (fill_lines.size() > 1)
|
||||
fill_lines = chain_polylines(std::move(fill_lines));
|
||||
append(polylines_out, std::move(fill_lines));
|
||||
} else
|
||||
connect_infill(std::move(fill_lines), intersection_surface, polylines_out, this->spacing, params);
|
||||
connect_infill(std::move(fill_lines), to_polygons(intersection_surface), get_extents(surface->expolygon.contour), polylines_out,
|
||||
this->spacing, params);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
@ -3268,7 +3269,7 @@ bool FillRectilinear::fill_surface_trapezoidal(
|
|||
ExPolygons contracted = offset_ex(expolygon, -float(scale_(0.5 * this->spacing)));
|
||||
|
||||
// if contraction results in empty polygon, use original surface
|
||||
const ExPolygon &intersection_surface = contracted.empty() ? expolygon : contracted.front();
|
||||
const ExPolygons& intersection_surface = contracted.empty() ? ExPolygons{expolygon} : contracted;
|
||||
|
||||
// Intersect polylines with offset expolygon
|
||||
polylines = intersection_pl(std::move(polylines), intersection_surface);
|
||||
|
|
@ -3284,7 +3285,14 @@ bool FillRectilinear::fill_surface_trapezoidal(
|
|||
// Connect infill lines using offset expolygon
|
||||
int infill_start_idx = polylines_out.size();
|
||||
if (!polylines.empty()) {
|
||||
Slic3r::Fill::chain_or_connect_infill(std::move(polylines), intersection_surface, polylines_out, this->spacing, params);
|
||||
if (params.dont_connect()) {
|
||||
if (polylines.size() > 1)
|
||||
polylines = chain_polylines(std::move(polylines));
|
||||
append(polylines_out, std::move(polylines));
|
||||
} else {
|
||||
connect_infill(std::move(polylines), to_polygons(intersection_surface), get_extents(intersection_surface), polylines_out,
|
||||
this->spacing, params);
|
||||
}
|
||||
|
||||
// Rotate back the infill lines to original orientation
|
||||
if (std::abs(base_angle) >= EPSILON) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue