mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	 6f28818f87
			
		
	
	
		6f28818f87
		
	
	
	
	
		
			
			"Unicode char like for example "ł" crush app when used in profile name" https://github.com/prusa3d/Slic3r/issues/388 The Prusa3D binary builds are missing the UTF8 libraries. To avoid having to bundle them, the case sensitive regexes testing file suffixes were replaced with explicit enumeration of lower / upper case letters. While crude, it avoids triggering the UTF8 library.
		
			
				
	
	
		
			105 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
| #!/usr/bin/perl
 | |
| # This script exports model slices to a PDF file as solid fills, one per page
 | |
| 
 | |
| use strict;
 | |
| use warnings;
 | |
| 
 | |
| BEGIN {
 | |
|     use FindBin;
 | |
|     use lib "$FindBin::Bin/../lib";
 | |
| }
 | |
| 
 | |
| use Getopt::Long qw(:config no_auto_abbrev);
 | |
| use PDF::API2;
 | |
| use Slic3r;
 | |
| use Slic3r::Geometry qw(scale unscale X Y);
 | |
| 
 | |
| use constant mm => 25.4 / 72;
 | |
| 
 | |
| my %opt = ();
 | |
| {
 | |
|     my %options = (
 | |
|         'help'                  => sub { usage() },
 | |
|         'output|o=s'            => \$opt{output_file},
 | |
|         'layer-height|h=f'      => \$opt{layer_height},
 | |
|     );
 | |
|     GetOptions(%options) or usage(1);
 | |
|     $ARGV[0] or usage(1);
 | |
| }
 | |
| 
 | |
| {
 | |
|     # prepare config
 | |
|     my $config = Slic3r::Config->new;
 | |
|     $config->set('layer_height', $opt{layer_height}) if $opt{layer_height};
 | |
|     
 | |
|     # read model
 | |
|     my $model = Slic3r::Model->read_from_file(my $input_file = $ARGV[0]);
 | |
|     
 | |
|     # init print object
 | |
|     my $sprint = Slic3r::Print::Simple->new(
 | |
|         print_center => [0,0],
 | |
|     );
 | |
|     $sprint->apply_config($config);
 | |
|     $sprint->set_model($model);
 | |
|     my $print = $sprint->_print;
 | |
|     
 | |
|     # compute sizes
 | |
|     my $bb = $print->bounding_box;
 | |
|     my $size = $bb->size;
 | |
|     my $mediabox = [ map unscale($_)/mm, @{$size} ];
 | |
|     
 | |
|     # init PDF
 | |
|     my $pdf = PDF::API2->new();
 | |
|     my $color = $pdf->colorspace_separation('RDG_GLOSS', 'darkblue');
 | |
|     
 | |
|     # slice and build output geometry
 | |
|     $_->slice for @{$print->objects};
 | |
|     foreach my $object (@{ $print->objects }) {
 | |
|         my $shift = $object->_shifted_copies->[0];
 | |
|         $shift->translate(map $_/2, @$size);
 | |
|         
 | |
|         foreach my $layer (@{ $object->layers }) {
 | |
|             my $page = $pdf->page();
 | |
|             $page->mediabox(@$mediabox);
 | |
|             my $content = $page->gfx;
 | |
|             $content->fillcolor($color, 1);
 | |
|         
 | |
|             foreach my $expolygon (@{$layer->slices}) {
 | |
|                 $expolygon = $expolygon->clone;
 | |
|                 $expolygon->translate(@$shift);
 | |
|                 $content->poly(map { unscale($_->x)/mm, unscale($_->y)/mm } @{$expolygon->contour});  #)
 | |
|                 $content->close;
 | |
|                 foreach my $hole (@{$expolygon->holes}) {
 | |
|                     $content->poly(map { unscale($_->x)/mm, unscale($_->y)/mm } @$hole);  #)
 | |
|                     $content->close;
 | |
|                 }
 | |
|                 $content->fill;  # non-zero by default
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     # write output file
 | |
|     my $output_file = $opt{output_file};
 | |
|     if (!defined $output_file) {
 | |
|         $output_file = $input_file;
 | |
|         $output_file =~ s/\.(?:[sS][tT][lL])$/.pdf/;
 | |
|     }
 | |
|     $pdf->saveas($output_file);
 | |
|     printf "PDF file written to %s\n", $output_file;
 | |
| }
 | |
| 
 | |
| sub usage {
 | |
|     my ($exit_code) = @_;
 | |
|     
 | |
|     print <<"EOF";
 | |
| Usage: pdf-slices.pl [ OPTIONS ] file.stl
 | |
| 
 | |
|     --help              Output this usage screen and exit
 | |
|     --output, -o        Write to the specified file
 | |
|     --layer-height, -h  Use the specified layer height
 | |
|     
 | |
| EOF
 | |
|     exit ($exit_code || 0);
 | |
| }
 | |
| 
 | |
| __END__
 |