You’ve done it; although angle should be less than say 5-10 degrees (you are measuring the angle from the normals of the surface to the global Z axis). Only comment would be to use the dot product rather than measuring the angle between the vector.

Really, you’re doing the same thing, but computing the dot would be the expected way to go about this type of problem, plus you can ‘Math.Abs’ the scalar and pick up both ‘base’ and ‘top’ surfaces if they are orientated in opposing directions, whereas the angle wont offer you this luxury since ‘top’ surfaces would be < 10 degrees (assuming this is the tolerance for determining a ‘horizontal’ surface) and ‘base’ surfaces would be > 170 degrees, doubling-up your evaluation criteria, which is unnecessary.