o sub ; o call [x1][y1] [x2][y2] [width] [ztop][zbot] [fincut] [mode] # = [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] ;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 # = #5410 # = [#/2] o1 if [EXISTS[#<_z_clearance>]] # = #<_z_clearance> o1 else # = #5 o1 endif o3 if [EXISTS[#<_stepover>]] # = #<_stepover> o3 else # = [#*0.4] o3 endif # = [ATAN[#4-#2]/[#3-#1]] # = [[#5-#5410]/2] o10 if [#] o call [#1][#2] [#5-2*#8] [#6][#7] [#9] o10 else G0 Z# G0 X#1 Y#2 G0 Z#6 G1 Z#7 o10 endif ;G1 X[#1 +[SIN[#]*[#]]] Y[#2 -[COS[#]*[#]]] ;G3 X[#1 -[SIN[#]*[#]]] Y[#2 +[COS[#]*[#]]] I#1 J#2 ;G0 X[#1 +[SIN[#]*[#]]] Y[#2 -[COS[#]*[#]]] # = SQRT[[#1-#3]**2 + [#2-#4]**2] # = [#/FUP[# / #]] # = 0 # = 0 o100 if [#] # = [[#5-#5410]/2-#8] G1 X[#1+#*COS[#] -[SIN[#]*[#]]] Y[#2+#*SIN[#] +[COS[#]*[#]]] G3 X[#1+#*COS[#] +[SIN[#]*[#]]] Y[#2+#*SIN[#] -[COS[#]*[#]]] I[#1+#*COS[#]] J[#2+#*SIN[#]] o200 while [# LE #] G0 X[#1+#*COS[#] +[SIN[#]*[#]]] Y[#2+#*SIN[#] -[COS[#]*[#]]] G1 X[#1+#*COS[#] +[SIN[#]*[#]]] Y[#2+#*SIN[#] -[COS[#]*[#]]] G3 X[#1+#*COS[#] -[SIN[#]*[#]]] Y[#2+#*SIN[#] +[COS[#]*[#]]] I[#1+#*COS[#]] J[#2+#*SIN[#]] G1 X[#1+#*COS[#] -[SIN[#]*[#]]] Y[#2+#*SIN[#] +[COS[#]*[#]]] # = # # = [#+#] o200 endwhile # = [[#5-#5410]/2] G1 X[#3 +[SIN[#]*[#]]] Y[#4 -[COS[#]*[#]]] ; point 1 G3 X[#3 -[SIN[#]*[#]]] Y[#4 +[COS[#]*[#]]] I#3 J#4 ; point 2 G1 X[#1 -[SIN[#]*[#]]] Y[#2 +[COS[#]*[#]]] ; point 3 G3 X[#1 +[SIN[#]*[#]]] Y[#2 -[COS[#]*[#]]] I#1 J#2 ; point 4 G1 X[#3 +[SIN[#]*[#]]] Y[#4 -[COS[#]*[#]]] ; point 1 o100 else # = [[#5-#5410]/2-#8] G1 X[#1+#*COS[#] +[SIN[#]*[#]]] Y[#2+#*SIN[#] -[COS[#]*[#]]] G2 X[#1+#*COS[#] -[SIN[#]*[#]]] Y[#2+#*SIN[#] +[COS[#]*[#]]] I[#1+#*COS[#]] J[#2+#*SIN[#]] o200 while [# LE #] G0 X[#1+#*COS[#] -[SIN[#]*[#]]] Y[#2+#*SIN[#] +[COS[#]*[#]]] G1 X[#1+#*COS[#] -[SIN[#]*[#]]] Y[#2+#*SIN[#] +[COS[#]*[#]]] G2 X[#1+#*COS[#] +[SIN[#]*[#]]] Y[#2+#*SIN[#] -[COS[#]*[#]]] I[#1+#*COS[#]] J[#2+#*SIN[#]] G1 X[#1+#*COS[#] +[SIN[#]*[#]]] Y[#2+#*SIN[#] -[COS[#]*[#]]] # = # # = [#+#] o200 endwhile # = [[#5-#5410]/2] G1 X[#3 -[SIN[#]*[#]]] Y[#4 +[COS[#]*[#]]] ; point 2 G2 X[#3 +[SIN[#]*[#]]] Y[#4 -[COS[#]*[#]]] I#3 J#4 ; point 1 G1 X[#1 +[SIN[#]*[#]]] Y[#2 -[COS[#]*[#]]] ; point 4 G2 X[#1 -[SIN[#]*[#]]] Y[#2 +[COS[#]*[#]]] I#1 J#2 ; point 3 G1 X[#3 -[SIN[#]*[#]]] Y[#4 +[COS[#]*[#]]] ; point 2 o100 endif G0 X#3 Y#4 G0 Z# o endsub M2