OSM skillion roof with bmesh... need an alternative to ray_cast
Finding the intersection between a plane and a line could be done using the mathutils module. There are a few nice functions in there, the most interesting one for you is mathutils.geometry.intersect_line_plane(). It basically takes four arguments, all of them Vectors, describing the setup as follows:

mathutils.geometry.intersect_line_plane(VecLineStart, VecLineEnd, VecPlaneOrigin, VecPlaneNormal)


it returns either the intersection point or None (if line and Plane are parallel).

Example:

x = mathutils.geometry.intersect_line_plane((0,0,0), (0,1,0), (0.33, 1.12, 2.44), (0,1,0))


gives you

Vector((0.0, 1.1200000047683716, 0.0))


which is the Intersection Point between the line from (0,0,0) to (0,1,0) - extended to infinity - and the plane defined by the origin at (0.33, 1.12, 2.44) with its normal pointing at (0,1,0).

More info can be found in the API docs here: https://www.blender.org/api/blender_python_api_2_78_release/mathutils.geometry.html?highlight=mathutils.geometry#mathutils.geometry.intersect_line_plane