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
@@ -22,8 +121,15 @@ G90 ; use absolute coordinates
 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
@@ -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
+
 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
@@ -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 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
+
 G92 E0
 G1 X65.502 Y67.998
 G1 Z0.400