mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	Bugfix: ineffective scale() method in recently created BoundingBox objects caused wrong positioning for scaled objects in plater. Includes regression test. #1171
This commit is contained in:
		
							parent
							
								
									6ae7666006
								
							
						
					
					
						commit
						8e0e03247d
					
				
					 2 changed files with 33 additions and 5 deletions
				
			
		|  | @ -7,6 +7,26 @@ has 'extents' => (is => 'ro', required => 1); | ||||||
| 
 | 
 | ||||||
| sub clone { Storable::dclone($_[0]) } | sub clone { Storable::dclone($_[0]) } | ||||||
| 
 | 
 | ||||||
|  | # 2D | ||||||
|  | sub new_from_points { | ||||||
|  |     my $class = shift; | ||||||
|  |     my ($points) = @_; | ||||||
|  |      | ||||||
|  |     my $bb = [ Slic3r::Geometry::bounding_box($points) ]; | ||||||
|  |     return $class->new(extents => [ | ||||||
|  |         [ $bb->[X1], $bb->[X2] ], | ||||||
|  |         [ $bb->[Y1], $bb->[Y2] ], | ||||||
|  |     ]); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # 3D | ||||||
|  | sub new_from_points_3D { | ||||||
|  |     my $class = shift; | ||||||
|  |     my ($points) = @_; | ||||||
|  |      | ||||||
|  |     return $class->new(extents => [ Slic3r::Geometry::bounding_box_3D($points) ]); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| # four-arguments 2D bb | # four-arguments 2D bb | ||||||
| sub bb { | sub bb { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  | @ -39,9 +59,9 @@ sub scale { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|     my ($factor) = @_; |     my ($factor) = @_; | ||||||
|      |      | ||||||
|     $_ *= $factor |     for (@{$self->extents}) { | ||||||
|         for map @$_[MIN,MAX], |         $_ *= $factor for @$_[MIN,MAX]; | ||||||
|             grep $_, @{$self->extents}[X,Y,Z]; |     } | ||||||
|      |      | ||||||
|     $self; |     $self; | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								t/geometry.t
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								t/geometry.t
									
										
									
									
									
								
							|  | @ -2,7 +2,7 @@ use Test::More; | ||||||
| use strict; | use strict; | ||||||
| use warnings; | use warnings; | ||||||
| 
 | 
 | ||||||
| plan tests => 23; | plan tests => 24; | ||||||
| 
 | 
 | ||||||
| BEGIN { | BEGIN { | ||||||
|     use FindBin; |     use FindBin; | ||||||
|  | @ -174,3 +174,11 @@ is Slic3r::Geometry::can_connect_points(@$points, $polygons), 0, 'can_connect_po | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #========================================================== | #========================================================== | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |     my $bb = Slic3r::Geometry::BoundingBox->new_from_points([ [0, 1], [10, 2], [20, 2] ]); | ||||||
|  |     $bb->scale(2); | ||||||
|  |     is_deeply $bb->extents, [ [0,40], [2,4] ], 'bounding box is scaled correctly'; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #========================================================== | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alessandro Ranellucci
						Alessandro Ranellucci