mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	Move Slic3r::Test::GCodeReader to Slic3r::GCode::Reader
This commit is contained in:
		
							parent
							
								
									ece6dd8a0b
								
							
						
					
					
						commit
						baa1a8c736
					
				
					 11 changed files with 75 additions and 72 deletions
				
			
		
							
								
								
									
										66
									
								
								lib/Slic3r/GCode/Reader.pm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								lib/Slic3r/GCode/Reader.pm
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,66 @@
 | 
			
		|||
package Slic3r::GCode::Reader;
 | 
			
		||||
use Moo;
 | 
			
		||||
 | 
			
		||||
has 'gcode' => (is => 'ro', required => 1);
 | 
			
		||||
has 'X' => (is => 'rw', default => sub {0});
 | 
			
		||||
has 'Y' => (is => 'rw', default => sub {0});
 | 
			
		||||
has 'Z' => (is => 'rw', default => sub {0});
 | 
			
		||||
has 'E' => (is => 'rw', default => sub {0});
 | 
			
		||||
has 'F' => (is => 'rw', default => sub {0});
 | 
			
		||||
 | 
			
		||||
our $Verbose = 0;
 | 
			
		||||
my @AXES = qw(X Y Z E);
 | 
			
		||||
 | 
			
		||||
sub parse {
 | 
			
		||||
    my $self = shift;
 | 
			
		||||
    my ($cb) = @_;
 | 
			
		||||
    
 | 
			
		||||
    foreach my $raw_line (split /\R+/, $self->gcode) {
 | 
			
		||||
        print "$raw_line\n" if $Verbose || $ENV{SLIC3R_TESTS_GCODE};
 | 
			
		||||
        my $line = $raw_line;
 | 
			
		||||
        $line =~ s/\s*;(.*)//; # strip comment
 | 
			
		||||
        next if $line eq '';
 | 
			
		||||
        my %info = (comment => $1, raw => $raw_line);
 | 
			
		||||
        
 | 
			
		||||
        # parse command
 | 
			
		||||
        my ($command, @args) = split /\s+/, $line;
 | 
			
		||||
        my %args = map { /([A-Z])(.*)/; ($1 => $2) } @args;
 | 
			
		||||
        
 | 
			
		||||
        # check retraction
 | 
			
		||||
        if ($command =~ /^G[01]$/) {
 | 
			
		||||
            foreach my $axis (@AXES) {
 | 
			
		||||
                if (exists $args{$axis}) {
 | 
			
		||||
                    $info{"dist_$axis"} = $args{$axis} - $self->$axis;
 | 
			
		||||
                    $info{"new_$axis"}  = $args{$axis};
 | 
			
		||||
                } else {
 | 
			
		||||
                    $info{"dist_$axis"} = 0;
 | 
			
		||||
                    $info{"new_$axis"}  = $self->$axis;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            $info{dist_XY} = Slic3r::Line->new([0,0], [@info{qw(dist_X dist_Y)}])->length;
 | 
			
		||||
            if (exists $args{E}) {
 | 
			
		||||
                if ($info{dist_E} > 0) {
 | 
			
		||||
                    $info{extruding} = 1;
 | 
			
		||||
                } elsif ($info{dist_E} < 0) {
 | 
			
		||||
                    $info{retracting} = 1
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                $info{travel} = 1;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        # run callback
 | 
			
		||||
        $cb->($self, $command, \%args, \%info);
 | 
			
		||||
        
 | 
			
		||||
        # update coordinates
 | 
			
		||||
        if ($command =~ /^(?:G[01]|G92)$/) {
 | 
			
		||||
            for (@AXES, 'F') {
 | 
			
		||||
                $self->$_($args{$_}) if exists $args{$_};
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        # TODO: update temperatures
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue