mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-15 18:58:00 -06:00
Fix infill anchor missing (#9407)
* Fix infill anchor missing * Correctly process cases without fill lines in FillRectilinear::fill_surface_with_multilines() * Fix infill anchor missing for several other infill patterns * Fix infill anchor missing for rectilinear and aligned rectilinear infill pattern --------- Co-authored-by: Noisyfox <timemanager.rick@gmail.com>
This commit is contained in:
parent
d1c2368eee
commit
66cab434b8
9 changed files with 36 additions and 33 deletions
|
@ -2928,7 +2928,7 @@ void make_fill_lines(const ExPolygonWithOffset &poly_with_offset, Point refpt, d
|
|||
|
||||
bool FillRectilinear::fill_surface_by_multilines(const Surface *surface, FillParams params, const std::initializer_list<SweepParams> &sweep_params, Polylines &polylines_out)
|
||||
{
|
||||
assert(sweep_params.size() > 1);
|
||||
assert(sweep_params.size() >= 1);
|
||||
assert(! params.full_infill());
|
||||
params.density /= double(sweep_params.size());
|
||||
assert(params.density > 0.0001f && params.density <= 1.f);
|
||||
|
@ -2948,12 +2948,14 @@ bool FillRectilinear::fill_surface_by_multilines(const Surface *surface, FillPar
|
|||
make_fill_lines(ExPolygonWithOffset(poly_with_offset_base, - angle), rotate_vector.second.rotated(-angle), angle, line_width + coord_t(SCALED_EPSILON), line_spacing, coord_t(scale_(sweep.pattern_shift)), fill_lines);
|
||||
}
|
||||
|
||||
if (params.dont_connect() || fill_lines.size() <= 1) {
|
||||
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), poly_with_offset_base.polygons_outer, get_extents(surface->expolygon.contour), polylines_out, this->spacing, params);
|
||||
if (!fill_lines.empty()) {
|
||||
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), poly_with_offset_base.polygons_outer, get_extents(surface->expolygon.contour), polylines_out, this->spacing, params);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -2961,8 +2963,13 @@ bool FillRectilinear::fill_surface_by_multilines(const Surface *surface, FillPar
|
|||
Polylines FillRectilinear::fill_surface(const Surface *surface, const FillParams ¶ms)
|
||||
{
|
||||
Polylines polylines_out;
|
||||
if (! fill_surface_by_lines(surface, params, 0.f, 0.f, polylines_out))
|
||||
BOOST_LOG_TRIVIAL(error) << "FillRectilinear::fill_surface() failed to fill a region.";
|
||||
if (params.full_infill()) {
|
||||
if (!fill_surface_by_lines(surface, params, 0.f, 0.f, polylines_out))
|
||||
BOOST_LOG_TRIVIAL(error) << "FillRectilinear::fill_surface() fill_surface_by_lines() failed to fill a region.";
|
||||
} else {
|
||||
if (!fill_surface_by_multilines(surface, params, {{0.f, 0.f}}, polylines_out))
|
||||
BOOST_LOG_TRIVIAL(error) << "FillRectilinear::fill_surface() fill_surface_by_multilines() failed to fill a region.";
|
||||
}
|
||||
return polylines_out;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue