|
|
|
@ -103,7 +103,15 @@ void plan_arc(
|
|
|
|
|
mm_of_travel = linear_travel ? HYPOT(flat_mm, linear_travel) : ABS(flat_mm);
|
|
|
|
|
if (mm_of_travel < 0.001f) return;
|
|
|
|
|
|
|
|
|
|
uint16_t segments = FLOOR(mm_of_travel / (MM_PER_ARC_SEGMENT));
|
|
|
|
|
const feedRate_t scaled_fr_mm_s = MMS_SCALED(feedrate_mm_s);
|
|
|
|
|
|
|
|
|
|
#ifdef ARC_SEGMENTS_PER_SEC
|
|
|
|
|
float seg_length = scaled_fr_mm_s * _RECIP(ARC_SEGMENTS_PER_SEC);
|
|
|
|
|
NOLESS(seg_length, MM_PER_ARC_SEGMENT);
|
|
|
|
|
#else
|
|
|
|
|
constexpr float seg_length = MM_PER_ARC_SEGMENT;
|
|
|
|
|
#endif
|
|
|
|
|
uint16_t segments = FLOOR(mm_of_travel / seg_length);
|
|
|
|
|
NOLESS(segments, min_segments);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -146,10 +154,9 @@ void plan_arc(
|
|
|
|
|
// Initialize the extruder axis
|
|
|
|
|
raw.e = current_position.e;
|
|
|
|
|
|
|
|
|
|
const feedRate_t scaled_fr_mm_s = MMS_SCALED(feedrate_mm_s);
|
|
|
|
|
|
|
|
|
|
#if ENABLED(SCARA_FEEDRATE_SCALING)
|
|
|
|
|
const float inv_duration = scaled_fr_mm_s / MM_PER_ARC_SEGMENT;
|
|
|
|
|
const float inv_duration = scaled_fr_mm_s / seg_length;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
millis_t next_idle_ms = millis() + 200UL;
|
|
|
|
@ -206,7 +213,7 @@ void plan_arc(
|
|
|
|
|
planner.apply_leveling(raw);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
if (!planner.buffer_line(raw, scaled_fr_mm_s, active_extruder, MM_PER_ARC_SEGMENT
|
|
|
|
|
if (!planner.buffer_line(raw, scaled_fr_mm_s, active_extruder, seg_length
|
|
|
|
|
#if ENABLED(SCARA_FEEDRATE_SCALING)
|
|
|
|
|
, inv_duration
|
|
|
|
|
#endif
|
|
|
|
@ -226,7 +233,7 @@ void plan_arc(
|
|
|
|
|
planner.apply_leveling(raw);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
planner.buffer_line(raw, scaled_fr_mm_s, active_extruder, MM_PER_ARC_SEGMENT
|
|
|
|
|
planner.buffer_line(raw, scaled_fr_mm_s, active_extruder, seg_length
|
|
|
|
|
#if ENABLED(SCARA_FEEDRATE_SCALING)
|
|
|
|
|
, inv_duration
|
|
|
|
|
#endif
|
|
|
|
|