OpenSCAD is very nice but if you combine it with BOSL2 you can do miracles:
https://github.com/BelfrySCAD/BOSL2