mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	New ->translate() method for ExPolygon::XS
This commit is contained in:
		
							parent
							
								
									e0052b01d3
								
							
						
					
					
						commit
						3037b42b47
					
				
					 2 changed files with 27 additions and 4 deletions
				
			
		| 
						 | 
					@ -20,6 +20,7 @@ class ExPolygon
 | 
				
			||||||
    Polygons holes;
 | 
					    Polygons holes;
 | 
				
			||||||
    SV* arrayref();
 | 
					    SV* arrayref();
 | 
				
			||||||
    void scale(double factor);
 | 
					    void scale(double factor);
 | 
				
			||||||
 | 
					    void translate(double x, double y);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define scale_polygon(poly, factor) \
 | 
					#define scale_polygon(poly, factor) \
 | 
				
			||||||
| 
						 | 
					@ -28,6 +29,12 @@ class ExPolygon
 | 
				
			||||||
        (*pit).y *= factor; \
 | 
					        (*pit).y *= factor; \
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define translate_polygon(poly, x, y) \
 | 
				
			||||||
 | 
					    for (Polygon::iterator pit = (poly).begin(); pit != (poly).end(); ++pit) { \
 | 
				
			||||||
 | 
					        (*pit).x += x; \
 | 
				
			||||||
 | 
					        (*pit).y += y; \
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
ExPolygon::scale(double factor)
 | 
					ExPolygon::scale(double factor)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -37,6 +44,15 @@ ExPolygon::scale(double factor)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					ExPolygon::translate(double x, double y)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    translate_polygon(contour, x, y);
 | 
				
			||||||
 | 
					    for (Polygons::iterator it = holes.begin(); it != holes.end(); ++it) {
 | 
				
			||||||
 | 
					        translate_polygon(*it, x, y);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
perl2polygon(SV* poly_sv, Polygon& poly)
 | 
					perl2polygon(SV* poly_sv, Polygon& poly)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,7 @@ use strict;
 | 
				
			||||||
use warnings;
 | 
					use warnings;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use Slic3r::XS;
 | 
					use Slic3r::XS;
 | 
				
			||||||
use Test::More tests => 6;
 | 
					use Test::More tests => 7;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
my $square = [  # ccw
 | 
					my $square = [  # ccw
 | 
				
			||||||
    [100, 100],
 | 
					    [100, 100],
 | 
				
			||||||
| 
						 | 
					@ -30,10 +30,17 @@ my $clone = $expolygon->clone;
 | 
				
			||||||
is_deeply [ @$clone ], [$square, $hole_in_square], 'clone';
 | 
					is_deeply [ @$clone ], [$square, $hole_in_square], 'clone';
 | 
				
			||||||
# TODO: check that modifying the clone doesn't modify the original one
 | 
					# TODO: check that modifying the clone doesn't modify the original one
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$expolygon->scale(1.5);
 | 
					$expolygon->scale(2.5);
 | 
				
			||||||
is_deeply [ @$expolygon ], [
 | 
					is_deeply [ @$expolygon ], [
 | 
				
			||||||
    [map [ 1.5*$_->[0], 1.5*$_->[1] ], @$square],
 | 
					    [map [ 2.5*$_->[0], 2.5*$_->[1] ], @$square],
 | 
				
			||||||
    [map [ 1.5*$_->[0], 1.5*$_->[1] ], @$hole_in_square]
 | 
					    [map [ 2.5*$_->[0], 2.5*$_->[1] ], @$hole_in_square]
 | 
				
			||||||
    ], 'scale';
 | 
					    ], 'scale';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$expolygon->scale(1/2.5);
 | 
				
			||||||
 | 
					$expolygon->translate(10, -5);
 | 
				
			||||||
 | 
					is_deeply [ @$expolygon ], [
 | 
				
			||||||
 | 
					    [map [ $_->[0]+10, $_->[1]-5 ], @$square],
 | 
				
			||||||
 | 
					    [map [ $_->[0]+10, $_->[1]-5 ], @$hole_in_square]
 | 
				
			||||||
 | 
					    ], 'translate';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
__END__
 | 
					__END__
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue