Merge pull request #3829 from thinkyhead/rc_fix_T_command
Fix bad movement in gcode_T when switching extruders
This commit is contained in:
		
						commit
						f331763eca
					
				| @ -1272,6 +1272,7 @@ XYZ_CONSTS_FROM_CONFIG(signed char, home_dir, HOME_DIR); | ||||
|  */ | ||||
| static void update_software_endstops(AxisEnum axis) { | ||||
|   float offs = home_offset[axis] + position_shift[axis]; | ||||
| 
 | ||||
|   #if ENABLED(DUAL_X_CARRIAGE) | ||||
|     if (axis == X_AXIS) { | ||||
|       float dual_max_x = max(extruder_offset[X_AXIS][1], X2_MAX_POS); | ||||
| @ -1292,6 +1293,7 @@ static void update_software_endstops(AxisEnum axis) { | ||||
|     sw_endstop_min[axis] = base_min_pos(axis) + offs; | ||||
|     sw_endstop_max[axis] = base_max_pos(axis) + offs; | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
| @ -6472,24 +6474,29 @@ inline void gcode_T(uint8_t tmp_extruder) { | ||||
| 
 | ||||
|         #else // !AUTO_BED_LEVELING_FEATURE
 | ||||
| 
 | ||||
|           // Offset extruder (only by XY)
 | ||||
|           for (int i=X_AXIS; i<=Y_AXIS; i++) | ||||
|             current_position[i] += extruder_offset[i][tmp_extruder] - extruder_offset[i][active_extruder]; | ||||
|           // The newly-selected extruder is actually at...
 | ||||
|           for (int i=X_AXIS; i<=Y_AXIS; i++) { | ||||
|             float diff = extruder_offset[i][tmp_extruder] - extruder_offset[i][active_extruder]; | ||||
|             current_position[i] += diff; | ||||
|             position_shift[i] += diff; // Offset the coordinate space
 | ||||
|             update_software_endstops((AxisEnum)i); | ||||
|           } | ||||
| 
 | ||||
|         #endif // !AUTO_BED_LEVELING_FEATURE
 | ||||
| 
 | ||||
|         // Set the new active extruder and position
 | ||||
|         // Set the new active extruder
 | ||||
|         active_extruder = tmp_extruder; | ||||
| 
 | ||||
|       #endif // !DUAL_X_CARRIAGE
 | ||||
| 
 | ||||
|       // Tell the planner the new "current position"
 | ||||
|       #if ENABLED(DELTA) | ||||
|         sync_plan_position_delta(); | ||||
|       #else | ||||
|         sync_plan_position(); | ||||
|       #endif | ||||
| 
 | ||||
|       // Move to the old position
 | ||||
|       // Move to the "old position" (move the extruder into place)
 | ||||
|       if (IsRunning()) prepare_move(); | ||||
| 
 | ||||
|     } // (tmp_extruder != active_extruder)
 | ||||
| @ -7187,23 +7194,8 @@ void clamp_to_software_endstops(float target[3]) { | ||||
|   if (min_software_endstops) { | ||||
|     NOLESS(target[X_AXIS], sw_endstop_min[X_AXIS]); | ||||
|     NOLESS(target[Y_AXIS], sw_endstop_min[Y_AXIS]); | ||||
| 
 | ||||
|     float negative_z_offset = 0; | ||||
|     #if ENABLED(AUTO_BED_LEVELING_FEATURE) | ||||
|       if (zprobe_zoffset < 0) negative_z_offset += zprobe_zoffset; | ||||
|       if (home_offset[Z_AXIS] < 0) { | ||||
|         #if ENABLED(DEBUG_LEVELING_FEATURE) | ||||
|           if (DEBUGGING(LEVELING)) { | ||||
|             SERIAL_ECHOPAIR("> clamp_to_software_endstops > Add home_offset[Z_AXIS]:", home_offset[Z_AXIS]); | ||||
|             SERIAL_EOL; | ||||
|           } | ||||
|         #endif | ||||
|         negative_z_offset += home_offset[Z_AXIS]; | ||||
|       } | ||||
|     #endif | ||||
|     NOLESS(target[Z_AXIS], sw_endstop_min[Z_AXIS] + negative_z_offset); | ||||
|     NOLESS(target[Z_AXIS], sw_endstop_min[Z_AXIS]); | ||||
|   } | ||||
| 
 | ||||
|   if (max_software_endstops) { | ||||
|     NOMORE(target[X_AXIS], sw_endstop_max[X_AXIS]); | ||||
|     NOMORE(target[Y_AXIS], sw_endstop_max[Y_AXIS]); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user