for your consideration. this approach uses the traces operation exclusively (and disables your other ops). I propose this because it is easier and less risky to extend the traces op with things like “leave stock” or “expand” or “z thru” than messing with the already too-complex roughing and outline operations. try preview on this and slide through the layers in order. then animate if you wish.
At first look, the idea of trace as the one op to rule them all doesn’t give me warm fuzzies.
Re correctness: the red arrow (below) shows a corner that can’t be cut without breaking a boundary of that face.
Re efficiency: clearing the face around the holes, then going back to cut the resulting pegs down to the surrounding face before beginning to make holes slows down what a current roughing op would do faster. Even more so considering the larger area that isn’t getting roughed out at the point shown. It’s the same material to clear either way, but a bunch of fragmented paths around inside and outside boundaries that don’t matter yet + add’l moves and lifts will go slower than fewer larger “nests” of simpler paths.
That specific example could be improved by a trace/clear within the boundary of that face then trace/clear inside the holes starting at the level of the cleared face. If given ability to do something like that: instead of trace/clearing that face, I’d trace the entire part (ideally expanded by a 1+stepover tool diameters) and the pegs on the other side (barely visible in the pic above) to clear all but the pegs (the real ones) down to the level of that face, then continue with the holes as shown + the other half of the part down to the next face, then from that level start clearing the gap between the sides of the part. In other words, I’d manually put together a rouging op – and probably wish that could be automated.
(the part is in Stewart’s “traces.km” above and the linked thread)
Ability to cut the part with a horizontal plane at the level of a selected feature and trace edges on that cut to define trace ops bounded by that plane and the Z level of another feature might help expand the generality of trace ops.
Trace ops as bounding containers for other ops (any of rough/outline/contour/5axisHEM) could be useful: “X contour here”, “outline this”.