RhinoCommon API
CurveDivideByLength Method (Double, Boolean) |
Divide the curve into specific length segments.
Namespace: Rhino.Geometry
Assembly: RhinoCommon (in RhinoCommon.dll)

public double[] DivideByLength( double segmentLength, bool includeStart )
Public Function DivideByLength ( segmentLength As Double, includeStart As Boolean ) As Double()
Parameters
- segmentLength
- Type: SystemDouble
The length of each and every segment (except potentially the last one). - includeStart
- Type: SystemBoolean
[Missing <param name="includeStart"/> documentation for "M:Rhino.Geometry.Curve.DivideByLength(System.Double,System.Boolean)"]
Return Value
Type: DoubleArray containing division curve parameters if successful, null on failure.

using Rhino.DocObjects; partial class Examples { public static Rhino.Commands.Result DivideByLengthPoints(Rhino.RhinoDoc doc) { const ObjectType filter = Rhino.DocObjects.ObjectType.Curve; Rhino.DocObjects.ObjRef objref; Rhino.Commands.Result rc = Rhino.Input.RhinoGet.GetOneObject("Select curve to divide", false, filter, out objref); if (rc != Rhino.Commands.Result.Success || objref == null) return rc; Rhino.Geometry.Curve crv = objref.Curve(); if (crv == null || crv.IsShort(Rhino.RhinoMath.ZeroTolerance)) return Rhino.Commands.Result.Failure; double crv_length = crv.GetLength(); string s = string.Format("Curve length is {0:f3}. Segment length", crv_length); double seg_length = crv_length / 2.0; rc = Rhino.Input.RhinoGet.GetNumber(s, false, ref seg_length, 0, crv_length); if (rc != Rhino.Commands.Result.Success) return rc; Rhino.Geometry.Point3d[] points; crv.DivideByLength(seg_length, true, out points); if (points == null) return Rhino.Commands.Result.Failure; foreach (Rhino.Geometry.Point3d point in points) doc.Objects.AddPoint(point); doc.Views.Redraw(); return Rhino.Commands.Result.Success; } }
Imports Rhino.DocObjects Partial Class Examples Public Shared Function DivideByLengthPoints(ByVal doc As Rhino.RhinoDoc) As Rhino.Commands.Result Const filter As ObjectType = Rhino.DocObjects.ObjectType.Curve Dim objref As Rhino.DocObjects.ObjRef = Nothing Dim rc As Rhino.Commands.Result = Rhino.Input.RhinoGet.GetOneObject("Select curve to divide", False, filter, objref) If rc <> Rhino.Commands.Result.Success OrElse objref Is Nothing Then Return rc End If Dim crv As Rhino.Geometry.Curve = objref.Curve() If crv Is Nothing OrElse crv.IsShort(Rhino.RhinoMath.ZeroTolerance) Then Return Rhino.Commands.Result.Failure End If Dim crv_length As Double = crv.GetLength() Dim s As String = String.Format("Curve length is {0:f3}. Segment length", crv_length) Dim seg_length As Double = crv_length / 2.0 rc = Rhino.Input.RhinoGet.GetNumber(s, False, seg_length, 0, crv_length) If rc <> Rhino.Commands.Result.Success Then Return rc End If Dim points As Rhino.Geometry.Point3d() = Nothing crv.DivideByLength(seg_length, True, points) If points Is Nothing Then Return Rhino.Commands.Result.Failure End If For Each point As Rhino.Geometry.Point3d In points doc.Objects.AddPoint(point) Next doc.Views.Redraw() Return Rhino.Commands.Result.Success End Function End Class
Python
import Rhino import scriptcontext def DivideByLengthPoints(): filter = Rhino.DocObjects.ObjectType.Curve rc, objref = Rhino.Input.RhinoGet.GetOneObject("Select curve to divide", False, filter) if not objref or rc!=Rhino.Commands.Result.Success: return rc crv = objref.Curve() if not crv or crv.IsShort(Rhino.RhinoMath.ZeroTolerance): return Rhino.Commands.Result.Failure crv_length = crv.GetLength() s = "Curve length is {0:.3f}. Segment length".format(crv_length) seg_length = crv_length / 2.0 rc, length = Rhino.Input.RhinoGet.GetNumber(s, False, seg_length, 0, crv_length) if rc!=Rhino.Commands.Result.Success: return rc t_vals = crv.DivideByLength(length, True) if not t_vals: return Rhino.Commands.Result.Failure [scriptcontext.doc.Objects.AddPoint(crv.PointAt(t)) for t in t_vals] scriptcontext.doc.Views.Redraw() return Rhino.Commands.Result.Success if __name__=="__main__": DivideByLengthPoints()

Rhino for Mac
Supported in: 5.4Rhino for Windows
Supported in: 6.14