Its the intersection points of the finite lines within tolerance, which is the expected behaviour (I would say).

That’s actually a fair point but it’s not what the API says as far as I can tell, which is why I posted here.

*I actually already implemented something similar to your suggestion to solve my specific problem.* EDIT - my method was a lot less elegant than the one you just posted. So thanks!

The API says the following, which suggests the output points a and b should give the “shortest distance between the lines” which would then not be the projected intersection point, but the shortest link.

#### Parameters

lineA

Type: Rhino.Geometry.Line

First line for intersection.

lineB

Type: Rhino.Geometry.Line

Second line for intersection.

a

Type: System.Double

Parameter on lineA that is closest to LineB. The shortest distance between the lines is the chord from lineA.PointAt(a) to lineB.PointAt(b)

b

Type: System.Double

Parameter on lineB that is closest to LineA. The shortest distance between the lines is the chord from lineA.PointAt(a) to lineB.PointAt(b)

tolerance

Type: System.Double

If tolerance > 0.0, then an intersection is reported only if the distance between the points is <= tolerance. If tolerance <= 0.0, then the closest point between the lines is reported.

finiteSegments

Type: System.Boolean

If true, the input lines are treated as finite segments. If false, the input lines are treated as infinite lines.