chiark / gitweb /
size-tests - wip - movement generator
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 12 Aug 2012 15:21:30 +0000 (16:21 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 12 Aug 2012 15:21:30 +0000 (16:21 +0100)
size-tests.m-g [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index 1b8d50a..3f3b38f
@@ -1,3 +1,67 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+our @array = <DATA>;
+
+our $height;
+
+sub coords_g ($) {
+    my ($coords) = @_;
+    return "X$coords->[0] Y$coords->[1]";
+}
+
+sub proc ($$) {
+    my ($start,$end) = @_;
+    foreach my $lno ($start..$end) {
+       $_ = $array[$lno];
+       if (s/^\!draw\s+//) {
+           my @coords = split /\s+/, $_;
+           my @coords = map {
+               my $jerk = s/^\*//;
+               m/\,/ or die $!;
+               [ $`, $', !!$jerk ]; # '];
+           } @coords;
+           pl("G92 E0");
+           pl("G1 F$movefeedrate Z$zmove");
+           pl("G1 ".coords_g($coords[0]));
+           pl("G1 Z$zprint");
+           pl("G1 F$restartfeedrate E$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=$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 * $extruderate;
+                   $g .= " E$extrudepos";
+               } else {
+                   $wantfeedrate=$jerkfeedrate;
+               }
+               if ($wantfeedrate != $lastfeedrate) {
+                   $g .= " F$wantfeedrate";
+                   $lastfeedrate = $wantfeedrate;
+               }
+               pl($g);
+           }
+           $extrudepos -= $retract;
+           pl("G1 F$retractfeedrate E$extrudepos");
+           pl("G1 F$movefeedrate Z$zmove");
+       }
+       print or die $!;
+    }
+}
+
+proc(0, scalar @array);
+
+__DATA__
 ; -*- fundamental -*-
 
 ; layer_height = 0.4
@@ -23,7 +87,17 @@ G21 ; set units to millimeters
 G92 E0
 M82 ; use absolute distances for extrusion
 
-G1 Z0.400 F7800.000
+! $extruderate=0.97200
+! $feedrate=540
+! $jerkfeedrate=7800
+! $retract=4.5
+! $restart=4.5
+! $restartfeedrate=1800
+! $retractfeedrate=1800
+! $movefeedrate=7800
+! $zprint=0.4
+! $zmove=0.5
+
 !draw 10,10 100,10