SPE-2275: Fixed export of M73 CXX lines to gcode

This commit is contained in:
enricoturri1966 2024-10-24 08:15:26 +02:00 committed by Lukas Matena
parent dfdc407fd6
commit ec8efbd444

View File

@ -320,89 +320,88 @@ void GCodeProcessor::TimeMachine::calculate_time(GCodeProcessorResult& result, P
// detect actual speed moves required to render toolpaths using actual speed // detect actual speed moves required to render toolpaths using actual speed
if (mode == PrintEstimatedStatistics::ETimeMode::Normal) { if (mode == PrintEstimatedStatistics::ETimeMode::Normal) {
GCodeProcessorResult::MoveVertex& curr_move = result.moves[block.move_id]; GCodeProcessorResult::MoveVertex& curr_move = result.moves[block.move_id];
if (curr_move.type != EMoveType::Extrude && if (curr_move.type == EMoveType::Extrude ||
curr_move.type != EMoveType::Travel && curr_move.type == EMoveType::Travel ||
curr_move.type != EMoveType::Wipe) curr_move.type == EMoveType::Wipe) {
continue; assert(curr_move.actual_feedrate == 0.0f);
assert(curr_move.actual_feedrate == 0.0f); GCodeProcessorResult::MoveVertex& prev_move = result.moves[block.move_id - 1];
const bool interpolate = (prev_move.type == curr_move.type);
if (!interpolate &&
prev_move.type != EMoveType::Extrude &&
prev_move.type != EMoveType::Travel &&
prev_move.type != EMoveType::Wipe)
prev_move.actual_feedrate = block.feedrate_profile.entry;
GCodeProcessorResult::MoveVertex& prev_move = result.moves[block.move_id - 1]; if (EPSILON < block.trapezoid.accelerate_until && block.trapezoid.accelerate_until < block.distance - EPSILON) {
const bool interpolate = (prev_move.type == curr_move.type); const float t = block.trapezoid.accelerate_until / block.distance;
if (!interpolate && const Vec3f position = lerp(prev_move.position, curr_move.position, t);
prev_move.type != EMoveType::Extrude && if ((position - prev_move.position).norm() > EPSILON &&
prev_move.type != EMoveType::Travel && (position - curr_move.position).norm() > EPSILON) {
prev_move.type != EMoveType::Wipe) const float delta_extruder = interpolate ? lerp(prev_move.delta_extruder, curr_move.delta_extruder, t) : curr_move.delta_extruder;
prev_move.actual_feedrate = block.feedrate_profile.entry; const float feedrate = interpolate ? lerp(prev_move.feedrate, curr_move.feedrate, t) : curr_move.feedrate;
const float width = interpolate ? lerp(prev_move.width, curr_move.width, t) : curr_move.width;
if (EPSILON < block.trapezoid.accelerate_until && block.trapezoid.accelerate_until < block.distance - EPSILON) { const float height = interpolate ? lerp(prev_move.height, curr_move.height, t) : curr_move.height;
const float t = block.trapezoid.accelerate_until / block.distance; const float mm3_per_mm = interpolate ? lerp(prev_move.mm3_per_mm, curr_move.mm3_per_mm, t) : curr_move.mm3_per_mm;
const Vec3f position = lerp(prev_move.position, curr_move.position, t); const float fan_speed = interpolate ? lerp(prev_move.fan_speed, curr_move.fan_speed, t) : curr_move.fan_speed;
if ((position - prev_move.position).norm() > EPSILON && const float temperature = interpolate ? lerp(prev_move.temperature, curr_move.temperature, t) : curr_move.temperature;
(position - curr_move.position).norm() > EPSILON) { actual_speed_moves.push_back({
const float delta_extruder = interpolate ? lerp(prev_move.delta_extruder, curr_move.delta_extruder, t) : curr_move.delta_extruder; block.move_id,
const float feedrate = interpolate ? lerp(prev_move.feedrate, curr_move.feedrate, t) : curr_move.feedrate; position,
const float width = interpolate ? lerp(prev_move.width, curr_move.width, t) : curr_move.width; block.trapezoid.cruise_feedrate,
const float height = interpolate ? lerp(prev_move.height, curr_move.height, t) : curr_move.height; delta_extruder,
const float mm3_per_mm = interpolate ? lerp(prev_move.mm3_per_mm, curr_move.mm3_per_mm, t) : curr_move.mm3_per_mm; feedrate,
const float fan_speed = interpolate ? lerp(prev_move.fan_speed, curr_move.fan_speed, t) : curr_move.fan_speed; width,
const float temperature = interpolate ? lerp(prev_move.temperature, curr_move.temperature, t) : curr_move.temperature; height,
actual_speed_moves.push_back({ mm3_per_mm,
block.move_id, fan_speed,
position, temperature
block.trapezoid.cruise_feedrate, });
delta_extruder, }
feedrate,
width,
height,
mm3_per_mm,
fan_speed,
temperature
});
} }
}
const bool has_deceleration = block.trapezoid.deceleration_distance(block.distance) > EPSILON; const bool has_deceleration = block.trapezoid.deceleration_distance(block.distance) > EPSILON;
if (has_deceleration && block.trapezoid.decelerate_after > block.trapezoid.accelerate_until + EPSILON) { if (has_deceleration && block.trapezoid.decelerate_after > block.trapezoid.accelerate_until + EPSILON) {
const float t = block.trapezoid.decelerate_after / block.distance; const float t = block.trapezoid.decelerate_after / block.distance;
const Vec3f position = lerp(prev_move.position, curr_move.position, t); const Vec3f position = lerp(prev_move.position, curr_move.position, t);
if ((position - prev_move.position).norm() > EPSILON && if ((position - prev_move.position).norm() > EPSILON &&
(position - curr_move.position).norm() > EPSILON) { (position - curr_move.position).norm() > EPSILON) {
const float delta_extruder = interpolate ? lerp(prev_move.delta_extruder, curr_move.delta_extruder, t) : curr_move.delta_extruder; const float delta_extruder = interpolate ? lerp(prev_move.delta_extruder, curr_move.delta_extruder, t) : curr_move.delta_extruder;
const float feedrate = interpolate ? lerp(prev_move.feedrate, curr_move.feedrate, t) : curr_move.feedrate; const float feedrate = interpolate ? lerp(prev_move.feedrate, curr_move.feedrate, t) : curr_move.feedrate;
const float width = interpolate ? lerp(prev_move.width, curr_move.width, t) : curr_move.width; const float width = interpolate ? lerp(prev_move.width, curr_move.width, t) : curr_move.width;
const float height = interpolate ? lerp(prev_move.height, curr_move.height, t) : curr_move.height; const float height = interpolate ? lerp(prev_move.height, curr_move.height, t) : curr_move.height;
const float mm3_per_mm = interpolate ? lerp(prev_move.mm3_per_mm, curr_move.mm3_per_mm, t) : curr_move.mm3_per_mm; const float mm3_per_mm = interpolate ? lerp(prev_move.mm3_per_mm, curr_move.mm3_per_mm, t) : curr_move.mm3_per_mm;
const float fan_speed = interpolate ? lerp(prev_move.fan_speed, curr_move.fan_speed, t) : curr_move.fan_speed; const float fan_speed = interpolate ? lerp(prev_move.fan_speed, curr_move.fan_speed, t) : curr_move.fan_speed;
const float temperature = interpolate ? lerp(prev_move.temperature, curr_move.temperature, t) : curr_move.temperature; const float temperature = interpolate ? lerp(prev_move.temperature, curr_move.temperature, t) : curr_move.temperature;
actual_speed_moves.push_back({ actual_speed_moves.push_back({
block.move_id, block.move_id,
position, position,
block.trapezoid.cruise_feedrate, block.trapezoid.cruise_feedrate,
delta_extruder, delta_extruder,
feedrate, feedrate,
width, width,
height, height,
mm3_per_mm, mm3_per_mm,
fan_speed, fan_speed,
temperature temperature
}); });
}
} }
}
const bool is_cruise_only = block.trapezoid.is_cruise_only(block.distance); const bool is_cruise_only = block.trapezoid.is_cruise_only(block.distance);
actual_speed_moves.push_back({ actual_speed_moves.push_back({
block.move_id, block.move_id,
std::nullopt, std::nullopt,
(is_cruise_only || !has_deceleration) ? block.trapezoid.cruise_feedrate : block.feedrate_profile.exit, (is_cruise_only || !has_deceleration) ? block.trapezoid.cruise_feedrate : block.feedrate_profile.exit,
std::nullopt, std::nullopt,
std::nullopt, std::nullopt,
std::nullopt, std::nullopt,
std::nullopt, std::nullopt,
std::nullopt, std::nullopt,
std::nullopt, std::nullopt,
std::nullopt std::nullopt
}); });
}
} }
g1_times_cache.push_back({ block.g1_line_id, block.remaining_internal_g1_lines, float(time) }); g1_times_cache.push_back({ block.g1_line_id, block.remaining_internal_g1_lines, float(time) });
// update times for remaining time to printer stop placeholders // update times for remaining time to printer stop placeholders