From: Ian Jackson Date: Sun, 12 Aug 2012 16:12:15 +0000 (+0100) Subject: size-tests - wip - movement generator seems to work a bit X-Git-Tag: filamentspool-v2-release~954 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=reprap-play.git;a=commitdiff_plain;h=8857a4a34caef63793d84b321fab7ae5662f2672 size-tests - wip - movement generator seems to work a bit --- diff --git a/size-tests.m-g b/size-tests.m-g index 3f3b38f..36cabf8 100755 --- a/size-tests.m-g +++ b/size-tests.m-g @@ -4,46 +4,76 @@ use strict; our @array = ; -our $height; +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$coords->[0] Y$coords->[1]"; + 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+/, $_; - my @coords = map { + @coords = map { my $jerk = s/^\*//; m/\,/ or die $!; [ $`, $', !!$jerk ]; # ']; } @coords; pl("G92 E0"); - pl("G1 F$movefeedrate Z$zmove"); + pl("G1 F$c{movefeedrate} Z$c{zmove}"); pl("G1 ".coords_g($coords[0])); - pl("G1 Z$zprint"); - pl("G1 F$restartfeedrate E$restart"); + 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=$feedrate; + $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 * $extruderate; - $g .= " E$extrudepos"; + $extrudepos += $dist * $c{extruderate}; + $g .= " E".float_g($extrudepos); } else { - $wantfeedrate=$jerkfeedrate; + $wantfeedrate=$c{jerkfeedrate}; } if ($wantfeedrate != $lastfeedrate) { $g .= " F$wantfeedrate"; @@ -51,11 +81,16 @@ sub proc ($$) { } pl($g); } - $extrudepos -= $retract; - pl("G1 F$retractfeedrate E$extrudepos"); - pl("G1 F$movefeedrate Z$zmove"); + $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 "$_ ?"; } - print or die $!; } } @@ -87,16 +122,8 @@ G21 ; set units to millimeters G92 E0 M82 ; use absolute distances for extrusion -! $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 +!zprint=0.4 +!zmove=0.5 !draw 10,10 100,10