Also check out CADQuery and or build123d (python equivalents)
+1 for CADQuery - it lets you easily specify surfaces as the basis for manipulation, and results in much less fragile designs than OpenSCAD.
+1 for CADQuery - it lets you easily specify surfaces as the basis for manipulation, and results in much less fragile designs than OpenSCAD.