I've been looking into adding milling capabilities to my Prusa i3 3D printer, but I didn't come across any free tools for creating 3D tool paths. The solution I've come up with is a bit of a hack but I think it should work. Step one is to pull the shape you want to mill into a 3D program like Blender and use a Boolean function to extrapolate a negative image of it. Then export that model into your favorite GCode generator like Cura or the like, flip it upside down, disable any rafts, brims, and supports, then export the GCode. This is where my program comes in. When the program is launched it will ask for a file name; make sure the file is in the same folder as the program for ease of use and do NOT include ".gcode" in the name, that will happen automatically. The program will then modify the GCode inverting all the Z-Moves and adding code to lift the tool whenever it moves to a new position to avoid hitting an uncut section. The new file will be exported as "yourFile_CNFR33D.gcode".