o sub ; o call [x1][y1] [x2][y2] [ztop][zbot] [mode] [radius] # = [FIX[#7/1] MOD 2 EQ 1] # = [FIX[#7/2] MOD 2 EQ 1] # = [FIX[#7/4] MOD 2 EQ 1] # = [FIX[#7/8] MOD 2 EQ 1] # = [FIX[#7/1] MOD 2 EQ 0] # = [FIX[#7/2] MOD 2 EQ 0] # = [FIX[#7/4] MOD 2 EQ 0] # = [FIX[#7/8] MOD 2 EQ 0] ;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 # = #<_td> # = [#/2] o1 if [EXISTS[#<_z_clearance>]] # = #<_z_clearance> o1 else # = #4 o1 endif # = #1 # = #3 o3 if [#3 LT #1] # = #3 # = #1 o3 endif # = #2 # = #4 o4 if [#4 LT #2] # = #4 # = #2 o4 endif G0 Z# o10 if [# AND #] ; plunge in center G0 X[[#1+#3]/2] Y[[#2+#4]/2] G0 Z#5 G1 Z#6 G1 X[#-#] o102 if [#8 GT #] G1 Y[#+#8] G2 X[#-#8] Y[#+#] J0 I[-#8+#] G1 X[#+#8] G2 Y[#+#8] X[#+#] I0 J[+#8-#] G1 Y[#-#8] G2 X[#+#8] Y[#-#] J0 I[+#8-#] G1 X[#-#8] G2 Y[#-#8] X[#-#] I0 J[-#8+#] o102 else G1 Y[#+#] G1 X[#-#] G1 Y[#-#] G1 X[#-#] G1 Y[#+#] o102 endif G1 Y[[#2+#4]/2] ; go to center and pull out G0 X[[#1+#3]/2] Y[[#2+#4]/2] G0 Z#5 o10 elseif [# AND #] ; CCW inside G0 X[[#1+#3]/2] Y[[#2+#4]/2] G0 Z#5 G1 Z#6 G1 X[#-#] o101 if [#8 GT #] G1 Y[#-#8] G3 X[#-#8] Y[#-#] J0 I[-#8+#] G1 X[#+#8] G3 Y[#-#8] X[#+#] I0 J[-#8+#] G1 Y[#+#8] G3 X[#+#8] Y[#+#] J0 I[+#8-#] G1 X[#-#8] G3 Y[#+#8] X[#-#] I0 J[+#8-#] o101 else G1 Y[#-#] G1 X[#+#] G1 Y[#+#] G1 X[#-#] G1 Y[#-#] o101 endif G1 Y[[#2+#4]/2] ; go to center and pull out G0 X[[#1+#3]/2] Y[[#2+#4]/2] G0 Z#5 o10 elseif [# AND #] ; plunge at corner G0 X[#-#] Y[#+#] G0 Z#5 G1 Z#6 o104 if [#8 GT 0] G1 Y[#+#8] G3 X[#+#8] Y[#-#] J0 I[+#8+#] G1 X[#-#8] G3 Y[#+#8] X[#+#] I0 J[+#8+#] G1 Y[#-#8] G3 X[#-#8] Y[#+#] J0 I[-#8-#] G1 X[#+#8] G3 Y[#-#8] X[#-#] I0 J[-#8-#] o104 else G1 Y[#-#] G1 X[#+#] G1 Y[#+#] G1 X[#-#] o104 endif G0 Z#5 o10 elseif [# AND #] ; plunge at corner G0 X[#-#] Y[#-#] G0 Z#5 G1 Z#6 o103 if [#8 GT 0] G1 Y[#-#8] G2 X[#+#8] Y[#+#] J0 I[+#8+#] G1 X[#-#8] G2 Y[#-#8] X[#+#] I0 J[-#8-#] G1 Y[#+#8] G2 X[#-#8] Y[#-#] J0 I[-#8-#] G1 X[#+#8] G2 Y[#+#8] X[#-#] I0 J[+#8+#] o103 else G1 Y[#+#] G1 X[#+#] G1 Y[#-#] G1 X[#-#] o103 endif G0 Z#5 o10 endif o endsub M2