o sub ; o call [x][y] [square_width] [ztop][zbot] [finishcut] [mode] # = [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/16] 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 G90.1 ; G91.1 incremental / 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# o11 if [#] o call [#1][#2] [#3] [#4][#5] [#7] o11 else G0 X[#1] Y[#2] G0 Z[#4] G1 Z[#5] o11 endif # = [[#3-#]/2] # = 1 # = [FIX[#/#]] # = [#/#] # = [-1] o10 if [#] # = [+1] o10 endif o30 while [# LE #] # = 0 o20 while [# LE 360] ; 0 = square, 1 = circle # = [1+1/#-#/#] ;1;[[#-#/360+0.95]/#] # = # ;o400 if [# GT 20] ; # = 20 ;o400 endif # = [[#+#/360-1]*#] 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 ;o31 if [#] G1 X[#1+[#3/2-#]] Y[#2-[#3/2-#]*#] G1 X[#1-[#3/2-#]] Y[#2-[#3/2-#]*#] G1 X[#1-[#3/2-#]] Y[#2+[#3/2-#]*#] G1 X[#1+[#3/2-#]] Y[#2+[#3/2-#]*#] G1 X[#1+[#3/2-#]] Y[#2] ;o31 else ;; this is wrong fix it ;G1 X[#1+[#3/2-#]] Y[#2-[#3/2-#]*#] ;G2 I[#1+[#3/2]] J[#2-[#3/2-#]*#] X[#1+[#3/2-#+#*SQRT[2]]] Y[#2-[#3/2-#+#*SQRT[2]]*#] ;G3 I[#1+[#3/2-#]] J[#2-[#3/2]*#] X[#1+[#3/2-#+#*SQRT[2]]] Y[#2-[#3/2-#+#*SQRT[2]]*#] ;G1 X[#1-[#3/2-#]] Y[#2-[#3/2-#]*#] ;G1 X[#1-[#3/2-#]] Y[#2+[#3/2-#]*#] ;G1 X[#1+[#3/2-#]] Y[#2+[#3/2-#]*#] ;G1 X[#1+[#3/2-#]] Y[#2] ;o31 endif G0 Z# o endsub M2