mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 12:41:18 -07:00 
			
		
		
		
	
		
			
				
	
	
		
			53 lines
		
	
	
	
		
			868 B
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
	
		
			868 B
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/perl -i~
 | 
						|
 | 
						|
use strict;
 | 
						|
use warnings;
 | 
						|
 | 
						|
my %lastpos = (X => 10000, Y => 10000, Z => 10000, E => 10000, F => 10000);
 | 
						|
my %pos = (X => 0, Y => 0, Z => 0, E => 0, F => 0);
 | 
						|
 | 
						|
my $mindist = 0.33;
 | 
						|
 | 
						|
my $mindistz = 0.005;
 | 
						|
 | 
						|
my $mindistsq = $mindist * $mindist;
 | 
						|
 | 
						|
sub dist {
 | 
						|
	my $sq = 0;
 | 
						|
	for (qw/X Y Z E/) {
 | 
						|
		$sq += ($pos{$_} - $lastpos{$_}) ** 2;
 | 
						|
	}
 | 
						|
	return $sq;
 | 
						|
}
 | 
						|
 | 
						|
while (<>) {
 | 
						|
	if (m#\bG[01]\b#) {
 | 
						|
		while (m#([XYZEF])(\d+(\.\d+)?)#gi) {
 | 
						|
			$pos{uc $1} = $2;
 | 
						|
		}
 | 
						|
		if (
 | 
						|
				(
 | 
						|
					/X/ &&
 | 
						|
					/Y/ &&
 | 
						|
					(dist() >= $mindistsq)
 | 
						|
				) ||
 | 
						|
				(abs($pos{Z} - $lastpos{Z}) > $mindistz) ||
 | 
						|
				(!/X/ || !/Y/)
 | 
						|
			) {
 | 
						|
			print;
 | 
						|
			%lastpos = %pos;
 | 
						|
		}
 | 
						|
		elsif (($pos{F} - $lastpos{F}) != 0) {
 | 
						|
			printf "G1 F%s\n", $pos{F};
 | 
						|
			$lastpos{F} = $pos{F};
 | 
						|
		}
 | 
						|
	}
 | 
						|
	else {
 | 
						|
		if (m#\bG92\b#) {
 | 
						|
			while (m#([XYZEF])(\d+(\.\d+)?)#gi) {
 | 
						|
				$lastpos{uc $1} = $2;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		print;
 | 
						|
	}
 | 
						|
}
 |