In need of some big flat washers (about 80mm across) as rotational mass on a flywheel, I decided to make from out of some old ~2mm lead sheet (old roof flashing). I thought it’d be cool to design a 3D printed drag knife for cutting the rings out on my DIY CNC machine.
Drag knife
Before using a drag knife, I needed to design one and print it. My design uses a standard Stanley blade.

The full design with 3D parts is here as a Fusion360 archive. Otherwise you can buy ‘proper’ and ‘Aliexpress’ ones online and there are various 3D print variations online too.
On my design you can change the knife offset (if you want) – more on that later.

The tool fits in the spindle motor of a CNC table and…er….drags the knife (a stanley box-cutter blade). Make sure the spindle is free to rotate in gcode!!!! A stanley blade flying off after being spun up to 20000rpm probably is not a great look.

G-Code
Estlcam fail
I use Estlcam (it’s cheap) to control my DIY CNC, and also to generate g-code from imported CAD files.
The first attempt with printed drag knife tool version 1, broke the 3d print. I had tried using Estlcam’s engrave function. The problem is the path Estlcam generates alternatives between clockwise and counter-clockwise on each depth change. No good for the drag knife because it has a …mmm… ‘turning circle’ since cutting point is behind (drags) the machine position.
Looking at the g-code Estlcam auto-generated I decided I could generate my own with python – jupyter notebook is here for that – it generates a continuous downward spiral spiral and terminates in a fixed-depth circuit (sounds like my work life!)
Accounting for knife offset
The knife offset is the distance between the blade cutting point and the (spindle) machine centres.
The video at the start of this post shows my MKII design which had an offset is 6.2mm (I blindly based geometry on a design I found on Printables). I then read-up on the knife offset at 6.2mm is waaaay too much – it ought to be < 1mm.


Correction for a circle is simple Pythagoras (I think this is correct!):
Anyway, the jupyter notebook includes this correction, which is next-to-negligible for a < 1mm offset.