Files
linuxcnc/nc_files/end_angle.ngc
Thaddeus Hughes ad1f8719d6 big overhaul
2026-04-05 20:51:43 -05:00

226 lines
5.6 KiB
Plaintext
Executable File

o<end_angle> sub
; o<end_angle> call <0|2> <x> <y1><y2> <angle> <zstart><zend> <fincut> <mode>
; right now only 0 and 2 work but hey that's most of what you'd do
; 0: +x side
; 1: +y side
; 2: -x side
; 3: -y side
;G10 L0 ; re-read tool data
G90 ; absolute x,y,z
G91.1 ; incremental i,j,k
M101 ; enable Z-axis (M102 disables)
G17 ; select XY plane for arcs
#<M_CONVENTIONAL> = [FIX[#9/1] MOD 2 EQ 1]
#<M_BOTHWAYS> = [FIX[#9/2] MOD 2 EQ 1]
#<M_PLUNGE> = [FIX[#9/4] MOD 2 EQ 1]
#<M_OUTSIDE> = [FIX[#9/8] MOD 2 EQ 1]
#<M_CLIMB> = [FIX[#9/1] MOD 2 EQ 0]
#<M_ONEWAY> = [FIX[#9/2] MOD 2 EQ 0]
#<M_HELIX> = [FIX[#9/4] MOD 2 EQ 0]
#<M_INSIDE> = [FIX[#9/8] MOD 2 EQ 0]
#<td> = #5410
#<tr> = [#<td>/2]
o1 if [EXISTS[#<_z_clearance>]]
#<z_clearance> = #<_z_clearance>
o1 else
#<z_clearance> = #5
o1 endif
o3 if [EXISTS[#<_stepover>]]
#<stepover> = #<_stepover>
o3 else
#<stepover> = [#<td>*0.4]
o3 endif
o4 if [EXISTS[#<_overlap>]]
#<overlap> = #<_overlap>
o4 else
#<overlap> = [#<stepover>*0.4]
o4 endif
#<c> = #3
#<b> = #4
o5 if [#4 LT #3]
#<c> = #4
#<b> = #3
o5 endif
; inputs:
; - climb/conv (C)
; - angle pos/neg (A)
; - left or right (L)
; outputs:
; - #<b> or #<c> (B) = L NE A
; - order of movement (O) = C NE A
; - sign of offsets (S) = L
#<M_ANGLE> = [#5 GE 0]
#<M_LEFT> = [#1 EQ 0]
#<SW_B> = [#<M_LEFT> XOR #<M_ANGLE>] ; use #<b>
#<SW_O> = [#<M_CLIMB> XOR #<M_ANGLE>] ; order of movement
#<sign> = 0
o10 if [#1 EQ 0]
#<sign> = 1
o10 elseif [#1 EQ 2]
#<sign> = -1
o10 endif
#<origin> = #<b>
o11 if [#<SW_B>]
#<origin> = #<c>
o11 endif
#<sign_off> = 1
o12 if [#<M_ANGLE> NE 0]
#<sign_off> = -1
#<overlap> = [-#<overlap>]
o12 endif
G0 Z#<z_clearance>
o100 if [#5 NE 0]
#<l_total> = [[#<b>-#<c>]*ABS[SIN[#5]]-#<tr>]
#<l_steps> = FUP[[#<l_total>-ABS[#8]]/#<stepover>]
#<dl> = 0
#<x1> = [SIN[#5]*#<overlap> + #<tr>*COS[#5]]
#<x2> = [SIN[#5]*#<overlap> + #<dl>/COS[#5] + #<tr>*SIN[#5]*TAN[#5]]
#<y1> = [COS[#5]*#<overlap> + #<dl>/SIN[#5] + #<tr>*COS[#5]/TAN[#5]]
#<y2> = [COS[#5]*#<overlap> + #<tr>*SIN[#5]]
G0 X[#2 + #<x1>*#<sign>] Y[#<origin> + #<y2>*#<sign>]
G0 Z#6
G1 Z#7
o200 while [#<l_steps> GE 0]
#<dl> = [#<l_total> - [#<l_steps>*#<stepover>+ABS[#8]]]
#<x1> = [SIN[#5]*#<overlap> + #<tr>*COS[#5]]
#<x2> = [SIN[#5]*#<overlap> + #<dl>/COS[#5] + #<tr>*SIN[#5]*TAN[#5]]
#<y1> = [COS[#5]*#<overlap> + #<dl>/SIN[#5] + #<tr>*COS[#5]/TAN[#5]]
#<y2> = [COS[#5]*#<overlap> + #<tr>*SIN[#5]]
o201 if [#<M_BOTHWAYS>]
o211 if [#<l_steps> MOD 2 NE #<M_CLIMB>]
G1 X[#2 + #<x1>*#<sign>] Y[#<origin> - #<y1>*#<sign>]
G1 X[#2 - #<x2>*#<sign>] Y[#<origin> + #<y2>*#<sign>]
o211 else
G1 X[#2 - #<x2>*#<sign>] Y[#<origin> + #<y2>*#<sign>]
G1 X[#2 + #<x1>*#<sign>] Y[#<origin> - #<y1>*#<sign>]
o211 endif
o201 elseif [#<SW_O>]
G1 X[#2 + #<x1>*#<sign>] Y[#<origin> - #<y1>*#<sign>]
G1 X[#2 - #<x2>*#<sign>] Y[#<origin> + #<y2>*#<sign>]
o201 else
G1 X[#2 - #<x2>*#<sign>] Y[#<origin> + #<y2>*#<sign>]
G1 X[#2 + #<x1>*#<sign>] Y[#<origin> - #<y1>*#<sign>]
o201 endif
#<dl> = [#<l_total> - [#<l_steps>*#<stepover>+ABS[#8]+#<stepover>*0.2]]
#<x1> = [SIN[#5]*#<overlap> + #<tr>*COS[#5]]
#<x2> = [SIN[#5]*#<overlap> + #<dl>/COS[#5] + #<tr>*SIN[#5]*TAN[#5]]
#<y1> = [COS[#5]*#<overlap> + #<dl>/SIN[#5] + #<tr>*COS[#5]/TAN[#5]]
#<y2> = [COS[#5]*#<overlap> + #<tr>*SIN[#5]]
o202 if [#<M_BOTHWAYS>]
; no rapid back for both-ways milling. that's the whole point.
o202 elseif [#<SW_O>]
G0 X[#2 - #<x2>*#<sign>] Y[#<origin> + #<y2>*#<sign>]
G0 X[#2 + #<x1>*#<sign>] Y[#<origin> - #<y1>*#<sign>]
o202 else
G0 X[#2 + #<x1>*#<sign>] Y[#<origin> - #<y1>*#<sign>]
G0 X[#2 - #<x2>*#<sign>] Y[#<origin> + #<y2>*#<sign>]
o202 endif
#<l_steps> = [#<l_steps>-1]
o200 endwhile
o207 if [#8 GT 0]
#<dl> = [#<l_total>]
#<x1> = [SIN[#5]*#<overlap> + #<tr>*COS[#5]]
#<x2> = [SIN[#5]*#<overlap> + #<dl>/COS[#5] + #<tr>*SIN[#5]*TAN[#5]]
#<y1> = [COS[#5]*#<overlap> + #<dl>/SIN[#5] + #<tr>*COS[#5]/TAN[#5]]
#<y2> = [COS[#5]*#<overlap> + #<tr>*SIN[#5]]
o203 if [#<SW_O>]
G1 X[#2 + #<x1>*#<sign>] Y[#<origin> - #<y1>*#<sign>]
G1 X[#2 - #<x2>*#<sign>] Y[#<origin> + #<y2>*#<sign>]
o203 else
G1 X[#2 - #<x2>*#<sign>] Y[#<origin> + #<y2>*#<sign>]
G1 X[#2 + #<x1>*#<sign>] Y[#<origin> - #<y1>*#<sign>]
o203 endif
o207 endif
o100 else
o104 if [#<M_LEFT>]
o114 if [#<M_CLIMB>]
G0 X[#2 - #<tr> - ABS[#8]] Y[#<c> - #<overlap>]
G0 Z#6
G1 Z#7
G1 Y[#<b> + #<overlap>]
o114 else
G0 X[#2 - #<tr> - ABS[#8]] Y[#<c> - #<overlap>]
G0 Z#6
G1 Z#7
G1 Y[#<b> + #<overlap>]
o114 endif
o104 else
o124 if [#<M_CONVENTIONAL>]
G0 X[#2 + #<tr> + ABS[#8]] Y[#<c> - #<overlap>]
G0 Z#6
G1 Z#7
G1 Y[#<b> + #<overlap>]
o124 else
G0 X[#2 + #<tr> + ABS[#8]] Y[#<c> - #<overlap>]
G0 Z#6
G1 Z#7
G1 Y[#<b> + #<overlap>]
o124 endif
o104 endif
o107 if [#8 GT 0]
G0 Z#<z_clearance>
o101 if [#<M_LEFT>]
o111 if [#<M_CLIMB>]
G0 X[#2 - #<tr>] Y[#<c> - #<overlap>]
G0 Z#6
G1 Z#7
G1 Y[#<b> + #<overlap>]
o111 else
G0 X[#2 - #<tr>] Y[#<c> - #<overlap>]
G0 Z#6
G1 Z#7
G1 Y[#<b> + #<overlap>]
o111 endif
o101 else
o121 if [#<M_CONVENTIONAL>]
G0 X[#2 + #<tr>] Y[#<c> - #<overlap>]
G0 Z#6
G1 Z#7
G1 Y[#<b> + #<overlap>]
o121 else
G0 X[#2 + #<tr>] Y[#<c> - #<overlap>]
G0 Z#6
G1 Z#7
G1 Y[#<b> + #<overlap>]
o121 endif
o101 endif
o107 endif
o100 endif
G0 Z#<z_clearance>
o<end_angle> endsub
M2