I started working on a dogbone dressup and I have about 1000 questions.....
Before I start with that, there was a question if dogbones should even be a dressup or if they should be modelled into the part. I side with the view that dogbones are really a way to work around the limitations of a given tool. If my cnc can turn the workpiece in a way that allows a proper cutout - then I won't need a dogbone. So this feature here is meant for us poor suckers who have to live with 3 or 2.5 axis
. I am not planning on (back) modifying the part.
What I currently have is a script that runs a Path's commands and finds 2 connected straight feed commands (G1) that turn away from the part - a place to put a dogbone. In order to figure that out I look at the model and check Direction and Side ... and this is where it gets a bit fuzzy.
There is a degenerate scenario where 2 straight feed commands turning away from the part do not require a dogbone, namely when the part has a curved corner with exactly the diameter of the tool bit. A less degenerate case is a corner that has a fillet a bit smaller than the cutting tool diameter allows. One can argue that both these cases still require a dogbone, except that the depth should get adapted (and handle the case where it gets to 0).
And this is where I'm stuck: How do I find the face, wire, whatever that a given path segment is based on?
So there are 2 approaches to this problem (if you can think of another one, please let me know):
1) The dogbone dressup somehow figures out automatically what needs to be dressed and how. Either I add back pointers from a Command to the feature or there is a smart way that lets me figure that out.
2) The dogbone dressup should be independent of the actual Part, which means the user specifies on which side of the Path the dogbones should be inserted and all other required parameters
As I write this up I get the feeling that 2) should almost be easier, except that it requires a UI ... more code to read ...
For now I assume that each candidate for a dogbone does get a dogbone. I'll figure out later how to selectively enable/disable individual ones. Let me know if you have suggestions on how to do that also ...
I've attached a very simple part that I'm currently using to figure out how to make this work:
I'll stop now ... Opinions? Suggestions? Comments?