using Speckle.Objects.Geometry; namespace Speckle.Objects; public static class CurveTypeEncoding { public const double Arc = 0; public const double Circle = 1; public const double Curve = 2; public const double Ellipse = 3; public const double Line = 4; public const double Polyline = 5; public const double PolyCurve = 6; } /// /// This class is a helper class for Brep curve encoding!! /// public static class CurveArrayEncodingExtensions { public static List ToArray(IReadOnlyCollection curves) { var list = new List(); foreach (var curve in curves) { switch (curve) { case Arc a: list.AddRange(a.ToList()); break; case Circle c: list.AddRange(c.ToList()); break; case Curve c: list.AddRange(c.ToList()); break; case Ellipse e: list.AddRange(e.ToList()); break; case Line l: list.AddRange(l.ToList()); break; case Polycurve p: list.AddRange(p.ToList()); break; case Polyline p: list.AddRange(p.ToList()); break; default: throw new ArgumentOutOfRangeException(nameof(curves), $"Unkown curve type: {curve.GetType()}."); } } return list; } public static List FromArray(List list) { var curves = new List(); if (list.Count == 0) { return curves; } var done = false; var currentIndex = 0; while (!done) { var itemLength = (int)list[currentIndex]; var item = list.GetRange(currentIndex, itemLength + 1); switch (item[1]) { case CurveTypeEncoding.Arc: curves.Add(Arc.FromList(item)); break; case CurveTypeEncoding.Circle: curves.Add(Circle.FromList(item)); break; case CurveTypeEncoding.Curve: curves.Add(Curve.FromList(item)); break; case CurveTypeEncoding.Ellipse: curves.Add(Ellipse.FromList(item)); break; case CurveTypeEncoding.Line: curves.Add(Line.FromList(item)); break; case CurveTypeEncoding.Polyline: curves.Add(Polyline.FromList(item)); break; case CurveTypeEncoding.PolyCurve: curves.Add(Polycurve.FromList(item)); break; } currentIndex += itemLength + 1; done = currentIndex >= list.Count; } return curves; } }