From 7e52650430a31610891af7bffad02bedf3be3e5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= Date: Mon, 25 Apr 2022 09:25:05 +0200 Subject: [PATCH] Fixed extrusion width calculation. --- src/libslic3r/PerimeterGenerator.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 147e81e80a..26838e34f7 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -282,21 +282,22 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime void PerimeterGenerator::process_arachne() { // other perimeters - m_mm3_per_mm = this->perimeter_flow.mm3_per_mm(); - coord_t perimeter_width = this->perimeter_flow.scaled_width(); + m_mm3_per_mm = this->perimeter_flow.mm3_per_mm(); + 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(); + 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(); // overhang perimeters - m_mm3_per_mm_overhang = this->overhang_flow.mm3_per_mm(); + m_mm3_per_mm_overhang = this->overhang_flow.mm3_per_mm(); // solid infill - coord_t solid_infill_spacing = this->solid_infill_flow.scaled_spacing(); + coord_t solid_infill_spacing = this->solid_infill_flow.scaled_spacing(); // prepare grown lower layer slices for overhang detection - if (this->lower_slices != NULL && this->config->overhangs) { + if (this->lower_slices != nullptr && this->config->overhangs) { // We consider overhang any part where the entire nozzle diameter is not supported by the // lower layer, so we take lower slices and offset them by half the nozzle diameter used // in the current layer @@ -309,11 +310,11 @@ void PerimeterGenerator::process_arachne() for (const Surface &surface : this->slices->surfaces) { // detect how many perimeters must be generated for this island int loop_number = this->config->perimeters + surface.extra_perimeters - 1; // 0-indexed loops - ExPolygons last = union_ex(surface.expolygon.simplify_p(m_scaled_resolution)); + ExPolygons last = offset_ex(surface.expolygon.simplify_p(m_scaled_resolution), - float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.)); Polygons last_p = to_polygons(last); - coord_t bead_width_0 = ext_perimeter_width; - coord_t bead_width_x = perimeter_width; + coord_t bead_width_0 = ext_perimeter_spacing; + coord_t bead_width_x = perimeter_spacing; coord_t wall_0_inset = 0; Arachne::WallToolPaths wallToolPaths(last_p, bead_width_0, bead_width_x, coord_t(loop_number + 1), wall_0_inset, *this->object_config); @@ -440,9 +441,9 @@ void PerimeterGenerator::process_arachne() (loop_number < 0) ? 0 : (loop_number == 0) ? // one loop - ext_perimeter_width: + ext_perimeter_spacing: // two or more loops? - perimeter_width; + perimeter_spacing; inset = coord_t(scale_(this->config->get_abs_value("infill_overlap", unscale(inset)))); Polygons pp;