o sub ; o call <0|2> ; 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[#9/1] MOD 2 EQ 1] # = [FIX[#9/2] MOD 2 EQ 1] # = [FIX[#9/4] MOD 2 EQ 1] # = [FIX[#9/8] MOD 2 EQ 1] # = [FIX[#9/1] MOD 2 EQ 0] # = [FIX[#9/2] MOD 2 EQ 0] # = [FIX[#9/4] MOD 2 EQ 0] # = [FIX[#9/8] MOD 2 EQ 0] # = #<_td> # = [#/2] o1 if [EXISTS[#<_z_clearance>]] # = #<_z_clearance> o1 else # = #5 o1 endif o3 if [EXISTS[#<_stepover>]] # = #<_stepover> o3 else # = [#*0.4] o3 endif o4 if [EXISTS[#<_overlap>]] # = #<_overlap> o4 else # = [#*0.4] o4 endif # = #3 # = #4 o5 if [#4 LT #3] # = #4 # = #3 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 # = [#5 GE 0] # = [#1 EQ 0] # = [# XOR #] ; use # # = [# XOR #] ; order of movement # = 0 o10 if [#1 EQ 0] # = 1 o10 elseif [#1 EQ 2] # = -1 o10 endif # = # o11 if [#] # = # o11 endif # = 1 o12 if [# NE 0] # = -1 # = [-#] o12 endif G0 Z# o100 if [#5 NE 0] # = [[#-#]*ABS[SIN[#5]]-#] # = FUP[[#-ABS[#8]]/#] #
= 0 # = [SIN[#5]*# + #*COS[#5]] # = [SIN[#5]*# + #
/COS[#5] + #*SIN[#5]*TAN[#5]] # = [COS[#5]*# + #
/SIN[#5] + #*COS[#5]/TAN[#5]] # = [COS[#5]*# + #*SIN[#5]] G0 X[#2 + #*#] Y[# + #*#] G0 Z#6 G1 Z#7 o200 while [# GE 0] #
= [# - [#*#+ABS[#8]]] # = [SIN[#5]*# + #*COS[#5]] # = [SIN[#5]*# + #
/COS[#5] + #*SIN[#5]*TAN[#5]] # = [COS[#5]*# + #
/SIN[#5] + #*COS[#5]/TAN[#5]] # = [COS[#5]*# + #*SIN[#5]] o201 if [#] o211 if [# MOD 2 NE #] G1 X[#2 + #*#] Y[# - #*#] G1 X[#2 - #*#] Y[# + #*#] o211 else G1 X[#2 - #*#] Y[# + #*#] G1 X[#2 + #*#] Y[# - #*#] o211 endif o201 elseif [#] G1 X[#2 + #*#] Y[# - #*#] G1 X[#2 - #*#] Y[# + #*#] o201 else G1 X[#2 - #*#] Y[# + #*#] G1 X[#2 + #*#] Y[# - #*#] o201 endif #
= [# - [#*#+ABS[#8]+#*0.2]] # = [SIN[#5]*# + #*COS[#5]] # = [SIN[#5]*# + #
/COS[#5] + #*SIN[#5]*TAN[#5]] # = [COS[#5]*# + #
/SIN[#5] + #*COS[#5]/TAN[#5]] # = [COS[#5]*# + #*SIN[#5]] o202 if [#] ; no rapid back for both-ways milling. that's the whole point. o202 elseif [#] G0 X[#2 - #*#] Y[# + #*#] G0 X[#2 + #*#] Y[# - #*#] o202 else G0 X[#2 + #*#] Y[# - #*#] G0 X[#2 - #*#] Y[# + #*#] o202 endif # = [#-1] o200 endwhile o207 if [#8 GT 0] #
= [#] # = [SIN[#5]*# + #*COS[#5]] # = [SIN[#5]*# + #
/COS[#5] + #*SIN[#5]*TAN[#5]] # = [COS[#5]*# + #
/SIN[#5] + #*COS[#5]/TAN[#5]] # = [COS[#5]*# + #*SIN[#5]] o203 if [#] G1 X[#2 + #*#] Y[# - #*#] G1 X[#2 - #*#] Y[# + #*#] o203 else G1 X[#2 - #*#] Y[# + #*#] G1 X[#2 + #*#] Y[# - #*#] o203 endif o207 endif o100 else o104 if [#] o114 if [#] G0 X[#2 - # - ABS[#8]] Y[# - #] G0 Z#6 G1 Z#7 G1 Y[# + #] o114 else G0 X[#2 - # - ABS[#8]] Y[# - #] G0 Z#6 G1 Z#7 G1 Y[# + #] o114 endif o104 else o124 if [#] G0 X[#2 + # + ABS[#8]] Y[# - #] G0 Z#6 G1 Z#7 G1 Y[# + #] o124 else G0 X[#2 + # + ABS[#8]] Y[# - #] G0 Z#6 G1 Z#7 G1 Y[# + #] o124 endif o104 endif o107 if [#8 GT 0] G0 Z# o101 if [#] o111 if [#] G0 X[#2 - #] Y[# - #] G0 Z#6 G1 Z#7 G1 Y[# + #] o111 else G0 X[#2 - #] Y[# - #] G0 Z#6 G1 Z#7 G1 Y[# + #] o111 endif o101 else o121 if [#] G0 X[#2 + #] Y[# - #] G0 Z#6 G1 Z#7 G1 Y[# + #] o121 else G0 X[#2 + #] Y[# - #] G0 Z#6 G1 Z#7 G1 Y[# + #] o121 endif o101 endif o107 endif o100 endif G0 Z# o endsub M2