o sub ; o call <0|2> # = #1 # = #2 # = #3 # = #4 # = #5 # = #6 # = #7 # = #8 # = #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 # = [FIX[#/1] MOD 2 EQ 1] # = [FIX[#/2] MOD 2 EQ 1] # = [FIX[#/4] MOD 2 EQ 1] # = [FIX[#/8] MOD 2 EQ 1] # = [FIX[#/1] MOD 2 EQ 0] # = [FIX[#/2] MOD 2 EQ 0] # = [FIX[#/4] MOD 2 EQ 0] # = [FIX[#/8] MOD 2 EQ 0] # = #5410 # = [#/2] o1 if [EXISTS[#<_z_clearance>]] # = #<_z_clearance> o1 else # = # o1 endif o3 if [EXISTS[#<_stepover>]] # = #<_stepover> o3 else # = [#*0.4] o3 endif o4 if [EXISTS[#<_overlap>]] # = #<_overlap> o4 else # = [#*0.4] o4 endif ; make the more +y position and the more -y position # = # # = # o5 if [# LT #] # = # # = # o5 endif ; inputs: ; - climb/conv (C) ; - angle pos/neg (A) ; - left or right (L) ; outputs: ; - # or # (B) = L NE A ; - order of movement (O) = C NE A ; - sign of offsets (S) = L # = [# GE 0] # = [# EQ 0] # = [# XOR #] ; use # # = [# XOR #] ; order of movement # = 0 o10 if [# EQ 0] # = 1 o10 elseif [# EQ 2] # = -1 o10 endif # = # o11 if [#] # = # o11 endif # = 1 o12 if [# NE 0] # = -1 # = [-#] o12 endif G0 Z# o100 if [# NE 0] # = [# - #*] # = [# - #] # = [# + #*] # = [# - #] # = [# + #*] # = [# + #] # = [# + #*] # = [# + #] o101 if [# GT 0] G0 X# Y# G1 Z# G2 X# Y# G1 X# Y# G2 X# Y# o101 else G0 X# Y# G1 Z# G3 X# Y# G1 X# Y# G3 X# Y# o101 endif o100 endif G0 Z# o endsub M2