Evaluate distance along a (curved) line

somebody recently asked for a snippet to compute the distance between two points along a curved line (a "wire body" Entity).

import XCoreModeling
import XCoreMath

Vec3 = XCoreModeling.Vec3
Body = XCoreModeling.Body


def geodesic_distance_curve(wire_body: Body, p1: Vec3, p2: Vec3):
    wires = XCoreModeling.GetWires(wire_body)
    assert len(wires) == 1
    curve = wires[0].GetGeometry(transform_to_model_space=True)
    u1 = curve.MinDistParameter(p1)
    u2 = curve.MinDistParameter(p2)
    return abs(curve.Length(u1, u2))

And here is an example how to use it:

if __name__ == "__main__":
    ent = XCoreModeling.CreateSpline([Vec3(0), Vec3(1, 1, 0), Vec3(2, 0, 0), Vec3(3, 1, 0), Vec3(4, 0, 0)])
    d = geodesic_distance_curve(ent, Vec3(1, 1, 0), Vec3(3, 1, 0))
    print(f"{d} != 2")