If you're CAM software doesn't output the exact cutter paths you're looking for. You can use visual basic programs embedded in Excel to write exactly the code you want direct to file.
The following is just an example of what you can do but if you know your way round visual basic, you could use this as a guide to help you write something for yourself.
It outputs a file called "chngrv" in C:\CNC. You will have to copy this code to a module in your visual basic editor.
The excel workbook will have to be saved at c:\cnc
THis can be developed further using forms, making it easier to use, having initial parameters already populated.
Hope someone finds this of use.
Sub maincall()
'AA = InputBox("NEAREST DATUM (A)")
'BB = InputBox("CHAINGROOVE WIDTH(B)")
'CC = InputBox("BUTTON TOOL DIA (E)")
'DD = InputBox("ARC ON RADIUS(C)")
'EE = InputBox("SPKT OUTSIDE DIA(D1)")
'FF = InputBox("CHAIN GROOVE ROOT DIA (D2)")
'GG = InputBox("PECK RETRACT SIZE (MM)(F)")
'HH = InputBox("PECK INTERVALS (MM)(G)")
'II = InputBox("MAX DEPTH OF CUT (MM)")
'JJ = InputBox("PROFILE STOCK ALLOWANCE (MM)")
' DUMMY DATA
AA = 94
BB = 38
CC = 20
DD = 5
EE = 448
FF = 285
gg = 0.5
HH = 1
II = 2
JJ = 0.5
EE = EE * 1
DD = DD * 1
BB = BB * 1
CC = CC * 1
ChDir "C:\CNC"
Open "CHNGRV" For Output As #1
' CALC START POINT
Z1 = AA + JJ + CC
X1 = EE + DD + DD
Pi = 3.14159265
RADCON = 0.0174533
DEGCON = 57.29575496
LineCount = 10 + LineCount
Print #1, "N" & LineCount & " G00 G90 X" & Format(X1, "0.###") & " Z-" & Format(Z1, "0.###")
' CALC RAMP ANGLE RA
S = II / 2
T = BB - CC - (2 * JJ) - (2 * DD)
RA = Atn(S / T)
' CALC TOTAL 1st ARC LENGTH
CIRC = Pi * 2 * DD
ARCANG1 = ((Pi / 2) - RA)
RATIO1 = ARCANG1 / (2 * Pi)
ARCLENGTH1 = RATIO1 * CIRC
DIVS1 = Int(ARCLENGTH1 / HH)
SEGS1 = ARCANG1 / DIVS1
SSS = 0.00000001
For Q = 1 To DIVS1
MMM = DD * Sin(SSS)
nnn = DD * Cos(SSS)
I1 = MMM
K1 = nnn
SSS = SSS + SEGS1
MM = DD * Sin(SSS)
NN = DD * Cos(SSS)
PP = DD - NN
X2 = X1 - (2 * MM)
Z2 = Z1 + PP
LineCount = 10 + LineCount
Print #1, "N" & LineCount & " G02 X" & Format(X2, "0.###") & " Z-" & Format(Z2, "0.###") & " I" & Format(I1, "0.###") & " K-" & Format(K1, "0.###")
XXX = X2
ZZZ = Z2
Next Q
' calc straight length v
ST = Sqr(T ^ 2 + S ^ 2)
divs2 = Int(ST / HH)
divlen = ST / divs2
MM = divlen * Sin(RA)
NN = divlen * Cos(RA)
For R = 1 To divs2
X3 = XXX - (MM * 2)
Z3 = ZZZ + NN
LineCount = 10 + LineCount
Print #1, "N" & LineCount & " G01 X" & Format(X3, "0.###") & " Z-" & Format(Z3, "0.###")
' chip break CALC
zc = Z3 + (gg * Sin(RA))
xc = X3 + (2 * (gg * Cos(RA)))
LineCount = 10 + LineCount
Print #1, "N" & LineCount & " G01 X" & Format(xc, "0.###") & " Z-" & Format(zc, "0.###")
LineCount = 10 + LineCount
Print #1, "N" & LineCount & " G01 X" & Format(X3, "0.###") & " Z-" & Format(Z3, "0.###")
XXX = X3
ZZZ = Z3
Next R
' CALC TOTAL 2ND ARC LENGTH
CIRC = Pi * 2 * DD
ARCANG3 = ((Pi / 2) + RA)
RATIO3 = ARCANG3 / (2 * Pi)
ARCLENGTH3 = RATIO3 * CIRC
DIVS3 = Int(ARCLENGTH3 / HH)
SEGS3 = ARCANG3 / DIVS3
' CALC INITIAL I AND J
JE = DD * Sin(RA)
PE = DD * Cos(RA)
' CALC INITIAL END POINTS
th = SEGS3 - RA
FE = DD * Sin(th)
CE = DD * Cos(th)
z4 = ZZZ + JE + FE
x4 = XXX + (2 * PE) - (2 * CE)
I4 = PE
K4 = -1 * (JE)
' CHIP BREAK CALC
zc = z4 - (gg * Sin(th))
xc = x4 + (2 * (gg * Cos(th)))
SSS = th + SEGS3
ZE = ZZZ + JE
XE = XXX + (2 * PE)
For QQ = 1 To DIVS3
LineCount = 10 + LineCount
Print #1, "N" & LineCount & " G02 X" & Format(x4, "0.###") & " Z-" & Format(z4, "0.###") & " I" & Format(I4, "0.###") & " K" & Format(K4, "0.###")
' chip break
LineCount = 10 + LineCount
Print #1, "N" & LineCount & " G01 X" & Format(xc, "0.###") & " Z-" & Format(zc, "0.###")
LineCount = 10 + LineCount
Print #1, "N" & LineCount & " G01 X" & Format(x4, "0.###") & " Z-" & Format(z4, "0.###")
LE = DD * Sin(SSS)
TE = DD * Cos(SSS)
K4 = z4 - ZE
I4 = (XE - x4) / 2
x4 = XE - (2 * TE)
z4 = ZE + LE
' CHIP BREAK CALC
zc = z4 - (gg * Sin(SSS))
xc = x4 + (2 * (gg * Cos(SSS)))
SSS = SSS + SEGS3
Next QQ
' THIRD ARC
NE = DD * Sin(ARCANG1)
SE = DD * Cos(ARCANG1)
Z5 = ZE + SE
X5 = XE - (2 * NE)
I5 = 0
K5 = DD
LineCount = 10 + LineCount
Print #1, "N" & LineCount & " G03 X" & Format(X5, "0.###") & " Z-" & Format(Z5, "0.###") & " I" & Format(I5, "0.###") & " K" & Format(K5, "0.###")
' SECOND RAMP
For R = 1 To divs2
X6 = X5 - (MM * 2)
Z6 = Z5 - NN
LineCount = 10 + LineCount
Print #1, "N" & LineCount & " G01 X" & Format(X6, "0.###") & " Z-" & Format(Z6, "0.###")
' chip break CALC
zc = Z6 - (gg * Sin(RA))
xc = X6 + (2 * (gg * Cos(RA)))
LineCount = 10 + LineCount
Print #1, "N" & LineCount & " G01 X" & Format(xc, "0.###") & " Z-" & Format(zc, "0.###")
LineCount = 10 + LineCount
Print #1, "N" & LineCount & " G01 X" & Format(X6, "0.###") & " Z-" & Format(Z6, "0.###")
X5 = X6
Z5 = Z6
Next R
' CALC TOTAL 4TH ARC LENGTH
CIRC = Pi * 2 * DD
ARCANG3 = ((Pi / 2) + RA)
RATIO3 = ARCANG3 / (2 * Pi)
ARCLENGTH3 = RATIO3 * CIRC
DIVS3 = Int(ARCLENGTH3 / HH)
SEGS3 = ARCANG3 / DIVS3
' CALC INITIAL I AND J
JE = DD * Sin(RA)
PE = DD * Cos(RA)
' CALC INITIAL END POINTS
th = SEGS3 - RA
FE = DD * Sin(th)
CE = DD * Cos(th)
z4 = Z5 - JE - FE
x4 = X5 + (2 * PE) - (2 * CE)
I4 = PE
K4 = JE
SSS = th + SEGS3
ZE = Z5 - JE
XE = XXX + (2 * PE) - II
For QQ = 1 To DIVS3
LineCount = 10 + LineCount
Print #1, "N" & LineCount & " G03 X" & Format(x4, "0.###") & " Z-" & Format(z4, "0.###") & " I" & Format(I4, "0.###") & " K" & Format(K4, "0.###")
LE = DD * Sin(SSS)
TE = DD * Cos(SSS)
K4 = z4 - ZE
I4 = (XE - x4) / 2
x4 = XE - (2 * TE)
z4 = ZE - LE
SSS = SSS + SEGS3
Next QQ
Close #1
Stop
End Sub