Add ARC_SEGMENTS_PER_SEC for finer G2/G3 arcs (#16510)
This commit is contained in:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user