mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-20 07:11:12 -06:00 
			
		
		
		
	Adjust collision detection for brim and include support islands inside the only_retract_when_crossing_perimeters logic
This commit is contained in:
		
							parent
							
								
									67f5b7ab14
								
							
						
					
					
						commit
						5d80c26b29
					
				
					 4 changed files with 29 additions and 16 deletions
				
			
		|  | @ -14,6 +14,8 @@ has 'enable_loop_clipping' => (is => 'rw', default => sub {1}); | |||
| has 'enable_wipe'        => (is => 'lazy');   # at least one extruder has wipe enabled | ||||
| has 'layer_count'        => (is => 'ro', required => 1 ); | ||||
| has 'layer'              => (is => 'rw'); | ||||
| has '_layer_islands'     => (is => 'rw'); | ||||
| has '_upper_layer_islands'  => (is => 'rw'); | ||||
| has '_layer_overhangs'   => (is => 'rw'); | ||||
| has 'move_z_callback'    => (is => 'rw'); | ||||
| has 'shift_x'            => (is => 'rw', default => sub {0} ); | ||||
|  | @ -98,7 +100,14 @@ sub change_layer { | |||
|      | ||||
|     $self->layer($layer); | ||||
|      | ||||
|     # avoid computing overhangs if they're not needed | ||||
|     # avoid computing islands and overhangs if they're not needed | ||||
|     if ($self->config->only_retract_when_crossing_perimeters) { | ||||
|         $self->_layer_islands([ $layer->islands ]); | ||||
|         $self->_upper_layer_islands([ $layer->upper_layer_islands ]); | ||||
|     } else { | ||||
|         $self->_layer_islands([]); | ||||
|         $self->_upper_layer_islands([]); | ||||
|     } | ||||
|     $self->_layer_overhangs( | ||||
|         $layer->id > 0 && ($Slic3r::Config->overhangs || $Slic3r::Config->start_perimeters_at_non_overhang) | ||||
|             ? [ map $_->expolygon, grep $_->surface_type == S_TYPE_BOTTOM, map @{$_->slices}, @{$layer->regions} ] | ||||
|  | @ -374,9 +383,9 @@ sub travel_to { | |||
|     # *and* in an island in the upper layer (so that the ooze will not be visible) | ||||
|     if ($travel->length < scale $self->extruder->retract_before_travel | ||||
|         || ($self->config->only_retract_when_crossing_perimeters | ||||
|             && (first { $_->encloses_line($travel, scaled_epsilon) } @{$self->layer->upper_layer_slices}) | ||||
|             && (first { $_->encloses_line($travel, scaled_epsilon) } @{$self->layer->slices})) | ||||
|         || ($role == EXTR_ROLE_SUPPORTMATERIAL && $self->layer->support_islands_enclose_line($travel)) | ||||
|             && (first { $_->encloses_line($travel, scaled_epsilon) } @{$self->_upper_layer_islands}) | ||||
|             && (first { $_->encloses_line($travel, scaled_epsilon) } @{$self->_layer_islands})) | ||||
|         || ($role == EXTR_ROLE_SUPPORTMATERIAL && (first { $_->encloses_line($travel, scaled_epsilon) } @{$self->layer->support_islands})) | ||||
|         ) { | ||||
|         $self->straight_once(0); | ||||
|         $self->speed('travel'); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alessandro Ranellucci
						Alessandro Ranellucci