From 4a9672bd88257d90e199fef1df5cae504ae1e20e Mon Sep 17 00:00:00 2001
From: Alessandro Ranellucci <aar@cpan.org>
Date: Sat, 28 Jan 2012 21:52:31 +0100
Subject: [PATCH] Use about 40% less memory

---
 lib/Slic3r/Print.pm | 7 +++++++
 lib/Slic3r/Skein.pm | 6 ++++++
 2 files changed, 13 insertions(+)

diff --git a/lib/Slic3r/Print.pm b/lib/Slic3r/Print.pm
index 6e2009f05..bdb393b14 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 f8ad0a199..7719274ec 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);