Standard comment in these threads that, while OpenSCAD is a ton of fun and absolutely a breath of fresh air for code geeks wanting to apply their skills to the 3D world without having to hand-draft an object in scary GUI software...<p>It's actually really limited, based on a needlessly simplified data model and using a kludged up DSL syntax instead of a proper software development environment.<p>Look at CadQuery and build123d, both of which are python packages build on top of OpenCASCADE[1]. They have wildly different syntax[2], but very similar capabilities. You can do the same CSG work in them that you do in OpenSCAD with similar complexity, but have access to a far more expressive underlying toolkit and a real programming language with which to manage your own parametrization needs.<p>[1] A CAD-focused boundary representation toolkit, which you can actually use directly if you want but which is aimed more at "build a CAD tool" use cases than "design a speaker cabinet".<p>[2] Truthfully I don't love either, but CadQuery is at least explicit in most cases about what is happening where build123d relies on some dynamic scoping tricks that irk me. Seems like most of the community disagrees with me though.