|  |  |  | @ -75,14 +75,14 @@ float max_e_jerk; | 
			
		
	
		
			
				
					|  |  |  |  | float mintravelfeedrate; | 
			
		
	
		
			
				
					|  |  |  |  | unsigned long axis_steps_per_sqr_second[NUM_AXIS]; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #ifdef ENABLE_AUTO_BED_LEVELING | 
			
		
	
		
			
				
					|  |  |  |  | // this holds the required transform to compensate for bed level
 | 
			
		
	
		
			
				
					|  |  |  |  | matrix_3x3 plan_bed_level_matrix = { | 
			
		
	
		
			
				
					|  |  |  |  | #ifdef ENABLE_AUTO_BED_COMPENSATION | 
			
		
	
		
			
				
					|  |  |  |  | // this holds the required transform to compensate for bed compensation
 | 
			
		
	
		
			
				
					|  |  |  |  | matrix_3x3 plan_bed_compensation_matrix = { | 
			
		
	
		
			
				
					|  |  |  |  | 	1.0, 0.0, 0.0, | 
			
		
	
		
			
				
					|  |  |  |  | 	0.0, 1.0, 0.0, | 
			
		
	
		
			
				
					|  |  |  |  | 	0.0, 0.0, 1.0, | 
			
		
	
		
			
				
					|  |  |  |  | }; | 
			
		
	
		
			
				
					|  |  |  |  | #endif // #ifdef ENABLE_AUTO_BED_LEVELING
 | 
			
		
	
		
			
				
					|  |  |  |  | #endif // #ifdef ENABLE_AUTO_BED_COMPENSATION
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | // The current position of the tool in absolute steps
 | 
			
		
	
		
			
				
					|  |  |  |  | long position[NUM_AXIS];   //rescaled from extern when axis_steps_per_unit are changed by gcode
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -528,11 +528,11 @@ float junction_deviation = 0.1; | 
			
		
	
		
			
				
					|  |  |  |  | // Add a new linear movement to the buffer. steps_x, _y and _z is the absolute position in 
 | 
			
		
	
		
			
				
					|  |  |  |  | // mm. Microseconds specify how many microseconds the move should take to perform. To aid acceleration
 | 
			
		
	
		
			
				
					|  |  |  |  | // calculation the caller must also provide the physical length of the line in millimeters.
 | 
			
		
	
		
			
				
					|  |  |  |  | #ifdef ENABLE_AUTO_BED_LEVELING | 
			
		
	
		
			
				
					|  |  |  |  | #ifdef ENABLE_AUTO_BED_COMPENSATION | 
			
		
	
		
			
				
					|  |  |  |  | void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, const uint8_t &extruder) | 
			
		
	
		
			
				
					|  |  |  |  | #else | 
			
		
	
		
			
				
					|  |  |  |  | void plan_buffer_line(const float &x, const float &y, const float &z, const float &e, float feed_rate, const uint8_t &extruder) | 
			
		
	
		
			
				
					|  |  |  |  | #endif  //ENABLE_AUTO_BED_LEVELING
 | 
			
		
	
		
			
				
					|  |  |  |  | #endif  //ENABLE_AUTO_BED_COMPENSATION
 | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |   // Calculate the buffer head after we push this byte
 | 
			
		
	
		
			
				
					|  |  |  |  |   int next_buffer_head = next_block_index(block_buffer_head); | 
			
		
	
	
		
			
				
					|  |  |  | @ -546,9 +546,9 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa | 
			
		
	
		
			
				
					|  |  |  |  |     lcd_update(); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #ifdef ENABLE_AUTO_BED_LEVELING | 
			
		
	
		
			
				
					|  |  |  |  |   apply_rotation_xyz(plan_bed_level_matrix, x, y, z); | 
			
		
	
		
			
				
					|  |  |  |  | #endif // ENABLE_AUTO_BED_LEVELING
 | 
			
		
	
		
			
				
					|  |  |  |  | #ifdef ENABLE_AUTO_BED_COMPENSATION | 
			
		
	
		
			
				
					|  |  |  |  |   apply_rotation_xyz(plan_bed_compensation_matrix, x, y, z); | 
			
		
	
		
			
				
					|  |  |  |  | #endif // ENABLE_AUTO_BED_COMPENSATION
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   // The target position of the tool in absolute steps
 | 
			
		
	
		
			
				
					|  |  |  |  |   // Calculate target position in absolute steps
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -1021,29 +1021,29 @@ block->steps_y = labs((target[X_AXIS]-position[X_AXIS]) - (target[Y_AXIS]-positi | 
			
		
	
		
			
				
					|  |  |  |  |   st_wake_up(); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #ifdef ENABLE_AUTO_BED_LEVELING | 
			
		
	
		
			
				
					|  |  |  |  | #ifdef ENABLE_AUTO_BED_COMPENSATION | 
			
		
	
		
			
				
					|  |  |  |  | vector_3 plan_get_position() { | 
			
		
	
		
			
				
					|  |  |  |  | 	vector_3 position = vector_3(st_get_position_mm(X_AXIS), st_get_position_mm(Y_AXIS), st_get_position_mm(Z_AXIS)); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	//position.debug("in plan_get position");
 | 
			
		
	
		
			
				
					|  |  |  |  | 	//plan_bed_level_matrix.debug("in plan_get bed_level");
 | 
			
		
	
		
			
				
					|  |  |  |  | 	matrix_3x3 inverse = matrix_3x3::transpose(plan_bed_level_matrix); | 
			
		
	
		
			
				
					|  |  |  |  | 	//plan_bed_compensation_matrix.debug("in plan_get bed_compensation");
 | 
			
		
	
		
			
				
					|  |  |  |  | 	matrix_3x3 inverse = matrix_3x3::transpose(plan_bed_compensation_matrix); | 
			
		
	
		
			
				
					|  |  |  |  | 	//inverse.debug("in plan_get inverse");
 | 
			
		
	
		
			
				
					|  |  |  |  | 	position.apply_rotation(inverse); | 
			
		
	
		
			
				
					|  |  |  |  | 	//position.debug("after rotation");
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	return position; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | #endif // ENABLE_AUTO_BED_LEVELING
 | 
			
		
	
		
			
				
					|  |  |  |  | #endif // ENABLE_AUTO_BED_COMPENSATION
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #ifdef ENABLE_AUTO_BED_LEVELING | 
			
		
	
		
			
				
					|  |  |  |  | #ifdef ENABLE_AUTO_BED_COMPENSATION | 
			
		
	
		
			
				
					|  |  |  |  | void plan_set_position(float x, float y, float z, const float &e) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |   apply_rotation_xyz(plan_bed_level_matrix, x, y, z); | 
			
		
	
		
			
				
					|  |  |  |  |   apply_rotation_xyz(plan_bed_compensation_matrix, x, y, z); | 
			
		
	
		
			
				
					|  |  |  |  | #else | 
			
		
	
		
			
				
					|  |  |  |  | void plan_set_position(const float &x, const float &y, const float &z, const float &e) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  | #endif // ENABLE_AUTO_BED_LEVELING
 | 
			
		
	
		
			
				
					|  |  |  |  | #endif // ENABLE_AUTO_BED_COMPENSATION
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   position[X_AXIS] = lround(x*axis_steps_per_unit[X_AXIS]); | 
			
		
	
		
			
				
					|  |  |  |  |   position[Y_AXIS] = lround(y*axis_steps_per_unit[Y_AXIS]); | 
			
		
	
	
		
			
				
					|  |  |  | 
 |