mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-20 07:11:12 -06:00 
			
		
		
		
	Better implementation of the external motion planner
This commit is contained in:
		
							parent
							
								
									27090f83bd
								
							
						
					
					
						commit
						c98e9515ed
					
				
					 4 changed files with 46 additions and 28 deletions
				
			
		|  | @ -11,8 +11,10 @@ has 'shift_y'            => (is => 'rw', default => sub {0} ); | |||
| has 'z'                  => (is => 'rw', default => sub {0} ); | ||||
| has 'speed'              => (is => 'rw'); | ||||
| 
 | ||||
| has 'motionplanner'      => (is => 'rw'); | ||||
| has 'straight_once'      => (is => 'rw'); | ||||
| has 'external_mp'        => (is => 'rw'); | ||||
| has 'layer_mp'           => (is => 'rw'); | ||||
| has 'new_object'         => (is => 'rw', default => sub {0}); | ||||
| has 'straight_once'      => (is => 'rw', default => sub {1}); | ||||
| has 'extruder_idx'       => (is => 'rw'); | ||||
| has 'extrusion_distance' => (is => 'rw', default => sub {0} ); | ||||
| has 'elapsed_time'       => (is => 'rw', default => sub {0} );  # seconds | ||||
|  | @ -76,7 +78,7 @@ sub change_layer { | |||
|      | ||||
|     $self->layer($layer); | ||||
|     if ($Slic3r::Config->avoid_crossing_perimeters) { | ||||
|         $self->motionplanner(Slic3r::GCode::MotionPlanner->new( | ||||
|         $self->layer_mp(Slic3r::GCode::MotionPlanner->new( | ||||
|             islands => union_ex([ map @{$_->expolygon}, @{$layer->slices} ], undef, 1), | ||||
|         )); | ||||
|     } | ||||
|  | @ -216,13 +218,32 @@ sub travel_to { | |||
|     my ($point, $comment) = @_; | ||||
|      | ||||
|     return "" if points_coincide($self->last_pos, $point); | ||||
|      | ||||
|     my $gcode = ""; | ||||
|     if ($Slic3r::Config->avoid_crossing_perimeters && $self->last_pos->distance_to($point) > scale 5 && !$self->straight_once) { | ||||
|         return join '', map $self->G0($_->b, undef, 0, $comment || ""), | ||||
|             $self->motionplanner->shortest_path($self->last_pos, $point)->lines; | ||||
|         my $plan = sub { | ||||
|             my $mp = shift; | ||||
|             return join '',  | ||||
|                 map $self->G0($_->b, undef, 0, $comment || ""), | ||||
|                 $mp->shortest_path($self->last_pos, $point)->lines; | ||||
|         }; | ||||
|          | ||||
|         if ($self->new_object) { | ||||
|             my @shift = ($self->shift_x, $self->shift_y); | ||||
|             $self->set_shift(0,0); | ||||
|             $point->translate(map scale $_, @shift); | ||||
|             $gcode .= $plan->($self->external_mp); | ||||
|             $self->new_object(0); | ||||
|             $self->set_shift(@shift); | ||||
|         } else { | ||||
|             $gcode .= $plan->($self->layer_mp); | ||||
|         } | ||||
|     } else { | ||||
|         $self->straight_once(0); | ||||
|         return $self->G0($point, undef, 0, $comment || ""); | ||||
|         $gcode .= $self->G0($point, undef, 0, $comment || ""); | ||||
|     } | ||||
|      | ||||
|     return $gcode; | ||||
| } | ||||
| 
 | ||||
| sub retract { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alessandro Ranellucci
						Alessandro Ranellucci