RhinoCommon API
CurveIsShort Method (Double) |
Used to quickly find short curves.
Namespace: Rhino.Geometry
Assembly: RhinoCommon (in RhinoCommon.dll)

public bool IsShort( double tolerance )
Public Function IsShort ( tolerance As Double ) As Boolean
Parameters
- tolerance
- Type: SystemDouble
Length threshold value for "shortness".
Return Value
Type: Booleantrue if the length of the curve is <= tolerance.

Faster than calling Length() and testing the result.

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()

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