mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-01 20:10:37 +08:00
SPE-2275: Fixed export of M73 CXX lines to gcode
This commit is contained in:
parent
dfdc407fd6
commit
ec8efbd444
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user