CAM roughing: strange things when not clearing voids

(edit: stop and read this other topic first, which may or may not nullify this)

This is not a current problem for me because I don’t use this function (that might be another topic, but not this one).

I was looking at roughing inside voids with “clear voids” not selected. For simple straight-sided through-holes – no fancy geometry. I would expect a single perimeter circuit equivalent to the outermost circuit generated with “clear voids” selected. Instead I get … lots of different things.

Here is an example workspace that cuts a simple flat piece in a single layer. Different combinations of tool size, “leave stock” and stepover produce very different results. I wouldn’t have expected stepover to matter at all.

insideroughs.kmz (110.1 KB)

(edit: expand image to see tool paths)

It looks like maybe it’s trying to do something smart with acute corners that would help with clearing area when stepover > 0.5. ??. But that wouldn’t matter when stepover is < 0.5, or when not trying to clear area at all. ??. If so, that seems like something that would matter more when running with “clear voids” selected. But “clear voids” turns off all the unexpected behavior and generates an simple series of offsets – with no attempt to specially handle acute corners and large offsets.

The collision detection is failing for really small tools. I believe it’s the same class of errors that caused your interior cutout ring to be elided before the previous fix.

Collision detection? :thinking: That feels like maybe I should clarify that the overly prominent orange notes about Z lifts were purely incidental side notes. ?.

No, I got it and was referring to the crash moves. The acute corners are another case I thought was handled in the past, so I need to see if that sanity check is missing or being bypassed.


But wouldn’t acute corners be not at all a special case for a single outline circuit? Or ever for stepover under 0.5?

If it’s just a logic flip of invoking special corner handling when not clearing voids instead of when clearing voids – then that sounds like work in an interesting direction!