| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -1303,18 +1303,33 @@ inline void set_homing_bump_feedrate(AxisEnum axis) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  }
 | 
					 | 
					 | 
					 | 
					  }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  feedrate = homing_feedrate[axis] / hbd;
 | 
					 | 
					 | 
					 | 
					  feedrate = homing_feedrate[axis] / hbd;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					// line_to_current_position
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					// Move the planner to the current position from wherever it last moved
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					// (or from wherever it has been told it is located).
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					inline void line_to_current_position() {
 | 
					 | 
					 | 
					 | 
					inline void line_to_current_position() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate / 60, active_extruder);
 | 
					 | 
					 | 
					 | 
					  plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate / 60, active_extruder);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					inline void line_to_z(float zPosition) {
 | 
					 | 
					 | 
					 | 
					inline void line_to_z(float zPosition) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], zPosition, current_position[E_AXIS], feedrate / 60, active_extruder);
 | 
					 | 
					 | 
					 | 
					  plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], zPosition, current_position[E_AXIS], feedrate / 60, active_extruder);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					// line_to_destination
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					// Move the planner, not necessarily synced with current_position
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					inline void line_to_destination(float mm_m) {
 | 
					 | 
					 | 
					 | 
					inline void line_to_destination(float mm_m) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], mm_m / 60, active_extruder);
 | 
					 | 
					 | 
					 | 
					  plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], mm_m / 60, active_extruder);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					inline void line_to_destination() {
 | 
					 | 
					 | 
					 | 
					inline void line_to_destination() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  line_to_destination(feedrate);
 | 
					 | 
					 | 
					 | 
					  line_to_destination(feedrate);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					/**
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 * sync_plan_position
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 * Set planner / stepper positions to the cartesian current_position.
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 * The stepper code translates these coordinates into step units.
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 * Allows translation between steps and units (mm) for cartesian & core robots
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 */
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					inline void sync_plan_position() {
 | 
					 | 
					 | 
					 | 
					inline void sync_plan_position() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #if ENABLED(DEBUG_LEVELING_FEATURE)
 | 
					 | 
					 | 
					 | 
					  #if ENABLED(DEBUG_LEVELING_FEATURE)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (DEBUGGING(LEVELING)) DEBUG_POS("sync_plan_position", current_position);
 | 
					 | 
					 | 
					 | 
					    if (DEBUGGING(LEVELING)) DEBUG_POS("sync_plan_position", current_position);
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -3116,8 +3131,8 @@ inline void gcode_G28() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      #if ENABLED(DELTA)
 | 
					 | 
					 | 
					 | 
					      #if ENABLED(DELTA)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        delta_grid_spacing[0] = xGridSpacing;
 | 
					 | 
					 | 
					 | 
					        delta_grid_spacing[0] = xGridSpacing;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        delta_grid_spacing[1] = yGridSpacing;
 | 
					 | 
					 | 
					 | 
					        delta_grid_spacing[1] = yGridSpacing;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        float z_offset = zprobe_zoffset;
 | 
					 | 
					 | 
					 | 
					        float zoffset = zprobe_zoffset;
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (code_seen(axis_codes[Z_AXIS])) z_offset += code_value();
 | 
					 | 
					 | 
					 | 
					        if (code_seen(axis_codes[Z_AXIS])) zoffset += code_value();
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      #else // !DELTA
 | 
					 | 
					 | 
					 | 
					      #else // !DELTA
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        /**
 | 
					 | 
					 | 
					 | 
					        /**
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					         * solve the plane equation ax + by + d = z
 | 
					 | 
					 | 
					 | 
					         * solve the plane equation ax + by + d = z
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -3207,7 +3222,7 @@ inline void gcode_G28() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            eqnAMatrix[probePointCounter + 2 * abl2] = 1;
 | 
					 | 
					 | 
					 | 
					            eqnAMatrix[probePointCounter + 2 * abl2] = 1;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            indexIntoAB[xCount][yCount] = probePointCounter;
 | 
					 | 
					 | 
					 | 
					            indexIntoAB[xCount][yCount] = probePointCounter;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          #else
 | 
					 | 
					 | 
					 | 
					          #else
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            bed_level[xCount][yCount] = measured_z + z_offset;
 | 
					 | 
					 | 
					 | 
					            bed_level[xCount][yCount] = measured_z + zoffset;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          #endif
 | 
					 | 
					 | 
					 | 
					          #endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          probePointCounter++;
 | 
					 | 
					 | 
					 | 
					          probePointCounter++;
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
 
 |