Adaptive DropCutter step-forward
The DropCutter strategy is probably the most simple algorithm for machining. It calculates the lowest possible position of the tool at various locations above the model. The path of the tool is usually split into parallel lines of movement. Since this strategy is simply based on sampling the surface of all cutter locations, the crucial parameter here is the “step-forward” – the distance between two points of calculation on one line.
See this screenshot for an example of a sampling grid. The red dots are the points of calculation.

Basically the chosen fixed sample rate is a trade-off between accuracy and the required time for calculating the toolpath.
The adaptive sample rate for the DropCutter strategy was inspired by a [Bad Link] and implemented some days ago by [Bad Link] for the [Bad Link] library. This very idea is now also available for the users of PyCAM’s [Bad Link]. It will be published in the next release of PyCAM.
The code basically inserts points into the existing toolpath (starting with a fixed step-forward of 1/4 of the tool radius) as long as three consecutive points are not sufficiently flat. This recursion is terminated by a maximum recursion depth (currently 8), a minimum distance between adjacent points (currently 1/1000 of the tool radius) and a flatness deviance of 0.1% – this corresponds roughly to an angle of 2 degrees. This seems to generate a quite precise toolpath.
Performance-wise the adaptive DropCutter strategy takes just as much processing time as a fixed-step calculation grid (with a step-forward of 1/10 of the tool radius). Thus the precision around the interesting parts of the model is greatly increased, while performance does not suffer at all.
The screenshot at the top of this post visualizes this difference between a fixed-step DropCutter toolpath (upper line) and the new adaptive positioning. Have fun with it!


Comments
naming things + benchmarks
There are no commonly accepted names for all these parameters… Can I suggest “step-forward”, or “forward-step” for this parameter.
You mention sampling the surface of the model. This isn’t strictly correct, what you are sampling is the cutter-location surface, or inverse-tool-offset (ITO) surface.
Do you have a PyCAM benchmark (STL-file, cutter definition, step-forward, minimum step-forward, step-over) that takses say 10s or 60s to run? It would be interesting to compare run-times.
AW
naming things + benchmarks
Hi Anders,
thanks for the naming suggestion: for the future I will stick with your “step-forward” proposal. I fixed the wording in the blog post.
I also cleaned up the “model surface” and ITO confusion: thanks for pointing this out!
Regarding the benchmark: right now I usually pick a very simple STL file containing only a few triangles. It is part of the PyCAM package (samples/Testmodel.stl).
In general, I would be happy to work out a kind of basic benchmark definition in combination with one or two default models. I just started to put down some thoughts in the
[Bad Link]. Please add your thoughts, correct mine or replace the content with something completely different :)I am confident, that PyCAM will be quite slow compared to opencamlib (with a single thread/process). But nonetheless I would be curious …
Lars
Post new comment