SPE-2441: Fix discontinuity between the processed blocks' exit speed and the new first block's entry speed.

This discontinuity affected both time estimation and actual speed visualization.
This commit is contained in:
Lukáš Hejl 2024-08-16 14:04:51 +02:00 committed by Lukas Matena
parent 392aad64a4
commit 90073dce70

View File

@ -412,10 +412,20 @@ void GCodeProcessor::TimeMachine::calculate_time(GCodeProcessorResult& result, P
it_stop_time->elapsed_time = time;
}
if (keep_last_n_blocks)
if (keep_last_n_blocks) {
blocks.erase(blocks.begin(), blocks.begin() + n_blocks_process);
else
// Ensure that the new first block's entry speed will be preserved to prevent discontinuity
// between the erased blocks' exit speed and the new first block's entry speed.
// Otherwise, the first block's entry speed could be recalculated on the next pass without
// considering that there are no more blocks before this first block. This could lead
// to discontinuity between the exit speed (of already processed blocks) and the entry
// speed of the first block.
TimeBlock &first_block = blocks.front();
first_block.max_entry_speed = first_block.feedrate_profile.entry;
} else {
blocks.clear();
}
}
void GCodeProcessor::TimeProcessor::reset()