public override ICurve[] Intersect(BoundingRect thisBounds, ISurface other, BoundingRect otherBounds) { if (other is PlaneSurface ps) { IDualSurfaceCurve[] dsc = GetPlaneIntersection(ps, otherBounds.Left, otherBounds.Right, otherBounds.Bottom, otherBounds.Top, 0.0); List <ICurve> res = new List <ICurve>(); for (int i = 0; i < dsc.Length; i++) { res.Add(dsc[i].Curve3D); } return(res.ToArray()); } if (other is ICylinder cylo) { ICurve[] res = Surfaces.Intersect(this as ICylinder, other as ICylinder); } return(base.Intersect(thisBounds, other, otherBounds)); }