; frame_rect - cuts along the perimeter of a rectangle (inside or outside). ; Supports optional corner radii. ; Requires globals: #<_z_top>, #<_z_bot> ; Requires tool loaded (uses #5410 for diameter) ; Optional global: #<_z_clearance> o sub ; o call [mode] [x1][y1] [x2][y2] [radius] ; #1=mode #2=x1 #3=y1 #4=x2 #5=y2 #6=radius # = [FIX[#1/1] MOD 2 EQ 1] # = [FIX[#1/8] MOD 2 EQ 1] # = [FIX[#1/1] MOD 2 EQ 0] # = [FIX[#1/8] MOD 2 EQ 0] G90 G91.1 M101 G17 # = #5410 # = [#/2] o1 if [EXISTS[#<_z_clearance>]] # = #<_z_clearance> o1 else # = #<_z_top> o1 endif # = #2 # = #4 o3 if [#4 LT #2] # = #4 # = #2 o3 endif # = #3 # = #5 o4 if [#5 LT #3] # = #5 # = #3 o4 endif G0 Z# o10 if [# AND #] G0 X[[#2+#4]/2] Y[[#3+#5]/2] G0 Z#<_z_top> G1 Z#<_z_bot> G1 X[#-#] o102 if [#6 GT #] G1 Y[#+#6] G2 X[#-#6] Y[#+#] J0 I[-#6+#] G1 X[#+#6] G2 Y[#+#6] X[#+#] I0 J[+#6-#] G1 Y[#-#6] G2 X[#+#6] Y[#-#] J0 I[+#6-#] G1 X[#-#6] G2 Y[#-#6] X[#-#] I0 J[-#6+#] o102 else G1 Y[#+#] G1 X[#-#] G1 Y[#-#] G1 X[#-#] G1 Y[#+#] o102 endif G1 Y[[#3+#5]/2] G0 X[[#2+#4]/2] Y[[#3+#5]/2] G0 Z#<_z_top> o10 elseif [# AND #] G0 X[[#2+#4]/2] Y[[#3+#5]/2] G0 Z#<_z_top> G1 Z#<_z_bot> G1 X[#-#] o101 if [#6 GT #] G1 Y[#-#6] G3 X[#-#6] Y[#-#] J0 I[-#6+#] G1 X[#+#6] G3 Y[#-#6] X[#+#] I0 J[-#6+#] G1 Y[#+#6] G3 X[#+#6] Y[#+#] J0 I[+#6-#] G1 X[#-#6] G3 Y[#+#6] X[#-#] I0 J[+#6-#] o101 else G1 Y[#-#] G1 X[#+#] G1 Y[#+#] G1 X[#-#] G1 Y[#-#] o101 endif G1 Y[[#3+#5]/2] G0 X[[#2+#4]/2] Y[[#3+#5]/2] G0 Z#<_z_top> o10 elseif [# AND #] G0 X[#-#] Y[#+#] G0 Z#<_z_top> G1 Z#<_z_bot> o104 if [#6 GT 0] G1 Y[#+#6] G3 X[#+#6] Y[#-#] J0 I[+#6+#] G1 X[#-#6] G3 Y[#+#6] X[#+#] I0 J[+#6+#] G1 Y[#-#6] G3 X[#-#6] Y[#+#] J0 I[-#6-#] G1 X[#+#6] G3 Y[#-#6] X[#-#] I0 J[-#6-#] o104 else G1 Y[#-#] G1 X[#+#] G1 Y[#+#] G1 X[#-#] o104 endif G0 Z#<_z_top> o10 elseif [# AND #] G0 X[#-#] Y[#-#] G0 Z#<_z_top> G1 Z#<_z_bot> o103 if [#6 GT 0] G1 Y[#-#6] G2 X[#+#6] Y[#+#] J0 I[+#6+#] G1 X[#-#6] G2 Y[#-#6] X[#+#] I0 J[-#6-#] G1 Y[#+#6] G2 X[#-#6] Y[#-#] J0 I[-#6-#] G1 X[#+#6] G2 Y[#+#6] X[#-#] I0 J[+#6+#] o103 else G1 Y[#+#] G1 X[#+#] G1 Y[#-#] G1 X[#-#] o103 endif G0 Z#<_z_top> o10 endif o endsub M2