CurveDivideByLength Method (Double, Boolean, Boolean, Point3d) |
Namespace: Rhino.Geometry
public double[] DivideByLength( double segmentLength, bool includeEnds, bool reverse, out Point3d[] points )
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; } }
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()