Add ARC_SEGMENTS_PER_SEC for finer G2/G3 arcs (#16510)

This commit is contained in:
Jamie
2020-01-09 04:48:00 -06:00
committed by Scott Lahteine
parent 8a7661df89
commit 36d08f8ad3
133 changed files with 550 additions and 411 deletions

View File

@ -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