public ICurve CurveToSpeckle(RH.Curve curve, string units = null) { var u = units ?? ModelUnits; var tolerance = RhinoDoc.ActiveDoc.ModelAbsoluteTolerance; Rhino.Geometry.Plane pln = Rhino.Geometry.Plane.Unset; curve.TryGetPlane(out pln, tolerance); if (curve is PolyCurve polyCurve) { return(PolycurveToSpeckle(polyCurve, u)); } if (curve.IsCircle(tolerance) && curve.IsClosed) { curve.TryGetCircle(out var getObj, tolerance); var cir = CircleToSpeckle(getObj, u); cir.domain = IntervalToSpeckle(curve.Domain); return(cir); } if (curve.IsArc(tolerance)) { curve.TryGetArc(out var getObj, tolerance); var arc = ArcToSpeckle(getObj, u); arc.domain = IntervalToSpeckle(curve.Domain); return(arc); } if (curve.IsEllipse(tolerance) && curve.IsClosed) { curve.TryGetEllipse(pln, out var getObj, tolerance); var ellipse = EllipseToSpeckle(getObj, u); ellipse.domain = IntervalToSpeckle(curve.Domain); } if (curve.IsLinear(tolerance) || curve.IsPolyline()) // defaults to polyline { curve.TryGetPolyline(out var getObj); if (null != getObj) { return(PolylineToSpeckle(getObj, IntervalToSpeckle(curve.Domain), u)); } } return(NurbsToSpeckle(curve.ToNurbsCurve(), u)); }