コード例 #1
0
        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));
        }