Arc segment radius scaling (#16551)
This commit is contained in:
		| @@ -1567,14 +1567,15 @@ | ||||
| // | ||||
| // G2/G3 Arc Support | ||||
| // | ||||
| #define ARC_SUPPORT               // Disable this feature to save ~3226 bytes | ||||
| #define ARC_SUPPORT                 // Disable this feature to save ~3226 bytes | ||||
| #if ENABLED(ARC_SUPPORT) | ||||
|   #define MM_PER_ARC_SEGMENT    1 // (mm) Length (or minimum length) of each arc segment | ||||
|   #define MIN_ARC_SEGMENTS     24 // Minimum number of segments in a complete circle | ||||
|   #define MM_PER_ARC_SEGMENT      1 // (mm) Length (or minimum length) of each arc segment | ||||
|   //#define ARC_SEGMENTS_PER_R    1 // Max segment length, MM_PER = Min | ||||
|   #define MIN_ARC_SEGMENTS       24 // Minimum number of segments in a complete circle | ||||
|   //#define ARC_SEGMENTS_PER_SEC 50 // Use feedrate to choose segment length (with MM_PER_ARC_SEGMENT as the minimum) | ||||
|   #define N_ARC_CORRECTION     25 // Number of interpolated segments between corrections | ||||
|   //#define ARC_P_CIRCLES         // Enable the 'P' parameter to specify complete circles | ||||
|   //#define CNC_WORKSPACE_PLANES  // Allow G2/G3 to operate in XY, ZX, or YZ planes | ||||
|   #define N_ARC_CORRECTION       25 // Number of interpolated segments between corrections | ||||
|   //#define ARC_P_CIRCLES           // Enable the 'P' parameter to specify complete circles | ||||
|   //#define CNC_WORKSPACE_PLANES    // Allow G2/G3 to operate in XY, ZX, or YZ planes | ||||
| #endif | ||||
|  | ||||
| // Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes. | ||||
|   | ||||
| @@ -105,7 +105,10 @@ void plan_arc( | ||||
|  | ||||
|   const feedRate_t scaled_fr_mm_s = MMS_SCALED(feedrate_mm_s); | ||||
|  | ||||
|   #ifdef ARC_SEGMENTS_PER_SEC | ||||
|   #ifdef ARC_SEGMENTS_PER_R | ||||
|     float seg_length = MM_PER_ARC_SEGMENT * radius; | ||||
|     LIMIT(seg_length, MM_PER_ARC_SEGMENT, ARC_SEGMENTS_PER_R); | ||||
|   #elif ARC_SEGMENTS_PER_SEC | ||||
|     float seg_length = scaled_fr_mm_s * RECIPROCAL(ARC_SEGMENTS_PER_SEC); | ||||
|     NOLESS(seg_length, MM_PER_ARC_SEGMENT); | ||||
|   #else | ||||
|   | ||||
		Reference in New Issue
	
	Block a user