internal List <Dyn.Curve> SplitCurveByCurves(Dyn.Curve c, List <Dyn.Curve> crvs, double intTol, out List <Dyn.Point> assPts, List <Dyn.Point> pts = null) { List <Dyn.Geometry> disposeGeo = new List <Dyn.Geometry>(); List <Dyn.Point> paras = new List <Dyn.Point>(); List <Dyn.Point> apts = new List <Dyn.Point>(); foreach (Dyn.Curve dc in crvs) { Dyn.Geometry [] intg = c.Intersect(dc); if (intg != null) { for (int i = 0; i < intg.Length; ++i) { if (intg[i] is Dyn.Point) { paras.Add(intg[i] as Dyn.Point); } else { disposeGeo.Add(intg[i]); } } } } if (pts != null) { foreach (Dyn.Point p in pts) { if (c.DistanceTo(p) < intTol) { paras.Add(Dyn.Point.ByCoordinates(p.X, p.Y, p.Z)); apts.Add(Dyn.Point.ByCoordinates(p.X, p.Y, p.Z)); } } } if (apts.Count == 0) { assPts = null; } else { assPts = apts; } List <Dyn.Curve> splitedCulled = new List <Dyn.Curve>(); foreach (Dyn.Curve sc in c.SplitByPoints(paras)) { if (sc.Length > 0.005) { splitedCulled.Add(sc); } else { disposeGeo.Add(sc); } } foreach (Dyn.Point p in paras) { disposeGeo.Add(p); } this.DisposeGeometries(disposeGeo); return(splitedCulled.ToList()); }