public List <CsgPolygon> ClipPolygons(List <CsgPolygon> polygons) { if (Plane == null) { return(new List <CsgPolygon>(polygons)); } var frontPolygons = new List <CsgPolygon>(); var backPolygons = new List <CsgPolygon>(); for (int i = 0; i < polygons.Count; i++) { Plane.SplitPolygon(polygons[i], frontPolygons, backPolygons, frontPolygons, backPolygons); } if (Front != null) { frontPolygons = Front.ClipPolygons(frontPolygons); } if (Back != null) { backPolygons = Back.ClipPolygons(backPolygons); } else { backPolygons.Clear(); } frontPolygons.AddRange(backPolygons); return(frontPolygons); }
public void ClipTo(CsgNode bsp) { Polygons = bsp.ClipPolygons(Polygons); Front?.ClipTo(bsp); Back?.ClipTo(bsp); }