o sub ; xc, yc, w, d, zstart, zend, fincut, mode ; #1 #2 #3 #4 #5 #6 #7 #8 ; modes: ; 0: climb ; 1: conventional ;G10 L0 ; re-read tool data G90 ; absolute x,y,z G90.1 ; absolute i,j,k M101 ; enable Z-axis (M102 disables) G17 ; select XY plane for arcs # = #<_td> # = [#/2] o1 if [EXISTS[#<_z_clearance>]] # = #<_z_clearance> o1 else # = #5 o1 endif o3 if [EXISTS[#<_stepover>]] # = [#<_stepover>*0.8] o3 else # = [#*0.4*0.8] o3 endif o5 if [#7 EQ 0] #7 = # o5 endif G0 Z# # = [[#3-#4]/2-#7] # = FIX[#/#] # = # # = +1 o10 if [#8 EQ 1] # = -1 o10 endif G0 X[#1 + #4/2 + # + #7 + #*#] Y[#2 + [#4/2 + # + #7 + #*#]*#] G0 Z#5 G1 Z#6 G1 Y#2 o30 while [# GE 0] # = [#4/2 + # + #7 + #*#] # = [0.95-#/#*0.95] # = 0 o20 while [[# EQ 0 OR # LE 340] AND # LE 360] ; go to 340 degrees on everything but last round o201 if [# LT 90] G1 X[#1+ABS[COS[#]]**#*#] Y[#2-ABS[SIN[#]]**#*#*#] o201 elseif [# LT 180] G1 X[#1-ABS[COS[#]]**#*#] Y[#2-ABS[SIN[#]]**#*#*#] o201 elseif [# LT 270] G1 X[#1-ABS[COS[#]]**#*#] Y[#2+ABS[SIN[#]]**#*#*#] o201 else G1 X[#1+ABS[COS[#]]**#*#] Y[#2+ABS[SIN[#]]**#*#*#] o201 endif # = [#+1] o20 endwhile # = [#-1] o30 endwhile G1 X[#1+#4/2+#] Y[#2] o40 if [#8 EQ 1] G2 X[#1+#4/2+#] Y[#2] I#1 J#2 o40 else G3 X[#1+#4/2+#] Y[#2] I#1 J#2 o40 endif G0 Z# o endsub M2