mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| #!/usr/bin/perl
 | |
| 
 | |
| use strict;
 | |
| use warnings;
 | |
| 
 | |
| use Slic3r::XS;
 | |
| use Test::More tests => 39;
 | |
| 
 | |
| use constant PI         => 4 * atan2(1, 1);
 | |
| use constant EPSILON    => 1E-4;
 | |
| 
 | |
| my $points = [
 | |
|     [100, 100],
 | |
|     [200, 100],
 | |
| ];
 | |
| 
 | |
| my $line = Slic3r::Line->new(@$points);
 | |
| is_deeply $line->pp, $points, 'line roundtrip';
 | |
| 
 | |
| is ref($line->arrayref), 'ARRAY', 'line arrayref is unblessed';
 | |
| isa_ok $line->[0], 'Slic3r::Point::Ref', 'line point is blessed';
 | |
| 
 | |
| {
 | |
|     my $clone = $line->clone;
 | |
|     $clone->reverse;
 | |
|     is_deeply $clone->pp, [ reverse @$points ], 'reverse';
 | |
| }
 | |
| 
 | |
| {
 | |
|     my $line2 = Slic3r::Line->new($line->a->clone, $line->b->clone);
 | |
|     is_deeply $line2->pp, $points, 'line roundtrip with cloned points';
 | |
| }
 | |
| 
 | |
| {
 | |
|     my $clone = $line->clone;
 | |
|     $clone->translate(10, -5);
 | |
|     is_deeply $clone->pp, [
 | |
|         [110, 95],
 | |
|         [210, 95],
 | |
|     ], 'translate';
 | |
| }
 | |
| 
 | |
| {
 | |
|     ok +Slic3r::Line->new([0,0],[200,0])->parallel_to_line(Slic3r::Line->new([200,200],[0,200])), 'parallel_to';
 | |
| }
 | |
| 
 | |
| foreach my $base_angle (0, PI/4, PI/2, PI) {
 | |
|     my $line = Slic3r::Line->new([0,0], [100,0]);
 | |
|     $line->rotate($base_angle, [0,0]);
 | |
|     my $clone = $line->clone;
 | |
|     ok $line->parallel_to_line($clone), 'line is parallel to self';
 | |
|     $clone->reverse;
 | |
|     ok $line->parallel_to_line($clone), 'line is parallel to self + PI';
 | |
|     ok $line->parallel_to($line->direction), 'line is parallel to its direction';
 | |
|     ok $line->parallel_to($line->direction + PI), 'line is parallel to its direction + PI';
 | |
|     ok $line->parallel_to($line->direction - PI), 'line is parallel to its direction - PI';
 | |
|     {
 | |
|         my $line2 = $line->clone;
 | |
|         $line2->reverse;
 | |
|         ok $line->parallel_to_line($line2), 'line is parallel to its opposite';
 | |
|     }
 | |
|     {
 | |
|         my $line2 = $line->clone;
 | |
|         $line2->rotate(+(EPSILON)/2, [0,0]);
 | |
|         ok $line->parallel_to_line($line2), 'line is parallel within epsilon';
 | |
|     }
 | |
|     {
 | |
|         my $line2 = $line->clone;
 | |
|         $line2->rotate(-(EPSILON)/2, [0,0]);
 | |
|         ok $line->parallel_to_line($line2), 'line is parallel within epsilon';
 | |
|     }
 | |
| }
 | |
| 
 | |
| __END__
 | 
