mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	Different speed for external perimeters. #488
This commit is contained in:
		
							parent
							
								
									cc330932d6
								
							
						
					
					
						commit
						96a3234eaa
					
				
					 8 changed files with 33 additions and 11 deletions
				
			
		|  | @ -140,6 +140,12 @@ our $Options = { | |||
|         type    => 'f', | ||||
|         ratio_over => 'perimeter_speed', | ||||
|     }, | ||||
|     'external_perimeter_speed' => { | ||||
|         label   => 'External perimeters (mm/s or %)', | ||||
|         cli     => 'external-perimeter-speed=s', | ||||
|         type    => 'f', | ||||
|         ratio_over => 'perimeter_speed', | ||||
|     }, | ||||
|     'infill_speed' => { | ||||
|         label   => 'Infill (mm/s)', | ||||
|         cli     => 'infill-speed=f', | ||||
|  |  | |||
|  | @ -27,6 +27,7 @@ has 'speeds' => ( | |||
|         travel              => 60 * Slic3r::Config->get('travel_speed'), | ||||
|         perimeter           => 60 * Slic3r::Config->get('perimeter_speed'), | ||||
|         small_perimeter     => 60 * Slic3r::Config->get('small_perimeter_speed'), | ||||
|         external_perimeter  => 60 * Slic3r::Config->get('external_perimeter_speed'), | ||||
|         infill              => 60 * Slic3r::Config->get('infill_speed'), | ||||
|         solid_infill        => 60 * Slic3r::Config->get('solid_infill_speed'), | ||||
|         top_solid_infill    => 60 * Slic3r::Config->get('top_solid_infill_speed'), | ||||
|  | @ -38,6 +39,7 @@ has 'speeds' => ( | |||
| my %role_speeds = ( | ||||
|     &EXTR_ROLE_PERIMETER                    => 'perimeter', | ||||
|     &EXTR_ROLE_SMALLPERIMETER               => 'small_perimeter', | ||||
|     &EXTR_ROLE_EXTERNAL_PERIMETER           => 'external_perimeter', | ||||
|     &EXTR_ROLE_CONTOUR_INTERNAL_PERIMETER   => 'perimeter', | ||||
|     &EXTR_ROLE_FILL                         => 'infill', | ||||
|     &EXTR_ROLE_SOLIDFILL                    => 'solid_infill', | ||||
|  |  | |||
|  | @ -3,7 +3,8 @@ use Moo; | |||
| 
 | ||||
| require Exporter; | ||||
| our @ISA = qw(Exporter); | ||||
| our @EXPORT_OK = qw(EXTR_ROLE_PERIMETER EXTR_ROLE_SMALLPERIMETER EXTR_ROLE_CONTOUR_INTERNAL_PERIMETER | ||||
| our @EXPORT_OK = qw(EXTR_ROLE_PERIMETER EXTR_ROLE_SMALLPERIMETER EXTR_ROLE_EXTERNAL_PERIMETER  | ||||
|     EXTR_ROLE_CONTOUR_INTERNAL_PERIMETER | ||||
|     EXTR_ROLE_FILL EXTR_ROLE_SOLIDFILL EXTR_ROLE_TOPSOLIDFILL EXTR_ROLE_BRIDGE EXTR_ROLE_SKIRT  | ||||
|     EXTR_ROLE_SUPPORTMATERIAL); | ||||
| our %EXPORT_TAGS = (roles => \@EXPORT_OK); | ||||
|  | @ -26,13 +27,14 @@ has 'flow_spacing' => (is => 'rw'); | |||
| has 'role'         => (is => 'rw', required => 1); | ||||
| use constant EXTR_ROLE_PERIMETER                    => 0; | ||||
| use constant EXTR_ROLE_SMALLPERIMETER               => 1; | ||||
| use constant EXTR_ROLE_CONTOUR_INTERNAL_PERIMETER   => 2; | ||||
| use constant EXTR_ROLE_FILL                         => 3; | ||||
| use constant EXTR_ROLE_SOLIDFILL                    => 4; | ||||
| use constant EXTR_ROLE_TOPSOLIDFILL                 => 5; | ||||
| use constant EXTR_ROLE_BRIDGE                       => 6; | ||||
| use constant EXTR_ROLE_SKIRT                        => 7; | ||||
| use constant EXTR_ROLE_SUPPORTMATERIAL              => 8; | ||||
| use constant EXTR_ROLE_EXTERNAL_PERIMETER           => 2; | ||||
| use constant EXTR_ROLE_CONTOUR_INTERNAL_PERIMETER   => 3; | ||||
| use constant EXTR_ROLE_FILL                         => 4; | ||||
| use constant EXTR_ROLE_SOLIDFILL                    => 5; | ||||
| use constant EXTR_ROLE_TOPSOLIDFILL                 => 6; | ||||
| use constant EXTR_ROLE_BRIDGE                       => 7; | ||||
| use constant EXTR_ROLE_SKIRT                        => 8; | ||||
| use constant EXTR_ROLE_SUPPORTMATERIAL              => 9; | ||||
| 
 | ||||
| sub BUILD { | ||||
|     my $self = shift; | ||||
|  |  | |||
|  | @ -32,7 +32,7 @@ sub new { | |||
|         }, | ||||
|         print_speed => { | ||||
|             title => 'Print speed', | ||||
|             options => [qw(perimeter_speed small_perimeter_speed infill_speed solid_infill_speed top_solid_infill_speed bridge_speed)], | ||||
|             options => [qw(perimeter_speed small_perimeter_speed external_perimeter_speed infill_speed solid_infill_speed top_solid_infill_speed bridge_speed)], | ||||
|         }, | ||||
|         speed => { | ||||
|             title => 'Other speed settings', | ||||
|  |  | |||
|  | @ -291,6 +291,7 @@ sub make_perimeters { | |||
|     foreach my $island (@perimeters) { | ||||
|         # do holes starting from innermost one | ||||
|         my @holes = (); | ||||
|         my %is_external = (); | ||||
|         my @hole_depths = map [ map $_->holes, @$_ ], @$island; | ||||
|          | ||||
|         # organize the outermost hole loops using a shortest path search | ||||
|  | @ -303,6 +304,7 @@ sub make_perimeters { | |||
|              | ||||
|             # take first available hole | ||||
|             push @holes, shift @{$hole_depths[0]}; | ||||
|             $is_external{$#holes} = 1; | ||||
|              | ||||
|             my $current_depth = 0; | ||||
|             while (1) { | ||||
|  | @ -333,9 +335,12 @@ sub make_perimeters { | |||
|         } | ||||
|          | ||||
|         # do holes, then contours starting from innermost one | ||||
|         $self->add_perimeter($_) for reverse @holes; | ||||
|         $self->add_perimeter($holes[$_], $is_external{$_} ? EXTR_ROLE_EXTERNAL_PERIMETER : undef) | ||||
|             for reverse 0 .. $#holes; | ||||
|         for my $depth (reverse 0 .. $#$island) { | ||||
|             my $role = $depth == $#$island ? EXTR_ROLE_CONTOUR_INTERNAL_PERIMETER : EXTR_ROLE_PERIMETER; | ||||
|             my $role = $depth == $#$island ? EXTR_ROLE_CONTOUR_INTERNAL_PERIMETER | ||||
|                 : $depth == 0 ? EXTR_ROLE_EXTERNAL_PERIMETER | ||||
|                 : EXTR_ROLE_PERIMETER; | ||||
|             $self->add_perimeter($_, $role) for map $_->contour, @{$island->[$depth]}; | ||||
|         } | ||||
|     } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alessandro Ranellucci
						Alessandro Ranellucci