o sub ; o call [x][y] [diameter] [zs][ze] [mode] ; [1][2] [3] [4] [5] [6] # = [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] G90 ; absolute x,y,z G90.1 ; absolute i,j,k M101 ; enable Z-axis (M102 disables) G17 ; select XY plane for arcs # = #5410 o1 if [EXISTS[#<_z_clearance>]] # = #<_z_clearance> o1 else # = #4 o1 endif o2 if [EXISTS[#<_rampang>]] # = #<_rampang> o2 else # = 5 ; degrees o2 endif o3 if [EXISTS[#<_stepover>]] # = #<_stepover> o3 else # = [#*0.4] o3 endif # = [#*0.3] o115 if [[[#3-#]/2] LE #] # = [[[#3-#]/2]*0.8] o115 endif # = [#*2*3.14*TAN[#]] G0 Z# # = [#4-#5] # = [#/#] ; subtract off an epsilon fixes some things... # = [[# MOD 1.0]*360] o103 if [#] G0 X[#1+COS[-#]*#] Y[#2+SIN[-#]*#] G0 Z#4 G3 X[#1+#] Y[#2] I[#1] J[#2] Z[#5] P[FUP[#]] o103 else G0 X[#1+COS[-#]*#] Y[#2-SIN[-#]*#] G0 Z#4 G2 X[#1+#] Y[#2] I[#1] J[#2] Z[#5] P[FUP[#]] o103 endif o endsub