mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	 2e55898d78
			
		
	
	
		2e55898d78
		
	
	
	
	
		
			
			Adjustment of GUI/3DBed.cpp,hpp to use the more stable triangulation algoritm derived from SGI glut. Fix of an extremely slow bridging calculation, caused by an extremely slow bridged area detection function, of which the results were never used. Fixes "slicing fails or takes too long #5974"
		
			
				
	
	
		
			108 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| #!/usr/bin/perl
 | |
| 
 | |
| use strict;
 | |
| use warnings;
 | |
| 
 | |
| use List::Util qw(first sum);
 | |
| use Slic3r::XS;
 | |
| use Test::More tests => 21;
 | |
| 
 | |
| use constant PI => 4 * atan2(1, 1);
 | |
| 
 | |
| my $square = [  # ccw
 | |
|     [100, 100],
 | |
|     [200, 100],
 | |
|     [200, 200],
 | |
|     [100, 200],
 | |
| ];
 | |
| my $hole_in_square = [  # cw
 | |
|     [140, 140],
 | |
|     [140, 160],
 | |
|     [160, 160],
 | |
|     [160, 140],
 | |
| ];
 | |
| 
 | |
| my $expolygon = Slic3r::ExPolygon->new($square, $hole_in_square);
 | |
| 
 | |
| ok $expolygon->is_valid, 'is_valid';
 | |
| is ref($expolygon->pp), 'ARRAY', 'expolygon pp is unblessed';
 | |
| is_deeply $expolygon->pp, [$square, $hole_in_square], 'expolygon roundtrip';
 | |
| 
 | |
| is ref($expolygon->arrayref), 'ARRAY', 'expolygon arrayref is unblessed';
 | |
| isa_ok $expolygon->[0], 'Slic3r::Polygon::Ref', 'expolygon polygon is blessed';
 | |
| isa_ok $expolygon->contour, 'Slic3r::Polygon::Ref', 'expolygon contour is blessed';
 | |
| isa_ok $expolygon->holes->[0], 'Slic3r::Polygon::Ref', 'expolygon hole is blessed';
 | |
| isa_ok $expolygon->[0][0], 'Slic3r::Point::Ref', 'expolygon point is blessed';
 | |
| 
 | |
| {
 | |
|     my $expolygon2 = $expolygon->clone;
 | |
|     my $polygon = $expolygon2->[0];
 | |
|     $polygon->scale(2);
 | |
|     is $expolygon2->[0][0][0], $polygon->[0][0], 'polygons are returned by reference';
 | |
| }
 | |
| 
 | |
| is_deeply $expolygon->clone->pp, [$square, $hole_in_square], 'clone';
 | |
| 
 | |
| is $expolygon->area, 100*100-20*20, 'area';
 | |
| 
 | |
| {
 | |
|     my $expolygon2 = $expolygon->clone;
 | |
|     $expolygon2->scale(2.5);
 | |
|     is_deeply $expolygon2->pp, [
 | |
|         [map [ 2.5*$_->[0], 2.5*$_->[1] ], @$square],
 | |
|         [map [ 2.5*$_->[0], 2.5*$_->[1] ], @$hole_in_square]
 | |
|         ], 'scale';
 | |
| }
 | |
| 
 | |
| {
 | |
|     my $expolygon2 = $expolygon->clone;
 | |
|     $expolygon2->translate(10, -5);
 | |
|     is_deeply $expolygon2->pp, [
 | |
|         [map [ $_->[0]+10, $_->[1]-5 ], @$square],
 | |
|         [map [ $_->[0]+10, $_->[1]-5 ], @$hole_in_square]
 | |
|         ], 'translate';
 | |
| }
 | |
| 
 | |
| {
 | |
|     my $expolygon2 = $expolygon->clone;
 | |
|     $expolygon2->rotate(PI/2, Slic3r::Point->new(150,150));
 | |
|     is_deeply $expolygon2->pp, [
 | |
|         [ @$square[1,2,3,0] ],
 | |
|         [ @$hole_in_square[3,0,1,2] ]
 | |
|         ], 'rotate around Point';
 | |
| }
 | |
| 
 | |
| {
 | |
|     my $expolygon2 = $expolygon->clone;
 | |
|     $expolygon2->rotate(PI/2, [150,150]);
 | |
|     is_deeply $expolygon2->pp, [
 | |
|         [ @$square[1,2,3,0] ],
 | |
|         [ @$hole_in_square[3,0,1,2] ]
 | |
|         ], 'rotate around pure-Perl Point';
 | |
| }
 | |
| 
 | |
| {
 | |
|     my $expolygon2 = $expolygon->clone;
 | |
|     $expolygon2->scale(2);
 | |
|     my $collection = Slic3r::ExPolygon::Collection->new($expolygon->pp, $expolygon2->pp);
 | |
|     is_deeply $collection->pp, [ $expolygon->pp, $expolygon2->pp ],
 | |
|         'expolygon collection (pure Perl) roundtrip';
 | |
|     
 | |
|     my $collection2 = Slic3r::ExPolygon::Collection->new($expolygon, $expolygon2);
 | |
|     is_deeply $collection->pp, $collection2->pp,
 | |
|         'expolygon collection (XS) roundtrip';
 | |
|     
 | |
|     $collection->clear;
 | |
|     is scalar(@$collection), 0, 'clear collection';
 | |
|     
 | |
|     $collection->append($expolygon);
 | |
|     is scalar(@$collection), 1, 'append to collection';
 | |
|     
 | |
|     my $exp = $collection->[0];
 | |
|     $exp->scale(3);
 | |
|     is $collection->[0][0][0][0], $exp->[0][0][0], 'collection items are returned by reference';
 | |
|     
 | |
|     is_deeply $collection->[0]->clone->pp, $collection->[0]->pp, 'clone collection item';
 | |
| }
 | |
| 
 | |
| __END__
 |