chiark / gitweb /
size-tests - wip - movement generator in separate file
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 12 Aug 2012 16:48:35 +0000 (17:48 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 12 Aug 2012 16:48:35 +0000 (17:48 +0100)
Makefile
manual-gcode-generator [new file with mode: 0755]
size-tests.m-g [changed mode: 0755->0644]

index 47cfc9f2c040e7cfbcbc0f1cb67f7ca2ef896712..881588b98529a9c85a47e44470ef609df2143776 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -12,3 +12,5 @@ default:
 %.gcode:       $(CONFIG) %.stl
                $(SLIC3R) --load $^ --output $@
 
 %.gcode:       $(CONFIG) %.stl
                $(SLIC3R) --load $^ --output $@
 
+%.gcode:       manual-gcode-generator %.m-g
+               ./$^ >$@.new && mv -f $@.new $@
diff --git a/manual-gcode-generator b/manual-gcode-generator
new file mode 100755 (executable)
index 0000000..c9e452e
--- /dev/null
@@ -0,0 +1,132 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+our @array;
+our %procs;
+
+sub readdata () {
+    my $l = '';
+    my $current = \@array;
+    while (<>) {
+       chomp or die;
+       s/\s+$//;
+       s/^\!\s*/!/;
+       $l .= $_;
+       next if $l =~ s/\\$//;
+
+       $_=$l; $l='';
+       if (m/^\!(\w+)\s*\(\)\s*\{$/) {
+           my $pname=$1;
+           die if $current ne \@array;
+           die if exists $procs{$pname};
+           $current = $procs{$pname} = [];
+           next;
+       }
+       if (m/^\!\}$/) {
+           $current = \@array;
+           next;
+       }
+       push @$current, $_;
+    }
+}
+readdata();
+
+our %c;
+
+sub defvar ($;$) {
+    my ($cv,$v) = @_;
+    $c{$cv} = $v;
+}
+
+defvar('extruderate',0.097200);
+defvar('feedrate',540);
+defvar('jerkfeedrate',7800);
+defvar('retract',4.5);
+defvar('restart',4.5);
+defvar('restartfeedrate',1800);
+defvar('retractfeedrate',1800);
+defvar('movefeedrate',7800);
+defvar('zlift',0.1);
+defvar('zprint');
+
+sub float_g ($) {
+    my ($f) = @_;
+    return sprintf "%.5f", $f;
+}
+sub coords_g ($) {
+    my ($coords) = @_;
+    return "X".float_g($coords->[0])." Y".float_g($coords->[1]);
+}
+
+sub p ($) { print "$_[0]" or die $!; }
+sub pl ($) { p("$_[0]\n"); }
+
+sub proc ($);
+
+sub proc ($) {
+    my ($aref) = @_;
+    local ($_);
+    foreach (@$aref) {
+       if (!m/^\!/) {
+           pl($_);
+           next;
+       }
+       pl(";$_");
+       if (m/^\!(\w+)\s*\(\)$/) {
+           my $pname = $1;
+           die "$pname ?" unless $procs{$pname};
+           proc($procs{$pname});
+       } elsif (m/^\!draw\s+/) {
+           my @coords = split /\s+/, $';
+           my @undefs = grep { !defined $c{$_} } qw(zprint);
+           die "@undefs ?" if @undefs;
+           @coords = map {
+               my $jerk = s/^\*//;
+               m/\,/ or die $!;
+               [ $`, $', !!$jerk ]; # '];
+           } @coords;
+           my $extrudepos=$c{restart};
+           pl("G92 E0");
+           my $zmove=$c{zprint}+$c{zlift};
+           pl("G1 F$c{movefeedrate} Z$zmove");
+           pl("G1 ".coords_g($coords[0]));
+           pl("G1 Z$c{zprint}");
+           pl("G1 F$c{restartfeedrate} E".float_g($extrudepos));
+           my $lastfeedrate=-1;
+           foreach (my $ci=1; $ci<@coords; $ci++) {
+               my $g = "G1 ".coords_g($coords[$ci]);
+               my $wantfeedrate;
+               if (!$coords[$ci][2]) {
+                   $wantfeedrate=$c{feedrate};
+                   my $dist = 0;
+                   foreach my $xy (qw(0 1)) {
+                       my $dxy = $coords[$ci][$xy] - $coords[$ci-1][$xy];
+                       $dist += $dxy * $dxy;
+                   }
+                   $dist = sqrt($dist);
+                   $extrudepos += $dist * $c{extruderate};
+                   $g .= " E".float_g($extrudepos);
+               } else {
+                   $wantfeedrate=$c{jerkfeedrate};
+               }
+               if ($wantfeedrate != $lastfeedrate) {
+                   $g .= " F$wantfeedrate";
+                   $lastfeedrate = $wantfeedrate;
+               }
+               pl($g);
+           }
+           $extrudepos -= $c{retract};
+           pl("G1 F$c{retractfeedrate} E".float_g($extrudepos));
+           pl("G1 F$c{movefeedrate} Z$zmove");
+           next;
+       } elsif (m/^\!(\w+)\=(\S+)$/) {
+           die "$1 ?" unless exists $c{$1};
+           $c{$1} = $2;
+       } else {
+           die "$_ ?";
+       }
+    }
+}
+
+proc(\@array);
old mode 100755 (executable)
new mode 100644 (file)
index f3bfbd1..30667fd
@@ -1,139 +1,6 @@
-#!/usr/bin/perl -w
-
-use strict;
-
-our @array;
-our %procs;
-
-sub readdata () {
-    my $l = '';
-    my $current = \@array;
-    while (<DATA>) {
-       chomp or die;
-       s/\s+$//;
-       s/^\!\s*/!/;
-       $l .= $_;
-       next if $l =~ s/\\$//;
-
-       $_=$l; $l='';
-       if (m/^\!(\w+)\s*\(\)\s*\{$/) {
-           my $pname=$1;
-           die if $current ne \@array;
-           die if exists $procs{$pname};
-           $current = $procs{$pname} = [];
-           next;
-       }
-       if (m/^\!\}$/) {
-           $current = \@array;
-           next;
-       }
-       push @$current, $_;
-    }
-}
-readdata();
-
-our %c;
-
-sub defvar ($;$) {
-    my ($cv,$v) = @_;
-    $c{$cv} = $v;
-}
-
-defvar('extruderate',0.097200);
-defvar('feedrate',540);
-defvar('jerkfeedrate',7800);
-defvar('retract',4.5);
-defvar('restart',4.5);
-defvar('restartfeedrate',1800);
-defvar('retractfeedrate',1800);
-defvar('movefeedrate',7800);
-defvar('zlift',0.1);
-defvar('zprint');
-
-sub float_g ($) {
-    my ($f) = @_;
-    return sprintf "%.5f", $f;
-}
-sub coords_g ($) {
-    my ($coords) = @_;
-    return "X".float_g($coords->[0])." Y".float_g($coords->[1]);
-}
-
-sub p ($) { print "$_[0]" or die $!; }
-sub pl ($) { p("$_[0]\n"); }
-
-sub proc ($);
-
-sub proc ($) {
-    my ($aref) = @_;
-    local ($_);
-    foreach (@$aref) {
-       if (!m/^\!/) {
-           pl($_);
-           next;
-       }
-       pl(";$_");
-       if (m/^\!(\w+)\s*\(\)$/) {
-           my $pname = $1;
-           die "$pname ?" unless $procs{$pname};
-           proc($procs{$pname});
-       } elsif (m/^\!draw\s+/) {
-           my @coords = split /\s+/, $';
-           my @undefs = grep { !defined $c{$_} } qw(zprint);
-           die "@undefs ?" if @undefs;
-           @coords = map {
-               my $jerk = s/^\*//;
-               m/\,/ or die $!;
-               [ $`, $', !!$jerk ]; # '];
-           } @coords;
-           my $extrudepos=$c{restart};
-           pl("G92 E0");
-           my $zmove=$c{zprint}+$c{zlift};
-           pl("G1 F$c{movefeedrate} Z$zmove");
-           pl("G1 ".coords_g($coords[0]));
-           pl("G1 Z$c{zprint}");
-           pl("G1 F$c{restartfeedrate} E".float_g($extrudepos));
-           my $lastfeedrate=-1;
-           foreach (my $ci=1; $ci<@coords; $ci++) {
-               my $g = "G1 ".coords_g($coords[$ci]);
-               my $wantfeedrate;
-               if (!$coords[$ci][2]) {
-                   $wantfeedrate=$c{feedrate};
-                   my $dist = 0;
-                   foreach my $xy (qw(0 1)) {
-                       my $dxy = $coords[$ci][$xy] - $coords[$ci-1][$xy];
-                       $dist += $dxy * $dxy;
-                   }
-                   $dist = sqrt($dist);
-                   $extrudepos += $dist * $c{extruderate};
-                   $g .= " E".float_g($extrudepos);
-               } else {
-                   $wantfeedrate=$c{jerkfeedrate};
-               }
-               if ($wantfeedrate != $lastfeedrate) {
-                   $g .= " F$wantfeedrate";
-                   $lastfeedrate = $wantfeedrate;
-               }
-               pl($g);
-           }
-           $extrudepos -= $c{retract};
-           pl("G1 F$c{retractfeedrate} E".float_g($extrudepos));
-           pl("G1 F$c{movefeedrate} Z$zmove");
-           next;
-       } elsif (m/^\!(\w+)\=(\S+)$/) {
-           die "$1 ?" unless exists $c{$1};
-           $c{$1} = $2;
-       } else {
-           die "$_ ?";
-       }
-    }
-}
-
-proc(\@array);
-
-__DATA__
 ; -*- fundamental -*-
 
 ; -*- fundamental -*-
 
+; slic3r originally produced this, with these comments, and then we edited:
 ; layer_height = 0.4
 ; perimeters = 3
 ; solid_layers = 3
 ; layer_height = 0.4
 ; perimeters = 3
 ; solid_layers = 3