From 2f8a257a0d5686720b6a2d391ec7c0157a2700b3 Mon Sep 17 00:00:00 2001 From: Markus Hitter Date: Fri, 7 Oct 2011 21:11:55 +0200 Subject: [PATCH] dda.c: make update_position() work with an empty queue. --- dda.c | 57 +++++++++++++++++++++++++++++++-------------------------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/dda.c b/dda.c index 7a0a194..9e68159 100644 --- a/dda.c +++ b/dda.c @@ -682,32 +682,37 @@ void dda_step(DDA *dda) { void update_current_position() { DDA *dda = &movebuffer[mb_tail]; - if (dda->live == 0) - return; - - if (dda->x_direction) - current_position.X = dda->endpoint.X - move_state.x_steps; - else - current_position.X = dda->endpoint.X + move_state.x_steps; - - if (dda->y_direction) - current_position.Y = dda->endpoint.Y - move_state.y_steps; - else - current_position.Y = dda->endpoint.Y + move_state.y_steps; - - if (dda->z_direction) - current_position.Z = dda->endpoint.Z - move_state.z_steps; - else - current_position.Z = dda->endpoint.Z + move_state.z_steps; - - #ifndef E_ABSOLUTE - current_position.E = move_state.e_steps; - #else - if (dda->e_direction) - current_position.E = dda->endpoint.E - move_state.e_steps; + if (queue_empty()) { + current_position.X = startpoint.X; + current_position.Y = startpoint.Y; + current_position.Z = startpoint.Z; + current_position.E = startpoint.E; + } + else if (dda->live) { + if (dda->x_direction) + current_position.X = dda->endpoint.X - move_state.x_steps; else - current_position.E = dda->endpoint.E + move_state.e_steps; - #endif + current_position.X = dda->endpoint.X + move_state.x_steps; - // current_position.F is updated in dda_start() + if (dda->y_direction) + current_position.Y = dda->endpoint.Y - move_state.y_steps; + else + current_position.Y = dda->endpoint.Y + move_state.y_steps; + + if (dda->z_direction) + current_position.Z = dda->endpoint.Z - move_state.z_steps; + else + current_position.Z = dda->endpoint.Z + move_state.z_steps; + + #ifndef E_ABSOLUTE + current_position.E = move_state.e_steps; + #else + if (dda->e_direction) + current_position.E = dda->endpoint.E - move_state.e_steps; + else + current_position.E = dda->endpoint.E + move_state.e_steps; + #endif + + // current_position.F is updated in dda_start() + } }