public static Tuple <PolyCurve, List <Point3d>, List <string> > _notUsedConvertMem2dCrv(Curve crv, double tolerance = -1) { PolyCurve m_crv = null; List <string> crv_type = new List <string>(); List <Point3d> m_topo = new List <Point3d>(); if (crv.Degree > 1) { if (!crv.IsArc() | crv.IsClosed) { if (tolerance < 0) { tolerance = Tolerance.RhinoDocTolerance(); } m_crv = crv.ToArcsAndLines(tolerance * 20, 5, 0, 0); Curve[] segments; if (m_crv != null) { segments = m_crv.DuplicateSegments(); } else { segments = new Curve[] { crv } }; for (int i = 0; i < segments.Length; i++) { m_topo.Add(segments[i].PointAtStart); crv_type.Add(""); if (segments[i].IsArc()) { m_topo.Add(segments[i].PointAtNormalizedLength(0.5)); crv_type.Add("A"); } } m_topo.Add(segments[segments.Length - 1].PointAtEnd); crv_type.Add(""); } else { crv_type.Add(""); crv_type.Add("A"); crv_type.Add(""); m_topo.Add(crv.PointAtStart); m_topo.Add(crv.PointAtNormalizedLength(0.5)); m_topo.Add(crv.PointAtEnd); m_crv = new PolyCurve(); m_crv.Append(crv); } } else if (crv.Degree == 1) { if (crv.SpanCount > 1) { m_crv = new PolyCurve(); Curve[] segments = crv.DuplicateSegments(); for (int i = 0; i < segments.Length; i++) { crv_type.Add(""); m_topo.Add(segments[i].PointAtStart); m_crv.Append(segments[i]); } crv_type.Add(""); m_topo.Add(segments[segments.Length - 1].PointAtEnd); } else { crv_type.Add(""); crv_type.Add(""); m_topo.Add(crv.PointAtStart); m_topo.Add(crv.PointAtEnd); m_crv = new PolyCurve(); m_crv.Append(crv); } } return(new Tuple <PolyCurve, List <Point3d>, List <string> >(m_crv, m_topo, crv_type)); }