mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	Use bridge speed for first solid layer above sparse infill. Includes unit test. #1792
This commit is contained in:
		
							parent
							
								
									71322cc49d
								
							
						
					
					
						commit
						c1a5cddcd2
					
				
					 2 changed files with 24 additions and 8 deletions
				
			
		|  | @ -58,7 +58,7 @@ my %role_speeds = ( | |||
|     &EXTR_ROLE_SOLIDFILL                    => 'solid_infill', | ||||
|     &EXTR_ROLE_TOPSOLIDFILL                 => 'top_solid_infill', | ||||
|     &EXTR_ROLE_BRIDGE                       => 'bridge', | ||||
|     &EXTR_ROLE_INTERNALBRIDGE               => 'solid_infill', | ||||
|     &EXTR_ROLE_INTERNALBRIDGE               => 'bridge', | ||||
|     &EXTR_ROLE_SKIRT                        => 'perimeter', | ||||
|     &EXTR_ROLE_SUPPORTMATERIAL              => 'support_material', | ||||
|     &EXTR_ROLE_GAPFILL                      => 'gap_fill', | ||||
|  |  | |||
							
								
								
									
										30
									
								
								t/shells.t
									
										
									
									
									
								
							
							
						
						
									
										30
									
								
								t/shells.t
									
										
									
									
									
								
							|  | @ -18,6 +18,7 @@ use Slic3r::Test; | |||
|     $config->set('perimeters', 0); | ||||
|     $config->set('solid_infill_speed', 99); | ||||
|     $config->set('top_solid_infill_speed', 99); | ||||
|     $config->set('bridge_speed', 72); | ||||
|     $config->set('first_layer_speed', '100%'); | ||||
|     $config->set('cooling', 0); | ||||
|      | ||||
|  | @ -27,19 +28,25 @@ use Slic3r::Test; | |||
|          | ||||
|         my $print = Slic3r::Test::init_print('20mm_cube', config => $config); | ||||
|          | ||||
|         my %layers_with_shells = ();  # Z => $count | ||||
|         my %z = ();                            # Z => 1 | ||||
|         my %layers_with_solid_infill    = ();  # Z => $count | ||||
|         my %layers_with_bridge_infill   = ();  # Z => $count | ||||
|         Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { | ||||
|             my ($self, $cmd, $args, $info) = @_; | ||||
|              | ||||
|             if ($self->Z > 0) { | ||||
|                 $layers_with_shells{$self->Z} //= 0; | ||||
|                 $layers_with_shells{$self->Z} = 1 | ||||
|                     if $info->{extruding} | ||||
|                         && $info->{dist_XY} > 0 | ||||
|                         && ($args->{F} // $self->F) == $config->solid_infill_speed*60; | ||||
|                 $z{ $self->Z } = 1; | ||||
|                 if ($info->{extruding} && $info->{dist_XY} > 0) { | ||||
|                     my $F = $args->{F} // $self->F; | ||||
|                     $layers_with_solid_infill{$self->Z} = 1 | ||||
|                         if $F == $config->solid_infill_speed*60; | ||||
|                     $layers_with_bridge_infill{$self->Z} = 1 | ||||
|                         if $F == $config->bridge_speed*60; | ||||
|                 } | ||||
|             } | ||||
|         }); | ||||
|         my @shells = @layers_with_shells{sort { $a <=> $b } keys %layers_with_shells}; | ||||
|         my @z = sort { $a <=> $b } keys %z; | ||||
|         my @shells = map $layers_with_solid_infill{$_} || $layers_with_bridge_infill{$_}, @z; | ||||
|         fail "insufficient number of bottom solid layers" | ||||
|             unless !defined(first { !$_ } @shells[0..$config->bottom_solid_layers-1]); | ||||
|         fail "excessive number of bottom solid layers" | ||||
|  | @ -48,9 +55,17 @@ use Slic3r::Test; | |||
|             unless !defined(first { !$_ } @shells[-$config->top_solid_layers..-1]); | ||||
|         fail "excessive number of top solid layers" | ||||
|             unless scalar(grep $_, @shells[($#shells/2)..$#shells]) == $config->top_solid_layers; | ||||
|         if ($config->top_solid_layers > 0) { | ||||
|             fail "unexpected solid infill speed in first solid layer over sparse infill" | ||||
|                 if $layers_with_solid_infill{ $z[-$config->top_solid_layers] }; | ||||
|             die "bridge speed not used in first solid layer over sparse infill" | ||||
|                 if !$layers_with_bridge_infill{ $z[-$config->top_solid_layers] }; | ||||
|         } | ||||
|         1; | ||||
|     }; | ||||
|      | ||||
|     $config->set('top_solid_layers', 3); | ||||
|     $config->set('bottom_solid_layers', 3); | ||||
|     ok $test->(), "proper number of shells is applied"; | ||||
|      | ||||
|     $config->set('top_solid_layers', 0); | ||||
|  | @ -69,6 +84,7 @@ use Slic3r::Test; | |||
|     $config->set('bottom_solid_layers', 0); | ||||
|     $config->set('top_solid_layers', 3); | ||||
|     $config->set('cooling', 0); | ||||
|     $config->set('bridge_speed', 99); | ||||
|     $config->set('solid_infill_speed', 99); | ||||
|     $config->set('top_solid_infill_speed', 99); | ||||
|     $config->set('first_layer_speed', '100%'); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alessandro Ranellucci
						Alessandro Ranellucci