private List <Polygon> ClipPolygons(IEnumerable <Polygon> polygons) { if (Plane == null) { return(polygons.ToList()); } var pp = Plane.ToPrecisionPlane(); var front = new List <Polygon>(); var back = new List <Polygon>(); foreach (var polygon in polygons.Select(x => x.ToPrecisionPolygon())) { polygon.Split(pp, out var b, out var f, out var cb, out var cf); if (f != null) { front.Add(f.ToStandardPolygon()); } if (b != null) { back.Add(b.ToStandardPolygon()); } if (cf != null) { front.Add(cf.ToStandardPolygon()); } if (cb != null) { back.Add(cb.ToStandardPolygon()); } } if (Front != null) { front = Front.ClipPolygons(front); } back = Back != null?Back.ClipPolygons(back) : new List <Polygon>(); return(front.Concat(back).ToList()); }
private List <Polygon> ClipPolygons(IEnumerable <Polygon> polygons) { if (Plane == null) { return(polygons.ToList()); } var front = new List <Polygon>(); var back = new List <Polygon>(); foreach (var polygon in polygons) { Polygon f, b, cf, cb; polygon.Split(Plane, out b, out f, out cb, out cf); if (f != null) { front.Add(f); } if (b != null) { back.Add(b); } if (cf != null) { front.Add(cf); } if (cb != null) { back.Add(cb); } } if (Front != null) { front = Front.ClipPolygons(front); } back = Back != null?Back.ClipPolygons(back) : new List <Polygon>(); return(front.Concat(back).ToList()); }