Curve.DivideByLength Method (Double, Boolean, Boolean)

CurveDivideByLength Method (Double, Boolean, Boolean)

Divide the curve into specific length segments.

Namespace:  Rhino.Geometry
Assembly:  RhinoCommon (in RhinoCommon.dll)
Syntax
public double[] DivideByLength(
	double segmentLength,
	bool includeEnds,
	bool reverse
)
Public Function DivideByLength ( 
	segmentLength As Double,
	includeEnds As Boolean,
	reverse As Boolean
) As Double()

Parameters

segmentLength
Type: SystemDouble
The length of each and every segment (except potentially the last one).
includeEnds
Type: SystemBoolean
If true, then the point at the start of the first division segment is returned.
reverse
Type: SystemBoolean
If true, then the divisions start from the end of the curve.

Return Value

Type: Double
Array containing division curve parameters if successful, null on failure.
Examples
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
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()
Version Information

Rhino for Windows

Supported in: 6.8
See Also