; pocket_circ - circular pocket cut with an outward spiral from center. ; Requires globals: #<_z_top>, #<_z_bot> ; Requires tool loaded (uses #5410 for diameter) ; Optional globals: #<_z_clearance>, #<_rampang>, #<_stepover> o sub ; o call [mode] [x][y] [diameter] [fincut] ; #1=mode #2=x #3=y #4=diameter #5=fincut # = [FIX[#1/1] MOD 2 EQ 1] # = [FIX[#1/4] MOD 2 EQ 1] # = [FIX[#1/1] MOD 2 EQ 0] # = [FIX[#1/4] MOD 2 EQ 0] G90 G90.1 M101 G17 # = #5410 # = [#/2] o1 if [EXISTS[#<_z_clearance>]] # = #<_z_clearance> o1 else # = #<_z_top> o1 endif o2 if [EXISTS[#<_rampang>]] # = #<_rampang> o2 else # = 5 o2 endif o3 if [EXISTS[#<_stepover>]] # = #<_stepover> o3 else # = [#*0.4] o3 endif o4 if [# GT #4] o5 return ; tool bigger than pocket o4 endif # = 0 # = 0 o100 if [#] # = [#*0.3] o115 if [[[#4-#]/2-ABS[#5]] LE #] # = [[[#4-#]/2-ABS[#5]]*0.8] o115 endif # = [#*2*3.14*TAN[#]] ; guard: if z_step is tiny, avoid infinite loop o116 if [# LT 0.0001] # = 0.0001 o116 endif G0 Z# G0 X[#2+#] Y[#3] G0 Z#<_z_top> # = [#<_z_top>-#] o101 while [# GT #<_z_bot>] o102 if [#] G3 X[#2+#] Y[#3] I[#2] J[#3] Z[#] P1 o102 else G2 X[#2+#] Y[#3] I[#2] J[#3] Z[#] P1 o102 endif # = [# - #] o101 endwhile ; finish plunge to exact depth ; guard: avoid division by zero if z_top == z_bot o117 if [ABS[#<_z_top>-#<_z_bot>] GT 0.0001] # = [[#-#<_z_bot>]/[#<_z_top>-#<_z_bot>]*360] o117 else # = 0 o117 endif o103 if [#] G3 X[#2+COS[#]*#] Y[#3+SIN[#]*#] I[#2] J[#3] Z[#<_z_bot>] G3 X[#2+COS[#]*#] Y[#3+SIN[#]*#] I[#2] J[#3] Z[#<_z_bot>] o103 else G2 X[#2+COS[#]*#] Y[#3-SIN[#]*#] I[#2] J[#3] Z[#<_z_bot>] G2 X[#2+COS[#]*#] Y[#3-SIN[#]*#] I[#2] J[#3] Z[#<_z_bot>] o103 endif o100 elseif [#] G0 Z# G0 X[#2] Y[#3] G0 Z[#<_z_top>] G1 Z[#<_z_bot>] o100 endif ; spiral outward # = # # = # # = 0 o105 while [# LT [[#4-#]/2-ABS[#5]]] o106 if [#] G1 X[#2+COS[#]*#] Y[#3+SIN[#]*#] o106 else G1 X[#2+COS[#]*#] Y[#3-SIN[#]*#] o106 endif # = [#+1] # = [#+[#-#]/360*#] # = [#+1] o109 if [# GT 360000] o105 BREAK ; safety limit o109 endif o105 endwhile ; pre-finish circle # = [[#4-#]/2-ABS[#5]] o107 if [#] G1 X[#2+COS[#]*#] Y[#3+SIN[#]*#] G3 X[#2+COS[#]*#] Y[#3+SIN[#]*#] I[#2] J[#3] o107 else G1 X[#2+COS[#]*#] Y[#3-SIN[#]*#] G2 X[#2+COS[#]*#] Y[#3-SIN[#]*#] I[#2] J[#3] o107 endif ; finish cut o104 if [ABS[#5] GT 0.0] # = [[#4-#]/2] o108 if [#] G1 X[#2+COS[#]*#] Y[#3+SIN[#]*#] G3 X[#2+COS[#]*#] Y[#3+SIN[#]*#] I[#2] J[#3] # = [[#4-#]/2*0.9] G1 X[#2+COS[#]*#] Y[#3+SIN[#]*#] o108 else G1 X[#2+COS[#]*#] Y[#3-SIN[#]*#] G2 X[#2+COS[#]*#] Y[#3-SIN[#]*#] I[#2] J[#3] # = [[#4-#]/2*0.9] G1 X[#2+COS[#]*#] Y[#3-SIN[#]*#] o108 endif o104 endif G0 Z# o endsub M2