82 lines
2.5 KiB
Plaintext
Executable File
82 lines
2.5 KiB
Plaintext
Executable File
; Circle perimeter cut - cuts inside or outside a circular profile
|
|
; Params: #1=x, #2=y, #3=diameter, #4=ztop, #5=zbot, #6=fincut, #7=mode
|
|
; Mode bitmask: bit0=conventional, bit1=bothways, bit2=plunge(vs helix), bit3=outside
|
|
; Uses arc lead-in/lead-out for smooth entry and exit
|
|
o<frame_circ> sub
|
|
; o<frame_circ> call [x][y] [diameter] [ztop][zbot] [fincut] [mode]
|
|
|
|
#<M_CONVENTIONAL> = [FIX[#7/1] MOD 2 EQ 1]
|
|
#<M_BOTHWAYS> = [FIX[#7/2] MOD 2 EQ 1]
|
|
#<M_PLUNGE> = [FIX[#7/4] MOD 2 EQ 1]
|
|
#<M_OUTSIDE> = [FIX[#7/8] MOD 2 EQ 1]
|
|
#<M_CLIMB> = [FIX[#7/1] MOD 2 EQ 0]
|
|
#<M_ONEWAY> = [FIX[#7/2] MOD 2 EQ 0]
|
|
#<M_HELIX> = [FIX[#7/4] MOD 2 EQ 0]
|
|
#<M_INSIDE> = [FIX[#7/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
|
|
|
|
#<td> = #<_td>
|
|
#<tr> = [#<td>/2]
|
|
o1 if [EXISTS[#<_z_clearance>]]
|
|
#<z_clearance> = #<_z_clearance>
|
|
o1 else
|
|
#<z_clearance> = #4
|
|
o1 endif
|
|
|
|
|
|
#<r_entry> = #<tr> ; lead-in arc radius, capped at 15% of diameter
|
|
o10 if [#<r_entry> GT #3*0.15]
|
|
#<r_entry> = [#3*0.15]
|
|
o10 endif
|
|
|
|
G0 Z#<z_clearance>
|
|
|
|
o20 if [#<M_INSIDE> AND #<M_CONVENTIONAL>]
|
|
; conventional, inner
|
|
G0 X[#1-#<r_entry>] Y[#2 + #3/2 - #<tr> - #<r_entry>]
|
|
G0 Z#4
|
|
G1 Z#5
|
|
G2 X#1 Y[#2 + #3/2 - #<tr>] I#1 J[#2 + #3/2 - #<tr> - #<r_entry>]
|
|
G2 X#1 Y[#2 + #3/2 - #<tr>] I#1 J#2
|
|
G2 X[#1+#<r_entry>] Y[#2 + #3/2 - #<tr> - #<r_entry>] I#1 J[#2 + #3/2 - #<tr> - #<r_entry>]
|
|
|
|
|
|
o20 elseif [#<M_INSIDE> AND #<M_CLIMB>]
|
|
; climb, inner
|
|
G0 X[#1+#<r_entry>] Y[#2 + #3/2 - #<tr> - #<r_entry>]
|
|
G0 Z#4
|
|
G1 Z#5
|
|
G3 X#1 Y[#2 + #3/2 - #<tr>] I#1 J[#2 + #3/2 - #<tr> - #<r_entry>]
|
|
G3 X#1 Y[#2 + #3/2 - #<tr>] I#1 J#2
|
|
G3 X[#1-#<r_entry>] Y[#2 + #3/2 - #<tr> - #<r_entry>] I#1 J[#2 + #3/2 - #<tr> - #<r_entry>]
|
|
|
|
o20 elseif [#<M_OUTSIDE> AND #<M_CONVENTIONAL>]
|
|
; conventional, outer
|
|
G0 X[#1+#<r_entry>] Y[#2 + #3/2 + #<tr> + #<r_entry>]
|
|
G0 Z#4
|
|
G1 Z#5
|
|
G2 X#1 Y[#2 + #3/2 + #<tr>] I#1 J[#2 + #3/2 + #<tr> + #<r_entry>]
|
|
G3 X#1 Y[#2 + #3/2 + #<tr>] I#1 J#2
|
|
G2 X[#1-#<r_entry>] Y[#2 + #3/2 + #<tr>+ #<r_entry>] I#1 J[#2 + #3/2 + #<tr> + #<r_entry>]
|
|
|
|
o20 elseif [#<M_OUTSIDE> AND #<M_CLIMB>]
|
|
; climb, outer
|
|
G0 X[#1-#<r_entry>] Y[#2 + #3/2 + #<tr> + #<r_entry>]
|
|
G0 Z#4
|
|
G1 Z#5
|
|
G3 X#1 Y[#2 + #3/2 + #<tr>] I#1 J[#2 + #3/2 + #<tr> + #<r_entry>]
|
|
G2 X#1 Y[#2 + #3/2 + #<tr>] I#1 J#2
|
|
G3 X[#1+#<r_entry>] Y[#2 + #3/2 + #<tr>+ #<r_entry>] I#1 J[#2 + #3/2 + #<tr> + #<r_entry>]
|
|
o20 endif
|
|
|
|
G0 Z#<z_clearance>
|
|
|
|
|
|
o<frame_circ> endsub
|
|
|
|
M2 |