I agree on the OpenScad. I use that for almost everything. But when I have something super hard to do... Or something that needs to modify an existing .STL file.... I use Blender. Blender can do anything. But the learning curve is very steep and very long.