public static class PolylineExtension
{
public static double GetSignedDistanceTo(this Polyline pline, Point3d pt)
{
Point3d closest = pline.GetClosestPointTo(pt, false);
Vector3d deriv = pline.GetFirstDerivative(pline.GetParameterAtPoint(closest));
return deriv.GetAngleTo(closest.GetVectorTo(pt), pline.Normal) > Math.PI ?
pt.DistanceTo(closest) : -pt.DistanceTo(closest);
}
}