Freesteel Blog » 2006 » August
Oh my, it is difficult to focus on this. So many other things to think about and do, like cave surveys, writing up recent dive trips, rewriting fiction, ranting about Myron Ebell, filling out the wikipedia.
Part of the problem is I know exactly where this is going over the coming years. I am under no delusion that a swift few weeks of hacking could get these algorithms done. There’s a short-cut method that turns out to be more work in the long run, and there’s the fully sorted method that’s less coding over-all, but takes a lot more time to get any results out of.
Surface filleting (the rolling ball/toolshape) filleting is a technique I put into Depocam years ago, like around 1999. It was an idea I had, and it took one night to program the first version. When the expert resellers found a use for it, then I had to make it work properly.
The idea is to take the pencil passes, whose calculation produces a row of contact points on either side of the path, and join these contact points with the shortest curve along the surface of the cutter (usually in a perpendicular plane to the contact point paths). The result is such that if you had a ball nosed cutter and you ran this algorithm against a model composed of two intersecting planes — for example the screen and keyboard rectangles of your laptop — this would form a cylindrical blend of fixed radius. This is a common advanced CAD operation, but it is implemented in a CAM way, so the result works no matter how complicated the model is. As long as you can produce pencil passes, you can produce these pencil fillets, and you can generalize it to different tool shapes.
Well, there are some fiddly problems with the three-way junctions you get at the joins of pencil passes where you have to fit triangular patches snipped out of the surface of the cutter, and the difficulty with, say, tapered cutters where the appropriate in-surface path between one contact point and the other is non-obvious, plus the possibility of creating radical folds, and none of it is enjoyable to write solutions to.
There are two uses for these pencil fillet surfaces. The first is for high-speed machining. When you are doing semi-finishing, you don’t want there to be any sharp corners in the toolpaths, which usually occurs when it dips into a hole or a groove. The usual way is to smooth out the toolpath geometrically once it is created. This can be hard, as well as cause unexpected deep cuts into the stock material when the smoothing of two adjacent paths turn out differently.
Alternatively, you can generate the fillet surfaces for a tool 2mm larger than your present cutter, and add them to the original model before you calculate the toolpaths. Then these grooves and holes are smoothed over, and the tool never follows a path of less than 2mm in radius.
A visualization: Imagine riding your bike along the pavement, bumping up and down all the kerbs. To convert this into a smooth ride you need to wedge in piece of tarmac and mold it smoothly so it forms a curved surface of radius greater than your bike wheel, otherwise you will keep hitting the kerb rather than riding up on it. This proves that smaller wheels are better if you are riding across rough terrain, unless that terrain has actual corners, in which only zero radius wheels will suffice. Sharp ridges pointing upwards don’t count, because your wheel pivots over the top of it. If you were to roll a series of 2m diameter balls that were heavy enough to make an impression across wet concrete, the result would be perfectly smooth to ride on, if you were a machine tool.
The other purpose of the pencil fillets is as a basis for the dreaded theoretical rest machining algorithm. The pencil fillets are formed for the larger tool against the model, and the rest areas are where the smaller tool touches this pencil fillet before it touches the model.
I’m not looking forward to working on that whole feature again. Algorithm gets piled on top of algorithm, and there is so much room for deficiency.
The new implementation of this fillet surface I have here is as a stock model over the pencil passes, trimmed by the 2D boundary derived from the contact points. The Depocam algorithm originally began in the obvious way, forming narrow prismatic surfaces between the curves joining opposite contact points, but eventually had to become like a stock model with a strange parametrization, on account of the sometimes nasty folds you can get when the contact point leaps from one place to another.
Here the stock model is rectangular and subdividing, as it should be. I have just implemented all the nasty 3D polygonal cusp-joining triangulation effects that are the basis of the Depocam stockmodel, which makes it look so good. Not that anyone except me ever paid it much attention. This version is potentially better because it allows for the subdivision of cells (you can see the effects of this in purple). I have arbitrarily knocked out 4/5ths of the points in the pencil passes to generate a fillet surface that’s all lumpy to test it all out.
Next job, if I don’t get distracted, is to make it work on toolshapes other than ball-nose. The cutter location function I’m using is insufficient at the moment because it’s not very good at positioning the contact points. So much to do. So much to do. I don’t know if I can bear to start.
Last week I ran into the side of a car on my bike when I couldn’t brake in time when it suddenly pulled out of a parking lot. I was lucky to fall well, and got away with a bent back wheel and a skinned palm.
Before I got any sympathy, a friend of mine hit a car and somersaulted over the roof and skinned his shin enough to require stitches. He claims not to remember much of the day from after he had breakfast.
Before he gets any sympathy, there’s a lot of people being bombed using military equipment illegally shipped through the United Kingdom to replenish the stocks, and we’re doing nothing effective about it. If the arms export laws meant anything, we would be shipping anti-aircraft weapons to Lebanon so they could defend their people from the incoming bombers. That’s normally the type of weaponry put in mind by the word “defence”. Claiming that other things, like nuclear weapons, fall within that category is a lie.
What I am wasting a great deal of time on is attempting to get hold of UN Official documents so we get an authoritative itemized record of why the United Nations is not effective at “saving succeeding generations from the scourge of war”. In spite of all the rhetoric, someone at the heart of that organization loves war, and the best way to get something that you want, but no one else wants you to have, is to say publically that you don’t really want it, and then steal it anyway.
I’m coding up some fillet surfaces for machining when I get bored.