Distance on a Curve from a Point
Windows only
Problem
How do you create a point that is a given distance from another point, where the distance is to be measured along the curve?
Solution
The problem can be easily solved by using RhinoScript’s CurveArcLengthPoint
function. The CurveArcLengthPoint
function returns the point on the curve that is a specified arc length from the start of the curve. By first determining the distance of the known point from the start of the curve, you can then determine how far to offset another point.
For example:
Option Explicit Sub OffsetPointOnCurve ' Select the curve Dim crv : crv = Rhino.GetObject("Select curve", 4) If IsNull(crv) Then Exit Sub ' Select a point on the curve to offset from Dim pt : pt = Rhino.GetPointOnCurve(crv, "Select point on curve") If IsNull( pt) Then Exit Sub ' Specify the offset distance Dim dist : dist = Rhino.GetReal("Distance to offset point") If IsNull(dist) Then Exit Sub ' Get the closest point on the curve from the test point Dim t : t = Rhino.CurveClosestPoint(crv, pt) ' Get the curve's domain Dim d : dom = Rhino.CurveDomain(crv) ' Get the total length of the curve Dim l : l = Rhino.CurveLength(crv) ' Determine the length from the start of the curve to the test point Dim ls : ls = Rhino.CurveLength(crv,,Array(Dom(0),t)) ' Offset a point in each direction Rhino.AddPoint Rhino.CurveArcLengthPoint(crv, ls + dist, True) Rhino.AddPoint Rhino.CurveArcLengthPoint(crv, l - ls + dist, False) ' Add the test point for reference Rhino.AddPoint pt End Sub