From f18d3f451a5468adf046a4bc9e8e978a7a2ca753 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 17 Feb 2016 18:30:59 -0800 Subject: [PATCH] Limit LCD move_to_x/y coordinates for deltas Related to MarlinFirmware/MarlinDev#270 --- Marlin/ultralcd.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index c88ec898f..3ffc119eb 100644 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -840,8 +840,15 @@ static void _lcd_move(const char* name, AxisEnum axis, int min, int max) { lcd_goto_menu(lcd_move_menu_axis); } } -static void lcd_move_x() { _lcd_move(PSTR(MSG_MOVE_X), X_AXIS, X_MIN_POS, X_MAX_POS); } -static void lcd_move_y() { _lcd_move(PSTR(MSG_MOVE_Y), Y_AXIS, Y_MIN_POS, Y_MAX_POS); } +#if ENABLED(DELTA) + static float delta_clip_radius_2 = DELTA_PRINTABLE_RADIUS * DELTA_PRINTABLE_RADIUS; + static int delta_clip( float a ) { return sqrt(delta_clip_radius_2 - a*a); } + static void lcd_move_x() { int clip = delta_clip(current_position[Y_AXIS]); _lcd_move(PSTR(MSG_MOVE_X), X_AXIS, max(X_MIN_POS, -clip), min(X_MAX_POS, clip)); } + static void lcd_move_y() { int clip = delta_clip(current_position[X_AXIS]); _lcd_move(PSTR(MSG_MOVE_X), X_AXIS, max(X_MIN_POS, -clip), min(X_MAX_POS, clip)); } +#else + static void lcd_move_x() { _lcd_move(PSTR(MSG_MOVE_X), X_AXIS, X_MIN_POS, X_MAX_POS); } + static void lcd_move_y() { _lcd_move(PSTR(MSG_MOVE_Y), Y_AXIS, Y_MIN_POS, Y_MAX_POS); } +#endif static void lcd_move_z() { _lcd_move(PSTR(MSG_MOVE_Z), Z_AXIS, Z_MIN_POS, Z_MAX_POS); } static void lcd_move_e( #if EXTRUDERS > 1