Fixed infill polygons filtering for Arachne to mimic filtering in the classic perimeter generator.

This commit is contained in:
Lukáš Hejl 2022-06-01 11:40:49 +02:00
parent e631ac171a
commit d107c47b0a

View file

@ -286,9 +286,10 @@ void PerimeterGenerator::process_arachne()
coord_t perimeter_spacing = this->perimeter_flow.scaled_spacing();
// external perimeters
m_ext_mm3_per_mm = this->ext_perimeter_flow.mm3_per_mm();
coord_t ext_perimeter_width = this->ext_perimeter_flow.scaled_width();
coord_t ext_perimeter_spacing = this->ext_perimeter_flow.scaled_spacing();
m_ext_mm3_per_mm = this->ext_perimeter_flow.mm3_per_mm();
coord_t ext_perimeter_width = this->ext_perimeter_flow.scaled_width();
coord_t ext_perimeter_spacing = this->ext_perimeter_flow.scaled_spacing();
coord_t ext_perimeter_spacing2 = scaled<coord_t>(0.5f * (this->ext_perimeter_flow.spacing() + this->perimeter_flow.spacing()));
// overhang perimeters
m_mm3_per_mm_overhang = this->overhang_flow.mm3_per_mm();
@ -445,13 +446,14 @@ void PerimeterGenerator::process_arachne()
for (ExPolygon &ex : infill_contour)
ex.simplify_p(m_scaled_resolution, &pp);
// collapse too narrow infill areas
auto min_perimeter_infill_spacing = coord_t(solid_infill_spacing * (1. - INSET_OVERLAP_TOLERANCE));
const auto min_perimeter_infill_spacing = coord_t(solid_infill_spacing * (1. - INSET_OVERLAP_TOLERANCE));
const coord_t spacing = (perimeters.size() == 1) ? ext_perimeter_spacing2 : perimeter_spacing;
// append infill areas to fill_surfaces
this->fill_surfaces->append(
offset_ex(offset2_ex(
union_ex(pp),
float(-min_perimeter_infill_spacing / 2.),
float(min_perimeter_infill_spacing / 2.)), float(inset)),
offset2_ex(
union_ex(pp),
float(- min_perimeter_infill_spacing / 2. - spacing / 2.),
float(inset + min_perimeter_infill_spacing / 2. + spacing / 2.)),
stInternal);
}
}