diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index 4f070140e8..97333677e8 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -543,19 +543,18 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive: flow_mm3_per_mm = new_flow.mm3_per_mm(); flow_width = new_flow.width(); } - auto fill_begin = uint32_t(layerm.fills().size()); // Save into layer. - if (ExtrusionEntityCollection *eec = nullptr; params.use_arachne) { + ExtrusionEntityCollection *eec = new ExtrusionEntityCollection(); + auto fill_begin = uint32_t(layerm.fills().size()); + // Only concentric fills are not sorted. + eec->no_sort = f->no_sort(); + if (params.use_arachne) { for (const ThickPolyline &thick_polyline : thick_polylines) { Flow new_flow = surface_fill.params.flow.with_spacing(float(f->spacing)); ExtrusionMultiPath multi_path = PerimeterGenerator::thick_polyline_to_multi_path(thick_polyline, surface_fill.params.extrusion_role, new_flow, scaled(0.05), float(SCALED_EPSILON)); // Append paths to collection. if (!multi_path.empty()) { - layerm.m_fills.entities.push_back(eec = new ExtrusionEntityCollection()); - // Only concentric fills are not sorted. - eec->no_sort = f->no_sort(); - if (multi_path.paths.front().first_point() == multi_path.paths.back().last_point()) eec->entities.emplace_back(new ExtrusionLoop(std::move(multi_path.paths))); else @@ -563,17 +562,19 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive: } } + if (!eec->empty()) + layerm.m_fills.entities.push_back(eec); + else + delete eec; + thick_polylines.clear(); } else { - layerm.m_fills.entities.push_back(eec = new ExtrusionEntityCollection()); - // Only concentric fills are not sorted. - eec->no_sort = f->no_sort(); - extrusion_entities_append_paths( eec->entities, std::move(polylines), ExtrusionAttributes{ surface_fill.params.extrusion_role, ExtrusionFlow{ flow_mm3_per_mm, float(flow_width), surface_fill.params.flow.height() } }); + layerm.m_fills.entities.push_back(eec); } insert_fills_into_islands(*this, uint32_t(surface_fill.region_id), fill_begin, uint32_t(layerm.fills().size())); }