|
@@ -103,21 +103,21 @@ void plan_arc(
|
103
|
103
|
|
104
|
104
|
const feedRate_t scaled_fr_mm_s = MMS_SCALED(feedrate_mm_s);
|
105
|
105
|
|
106
|
|
- #ifdef ARC_SEGMENTS_PER_R
|
107
|
|
- float seg_length = MM_PER_ARC_SEGMENT * radius;
|
108
|
|
- LIMIT(seg_length, MM_PER_ARC_SEGMENT, ARC_SEGMENTS_PER_R);
|
109
|
|
- #elif ARC_SEGMENTS_PER_SEC
|
110
|
|
- float seg_length = scaled_fr_mm_s * RECIPROCAL(ARC_SEGMENTS_PER_SEC);
|
111
|
|
- NOLESS(seg_length, MM_PER_ARC_SEGMENT);
|
112
|
|
- #else
|
113
|
|
- constexpr float seg_length = MM_PER_ARC_SEGMENT;
|
114
|
|
- #endif
|
115
|
|
-
|
116
|
|
- // Length divided by segment size gives segment count
|
|
106
|
+ // Start with a nominal segment length
|
|
107
|
+ float seg_length = (
|
|
108
|
+ #ifdef ARC_SEGMENTS_PER_R
|
|
109
|
+ constrain(MM_PER_ARC_SEGMENT * radius, MM_PER_ARC_SEGMENT, ARC_SEGMENTS_PER_R)
|
|
110
|
+ #elif ARC_SEGMENTS_PER_SEC
|
|
111
|
+ _MAX(scaled_fr_mm_s * RECIPROCAL(ARC_SEGMENTS_PER_SEC), MM_PER_ARC_SEGMENT)
|
|
112
|
+ #else
|
|
113
|
+ MM_PER_ARC_SEGMENT
|
|
114
|
+ #endif
|
|
115
|
+ );
|
|
116
|
+ // Divide total travel by nominal segment length
|
117
|
117
|
uint16_t segments = FLOOR(mm_of_travel / seg_length);
|
118
|
|
- if (segments < min_segments) {
|
119
|
|
- segments = min_segments; // No fewer than the minimum
|
120
|
|
- seg_length = mm_of_travel / segments; // A new segment length
|
|
118
|
+ if (segments < min_segments) { // Too few segments?
|
|
119
|
+ segments = min_segments; // More segments
|
|
120
|
+ seg_length = mm_of_travel / segments; // but also shorter
|
121
|
121
|
}
|
122
|
122
|
|
123
|
123
|
/**
|