o sub ; o call [x][y] [square_width] [boss_diamter] [ztop][zbot] [finishcut] [mode] # = [FIX[#8/1] MOD 2 EQ 1] # = [FIX[#8/2] MOD 2 EQ 1] # = [FIX[#8/4] MOD 2 EQ 1] # = [FIX[#8/8] MOD 2 EQ 1] # = [FIX[#8/1] MOD 2 EQ 0] # = [FIX[#8/2] MOD 2 EQ 0] # = [FIX[#8/4] MOD 2 EQ 0] # = [FIX[#8/8] MOD 2 EQ 0] ;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 G0 Z# # = [[#3-#4]/2-#7] # = [FIX[#/#]-1] # = [#+1] # = +1 o10 if [#] # = [-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] # = 0 o20 while [# LE 360] # = [1-[#-#/360+0.95]/#] # = [#4/2 + # + #7 + [1+#-#/360]*#] 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 [#] G3 X[#1+#4/2+#] Y[#2] I#1 J#2 o40 else G2 X[#1+#4/2+#] Y[#2] I#1 J#2 o40 endif G0 Z# o endsub M2