STL only supports faces (as opposed to solids), so I'd be surprised if converting to BoundaryMeshRegion
and triangulating fixed things.
Printout3D
does some repair with the option Method -> "PerformModelRepair"
(I believe this is the default setting). In your case, your model comes back repaired:
FindMeshDefects[RepairMesh[DiscretizeGraphics[ms]], All, "Cell"]
<|"FlippedFaces" -> {}, "HoleEdges" -> {}, "TinyFaces" -> {}, "SingularVertices" -> {},
"DanglingEdges" -> {}, "SingularEdges" -> {}, "TinyComponents" -> {},
"TJunctionEdges" -> {}, "IsolatedVertices" -> {}, "OverlappingFaces" -> {}|>
As for the external software, it's hard to know what's going wrong, but it sounds like something is preventing it from inferring a solid. Which software are you using?
Perhaps a different technique would give a better result.
The highest fidelity method is probably subtracting away the cylinders and paraboliod from the cuboid. We can do this with mesh based boolean operations in 11.2+:
δ = .5;
fill = BoundaryDiscretizeGraphics[Cuboid[{-15, -15, 0}, {15, 15, 8}]];
cyls = Table[With[{cx = c Cos[a], cy = c Sin[a]}, Cylinder[{{cx, cy, -1}, {cx, cy, 9}}, 3]], {a, 0, 5 Pi/3, Pi/3}]
dc = RegionUnion @@ (BoundaryDiscretizeRegion[#, MaxCellMeasure -> .1δ] & /@ cyls);
parab = ImplicitRegion[z > base + (x^2 + y^2)/(4 f), {{x, -l, l}, {y, -l, l}, {z, 0, 8}}];
db = BoundaryDiscretizeRegion[parab, MaxCellMeasure -> δ];
model = RegionDifference[RegionDifference[fill, dc], db]

Note the weird artifacts in the paraboloid. I think this is just an issue with rendering multi-cell polygons, as Normal[Show[mesh]]
renders just fine.
This model is also has no defects:
Values @ FindMeshDefects[RepairMesh[model], All, "Cell"]
{{}, {}, {}, {}, {}, {}, {}, {}, {}, {}}
Give this one a try and see if it works.
ms
into aBoundaryMesh
and useTriangulateMesh
. $\endgroup$