chiark / gitweb /
size-tests - wip - movement generator seems to work a bit
[reprap-play.git] / size-tests.m-g
old mode 100644 (file)
new mode 100755 (executable)
index 0529784..36cabf8
@@ -1,4 +1,103 @@
-; generated by Slic3r 0.9.1 on 2012-08-11 at 00:02:52
+#!/usr/bin/perl -w
+
+use strict;
+
+our @array = <DATA>;
+
+our %c;
+
+sub defvar ($;$) {
+    my ($cv,$v) = @_;
+    $c{$cv} = $v;
+}
+
+defvar('extruderate',0.97200);
+defvar('feedrate',540);
+defvar('jerkfeedrate',7800);
+defvar('retract',4.5);
+defvar('restart',4.5);
+defvar('restartfeedrate',1800);
+defvar('retractfeedrate',1800);
+defvar('movefeedrate',7800);
+defvar('zprint');
+defvar('zmove');
+
+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 ($$) {
+    my ($start,$end) = @_;
+    foreach my $lno ($start..$end) {
+       $_ = $array[$lno];
+       if (!m/^\!/) {
+           p($_);
+           next;
+       }
+       p(";$_");
+       if (s/^\!draw\s+//) {
+           my @undefs = grep { !defined $c{$_} } qw(zprint zmove);
+           die "@undefs ?" if @undefs;
+           my @coords = split /\s+/, $_;
+           @coords = map {
+               my $jerk = s/^\*//;
+               m/\,/ or die $!;
+               [ $`, $', !!$jerk ]; # '];
+           } @coords;
+           pl("G92 E0");
+           pl("G1 F$c{movefeedrate} Z$c{zmove}");
+           pl("G1 ".coords_g($coords[0]));
+           pl("G1 Z$c{zprint}");
+           pl("G1 F$c{restartfeedrate} E$c{restart}");
+           my $lastfeedrate=-1;
+           my $extrudepos=0;
+           foreach (my $ci=1; $ci<@coords; $ci++) {
+               my $g = "G1 ".coords_g($coords[$ci]);
+               my $wantfeedrate;
+               if (!$coords[$ci][3]) {
+                   $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$extrudepos");
+           pl("G1 F$c{movefeedrate} Z$c{zmove}");
+           next;
+       } elsif (m/^\!(\w+)\=(\S+)$/) {
+           die "$1 ?" unless exists $c{$1};
+           $c{$1} = $2;
+       } else {
+           die "$_ ?";
+       }
+    }
+}
+
+proc(0, scalar @array);
+
+__DATA__
+; -*- fundamental -*-
 
 ; layer_height = 0.4
 ; perimeters = 3
 
 ; layer_height = 0.4
 ; perimeters = 3
@@ -22,8 +121,15 @@ G90 ; use absolute coordinates
 G21 ; set units to millimeters
 G92 E0
 M82 ; use absolute distances for extrusion
 G21 ; set units to millimeters
 G92 E0
 M82 ; use absolute distances for extrusion
-G1 Z0.400 F7800.000
-G1 X52.950 Y47.500
+
+!zprint=0.4
+!zmove=0.5
+
+!draw 10,10 100,10
+
+
+
+G1 X10 Y10
 G1 F1800.000 E4.50000
 G1 X53.200 Y47.220 F540.000 E4.53648
 G1 X53.720 Y46.700 E4.60795
 G1 F1800.000 E4.50000
 G1 X53.200 Y47.220 F540.000 E4.53648
 G1 X53.720 Y46.700 E4.60795
@@ -174,16 +280,17 @@ G1 X53.140 Y48.190 E34.99963
 G1 X53.321 Y47.978 E35.02672
 G1 F1800.000 E30.52672
 G1 Z0.500 F7800.000
 G1 X53.321 Y47.978 E35.02672
 G1 F1800.000 E30.52672
 G1 Z0.500 F7800.000
+
 G92 E0
 G1 X68.498 Y79.498
 G1 Z0.400
 G1 F1800.000 E4.50000
 G92 E0
 G1 X68.498 Y79.498
 G1 Z0.400
 G1 F1800.000 E4.50000
-G1 X71.502 Y79.498 F540.000 E4.79199
-G1 X71.502 Y82.502 E5.08397
-G1 X68.498 Y82.502 E5.37596
-G1 X68.498 Y79.588 E5.65919
-G1 X67.899 Y78.899 F7800.000
-G1 X72.101 Y78.899 F540.000 E6.06760
+G1 X71.502 Y79.498 F540.000 E4.79199   dist 3.004 extrude .29199 rate .097200
+G1 X71.502 Y82.502 E5.08397            dist 3.004 extrude .29198
+G1 X68.498 Y82.502 E5.37596           dist 3.004 extrude .29199
+G1 X68.498 Y79.588 E5.65919            dist 2.914 extrude .28323 rate .097196
+G1 X67.899 Y78.899 F7800.000          dist 0.913 no extrude, fast
+G1 X72.101 Y78.899 F540.000 E6.06760   dist 4.202         .40841 rate .097194
 G1 X72.101 Y83.101 E6.47600
 G1 X67.899 Y83.101 E6.88441
 G1 X67.899 Y78.989 E7.28406
 G1 X72.101 Y83.101 E6.47600
 G1 X67.899 Y83.101 E6.88441
 G1 X67.899 Y78.989 E7.28406
@@ -191,9 +298,10 @@ G1 X67.300 Y78.300 F7800.000
 G1 X72.700 Y78.300 F540.000 E7.80888
 G1 X72.700 Y83.700 E8.33371
 G1 X67.300 Y83.700 E8.85853
 G1 X72.700 Y78.300 F540.000 E7.80888
 G1 X72.700 Y83.700 E8.33371
 G1 X67.300 Y83.700 E8.85853
-G1 X67.300 Y78.390 E9.37461
-G1 F1800.000 E4.87461
+G1 X67.300 Y78.390 E9.37461            dist 5.310         .51608 rate .097190
+G1 F1800.000 E4.87461                                    -4.5
 G1 Z0.500 F7800.000
 G1 Z0.500 F7800.000
+
 G92 E0
 G1 X65.502 Y67.998
 G1 Z0.400
 G92 E0
 G1 X65.502 Y67.998
 G1 Z0.400