I was working on some Lego Mindstorm with my son over the holidays and there was one beam/part that we just didn't have - and it would seem that it is non-standard and you can't buy a similar part anywhere. I suppose we could have re-deigned our whole robot around the parts that we did have, but...
In the true maker spirit, I just down loaded Open S CAD, searched for a Lego Technic compatible design (thanks Brian Jepson!), hacked it around until it looked like what I needed and made my first 3D model :)
I needed to explain how I did this to my son, which meant I needed a better idea of how it works myself! So I have spent the past couple of days learning (enough) about Open S CAD. In the process I have made many enhancements to the code I found online. It can now handle many more use cases and is generally a lot neater (IMHO).
My main concern with the original code was that it was full of "magic numbers" scattered through-out the code. I have now named every aspect of the geometry to a variable, and all variables are declared in the one place at the top of the main library.
Also in my research I found that when subtracting one solid from another, the 2 solids should not share a common surface. That is, you should never draw a cube 10 units high and then subtract a cylinder 10 units high. If you do, it results in an infinitely thin surface which is both defined as "there" and "not there". This can seriously mess with the generation of the printer file.
The correct solution is to always subtract something that either fully penetrates through the original surface, or stops short of the original surface. This has also now been fixed for all parts of the models.
It has been an interesting couple of days learning a bit about solid modelling - something I have never had need to try before.
Hopefully this work may be of use / interest to other makes. Enjoy.