/// <summary> /// Get Grevit Curve Component /// </summary> /// <param name="curve"></param> /// <param name="referenceID"></param> /// <returns></returns> public static Component ToGrevitCurve(this Rhino.Geometry.Curve curve, string referenceID = "") { if (curve.IsArc(Rhino.RhinoMath.ZeroTolerance)) { Rhino.Geometry.Arc a; if (curve.TryGetArc(out a)) { Curve3Points arc = new Curve3Points(); arc.a = curve.PointAtStart.ToGrevitPoint(); arc.b = curve.PointAt(0.5).ToGrevitPoint(); arc.c = curve.PointAtEnd.ToGrevitPoint(); arc.GID = referenceID; return arc; } } else if (curve.IsPolyline()) { Rhino.Geometry.Polyline pline; if (curve.TryGetPolyline(out pline)) { PLine arc = new PLine(); arc.points = new List<Grevit.Types.Point>(); foreach (Rhino.Geometry.Point3d pkt in pline) { arc.points.Add(pkt.ToGrevitPoint()); } arc.closed = pline.IsClosed; arc.GID = referenceID; return arc; } } else if (curve.IsEllipse()) { Curve3Points arc = new Curve3Points(); arc.a = curve.PointAtStart.ToGrevitPoint(); arc.b = curve.PointAt(0.5).ToGrevitPoint(); arc.c = curve.PointAtEnd.ToGrevitPoint(); arc.GID = referenceID; return arc; } else if (curve.GetType() == typeof(Rhino.Geometry.NurbsCurve)) { Rhino.Geometry.NurbsCurve nc = (Rhino.Geometry.NurbsCurve)curve; Grevit.Types.Spline spline = new Grevit.Types.Spline(); spline.controlPoints = new List<Grevit.Types.Point>(); spline.weights = new List<double>(); foreach (Rhino.Geometry.ControlPoint p in nc.Points) { spline.controlPoints.Add(p.Location.ToGrevitPoint()); spline.weights.Add(p.Weight); } spline.degree = nc.Degree; spline.isClosed = nc.IsClosed; spline.isRational = nc.IsRational; spline.isPeriodic = nc.IsPeriodic; spline.GID = referenceID; spline.knots = new List<double>(); foreach (double dbl in nc.Knots) spline.knots.Add(dbl); return spline; } else { Line arc = new Line(); arc.from = curve.PointAtStart.ToGrevitPoint(); arc.to = curve.PointAtEnd.ToGrevitPoint(); arc.GID = referenceID; return arc; } return null; }
/// <summary> /// Get Grevit Curve Component /// </summary> /// <param name="curve"></param> /// <param name="referenceID"></param> /// <returns></returns> public static Component ToGrevitCurve(this Rhino.Geometry.Curve curve, string referenceID = "") { if (curve.IsArc(Rhino.RhinoMath.ZeroTolerance)) { Rhino.Geometry.Arc a; if (curve.TryGetArc(out a)) { Curve3Points arc = new Curve3Points(); arc.a = curve.PointAtStart.ToGrevitPoint(); arc.b = curve.PointAt(0.5).ToGrevitPoint(); arc.c = curve.PointAtEnd.ToGrevitPoint(); arc.GID = referenceID; return(arc); } } else if (curve.IsPolyline()) { Rhino.Geometry.Polyline pline; if (curve.TryGetPolyline(out pline)) { PLine arc = new PLine(); arc.points = new List <Grevit.Types.Point>(); foreach (Rhino.Geometry.Point3d pkt in pline) { arc.points.Add(pkt.ToGrevitPoint()); } arc.closed = pline.IsClosed; arc.GID = referenceID; return(arc); } } else if (curve.IsEllipse()) { Curve3Points arc = new Curve3Points(); arc.a = curve.PointAtStart.ToGrevitPoint(); arc.b = curve.PointAt(0.5).ToGrevitPoint(); arc.c = curve.PointAtEnd.ToGrevitPoint(); arc.GID = referenceID; return(arc); } else if (curve.GetType() == typeof(Rhino.Geometry.NurbsCurve)) { Rhino.Geometry.NurbsCurve nc = (Rhino.Geometry.NurbsCurve)curve; Grevit.Types.Spline spline = new Grevit.Types.Spline(); spline.controlPoints = new List <Grevit.Types.Point>(); spline.weights = new List <double>(); foreach (Rhino.Geometry.ControlPoint p in nc.Points) { spline.controlPoints.Add(p.Location.ToGrevitPoint()); spline.weights.Add(p.Weight); } spline.degree = nc.Degree; spline.isClosed = nc.IsClosed; spline.isRational = nc.IsRational; spline.isPeriodic = nc.IsPeriodic; spline.GID = referenceID; spline.knots = new List <double>(); foreach (double dbl in nc.Knots) { spline.knots.Add(dbl); } return(spline); } else { Line arc = new Line(); arc.from = curve.PointAtStart.ToGrevitPoint(); arc.to = curve.PointAtEnd.ToGrevitPoint(); arc.GID = referenceID; return(arc); } return(null); }