diff --git a/sl2/README b/sl2/README index 75d90e6..1eed86b 100644 --- a/sl2/README +++ b/sl2/README @@ -6,3 +6,7 @@ were then falsely closed and yielded bogus toolpaths. This slicer uses very strict conditions for horizontality: all the points of a horizontal facet must have identical Z coordinates. It also implicitly ensures that all paths are closed. + +sl2/slicer.pl supports the same command-line options as sfc/slicer.py +and can be used as drop-in replacement, provided that the toolpaths +are re-aligned afterwards. diff --git a/sl2/slicer.pl b/sl2/slicer.pl index 58ecfe8..808fe4c 100755 --- a/sl2/slicer.pl +++ b/sl2/slicer.pl @@ -13,12 +13,62 @@ $epsilon = 0.0001; # cutting offset -$height = 10; # height of workpiece -$margin = 5; # margin of workpiece box +$height = undef; # height of workpiece +$margin = undef; # margin of workpiece box $end = 0; # offset to add at the last layer -$flip = 1; # flip piece -$z0 = -35; # reference tool position -$z_step = 1; +$flip = 0; # flip piece +$z_step = undef; # maximum increase of milling depth + + +#----- Command-line processing ------------------------------------------------ + + +sub usage +{ + print STDERR <<"EOF"; +usage: $0 [-a (top|bottom)(+|-)offset] [-f] [-h height] + [-m tolerance] [-p piece_distance] [-o z_offset] [-s max_step] [file.stl] + + -a alignment TO DO + -f flip the model around the Y axis + -h height workpiece height (default: use model dimensions) + -m tolerance compatibility with sfc/slicer.py, has no meaning here + -p piece_distance + draw a rectangular workpiece at the specified xy distance + around the model (default: none) + -o z_offset Z adjustment of final layer + -s max_step maximum Z step (default: unlimited) +EOF + exit(1); +} + + +while ($ARGV[0] =~ /^-/) { + my $opt = shift @ARGV; + if ($opt eq "-a") { + # @@@ implement later + shift @ARGV; + } elsif ($opt eq "-f") { + $flip = 1; + } elsif ($opt eq "-h") { + $height = shift @ARGV; + &usage unless defined $height; + } elsif ($opt eq "-m") { + # @@@ not used - support for compatibility + shift @ARGV; + } elsif ($opt eq "-o") { + $end = shift @ARGV; + &usage unless defined $end; + } elsif ($opt eq "-p") { + $margin = shift @ARGV; + &usage unless defined $margin; + } elsif ($opt eq "-s") { + $z_step = shift @ARGV; + &usage unless defined $z_step; + } else { + &usage; + } +} #----- Read the STL mesh ------------------------------------------------------ @@ -63,9 +113,11 @@ print STDERR "bbox\t($xmin, $ymin, $zmin)\n\t($xmax, $ymax, $zmax)\n"; #----- Calculate Z offset ----------------------------------------------------- +$height = $zmax - $zmin unless defined $height; + # align with bottom (zmin == 0), z_pos = height - zoff -$z_off = $z0 - $zmin - $height; +$z_off = -$zmin - $height; $z_pos = $height + $zmin;