Files
linuxcnc/nc_files/end_bull.ngc
Thaddeus-Maximus f3953d66ae ?
2026-04-03 15:58:58 -05:00

131 lines
2.6 KiB
Plaintext
Executable File

o<end_bull> sub
; o<end_bull> call <0|2> <x> <y1><y2> <radius> <zstart><zend> <fincut> <mode>
#<side> = #1
#<x> = #2
#<ys> = #3
#<ye> = #4
#<r> = #5
#<zt> = #6
#<zb> = #7
#<fincut> = #8
#<mode> = #9
; 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[#<mode>/1] MOD 2 EQ 1]
#<M_BOTHWAYS> = [FIX[#<mode>/2] MOD 2 EQ 1]
#<M_PLUNGE> = [FIX[#<mode>/4] MOD 2 EQ 1]
#<M_OUTSIDE> = [FIX[#<mode>/8] MOD 2 EQ 1]
#<M_CLIMB> = [FIX[#<mode>/1] MOD 2 EQ 0]
#<M_ONEWAY> = [FIX[#<mode>/2] MOD 2 EQ 0]
#<M_HELIX> = [FIX[#<mode>/4] MOD 2 EQ 0]
#<M_INSIDE> = [FIX[#<mode>/8] MOD 2 EQ 0]
#<td> = #<_td>
#<tr> = [#<td>/2]
o1 if [EXISTS[#<_z_clearance>]]
#<z_clearance> = #<_z_clearance>
o1 else
#<z_clearance> = #<r>
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
; make <c> the more +y position and <b> the more -y position
#<c> = #<ys>
#<b> = #<ye>
o5 if [#<ye> LT #<ys>]
#<c> = #<ye>
#<b> = #<ys>
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> = [#<r> GE 0]
#<M_LEFT> = [#<side> 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 [#<side> EQ 0]
#<sign> = 1
o10 elseif [#<side> 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 [#<r> NE 0]
#<p1_x> = [#<x> - #<sign>*<r>]
#<p1_y> = [#<c> - #<tr>]
#<p2_x> = [#<x> + #<sign>*<tr>]
#<p2_y> = [#<c> - #<r>]
#<p3_x> = [#<x> + #<sign>*<tr>]
#<p3_y> = [#<b> + #<r>]
#<p4_x> = [#<x> + #<sign>*<tr>]
#<p4_y> = [#<b> + #<r>]
o101 if [#<sign_off> GT 0]
G0 X#<p1_x> Y#<p1_y>
G1 Z#<zb>
G2 X#<p2_x> Y#<p2_y>
G1 X#<p3_x> Y#<p3_y>
G2 X#<p4_x> Y#<p4_y>
o101 else
G0 X#<p4_x> Y#<p4_y>
G1 Z#<zb>
G3 X#<p3_x> Y#<p3_y>
G1 X#<p2_x> Y#<p2_y>
G3 X#<p1_x> Y#<p1_y>
o101 endif
o100 endif
G0 Z#<z_clearance>
o<end_bull> endsub
M2