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