diff --git a/lib/Slic3r/Print.pm b/lib/Slic3r/Print.pm index 6e2009f05d..bdb393b14e 100644 --- a/lib/Slic3r/Print.pm +++ b/lib/Slic3r/Print.pm @@ -86,6 +86,9 @@ sub new_from_mesh { # build surfaces from sparse lines $layer->make_surfaces($mesh->make_loops($layer)); + + # free memory + $layer->lines(undef); } # detect slicing errors @@ -244,7 +247,11 @@ sub detect_surfaces_type { (expolygon => $_, surface_type => $surface->surface_type), @$intersection; } + + # free memory + @{$layer->fill_boundaries} = (); } + } sub discover_horizontal_shells { diff --git a/lib/Slic3r/Skein.pm b/lib/Slic3r/Skein.pm index f8ad0a1998..7719274ecb 100644 --- a/lib/Slic3r/Skein.pm +++ b/lib/Slic3r/Skein.pm @@ -77,6 +77,9 @@ sub go { $self->status_cb->(60, "Generating horizontal shells..."); $print->discover_horizontal_shells; + # free memory + @{$_->surfaces} = () for @{$print->layers}; + # combine fill surfaces to honor the "infill every N layers" option $self->status_cb->(70, "Combining infill..."); $print->infill_every_layers; @@ -112,6 +115,9 @@ sub go { } } + # free memory + @{$_->fill_surfaces} = () for @{$print->layers}; + # output everything to a GCODE file $self->status_cb->(90, "Exporting GCODE..."); $print->export_gcode($self->expanded_output_filepath);