I use Autodesk's Fusion 360. There is a post for Dialog 4, but it is piss-poor, and took quite a bit of modification to make is useable. It is still not very good, because it is easy to choke the control with too many small moves. For example, adaptive clearing is practically useless. There is a "smoothing" setting that turns a collection of small G01 straight moves into single G02/G03 arc moves, but it is not very smart and mostly only seems to work on the finish pass around a contour.
I get the most success by using Fusion to extract the G-code for a contour with smoothing turned on and using compensation in the control (as opposed to the computer running the CAM). Then, I edit the code and copy the code running from G41 through G40 into a separate subroutine. I set up the main routine mostly manually to call the subroutine with whatever tool I want with whatever stock-to-leave or wear offset I want.
Even then, the subroutine requires tweaking. For example, Fusion makes the lead-in and lead-out arc moves part of the contour, rather than using the G45/G46/G47 and A addresses. I end up deleting the arc moves and adding G45, G46, or G47 and an A value manually. The G41 block from the CAM also has no G01/G00 commanding the A approach. If the contour does not have to be super-precise, I manually use G64 and G61 at the end of the block, which helps keep the cutter moving at the expense of some accuracy. If I use G60 and G61, the control can choke and pause cutter movement, which marks the part, may lead to chatter, rubbing the cutter, and work-hardening the part. Occasionally Fusion CAM will generate a small straight move that is too small and Dialog throws an error. I think there might be a Fusion setting to fix that problem, but I have not found it.
Here is a part which direct CAM would have made a huge G-code file. These are cycloidal gear teeth profiled with a 1/8" endmill.
Instead, I made the code very compact by pulling out the code for a single tooth space and then repeating it while rotating the machine's coordinate system 2° with each repetition using G55. The code for one tooth space is the code after %23*10 at the bottom. The code makes a rough and finish pass through each tooth space. Pretty sweet if I do say so myself.
&%23
T1 R1.587 A0.05 L0 A0
T1*1 R1.587 A0 L0 A0
%
(&%23/000000)
N4 M9
N8 G0 Z100
N12 G17 T1
N16 S+5000
N24 G0 X-80 Y200
N28 G0 Z6
N36 Z5 F76
N40 Z-0.1 F76 M70
N44 F160 M70
N48 %*10
N60 G0 Z6
N70 T1*1
N80 S+5000
N90 G0 X-80 Y200
N100 Z5 F76
N368 Z-0.1 F76 M70
N372 F160 M70
N396 %*10
N410 G0 Z6
N420 G55 W-2 I0 J0
N430 L22 N24 N420
N440 G53
N732 G0 Z100
N736 T0
N740 M30
%23*10
N92 G41 G45 A3.2 X-80.333 Y189.242 G1 G64 M61
N100 G2 X-77.67 Y186.582 I-10.835 J-13.51
N104 G2 X-77.181 Y185.932 I-9.542 J-7.677
N108 G2 X-76.728 Y185.156 I-4.493 J-3.145
N112 G3 X-74.452 Y184.274 I1.607 J0.769
N116 G3 X-73.426 Y186.49 I-0.665 J1.653
N120 G2 X-73.639 Y187.363 I5.203 J1.732
N124 G2 X-73.74 Y188.17 I12.095 J1.919
N128 G2 X-73.672 Y191.933 I17.247 J1.571
N140 G40 G45 A 3.2
?
0000