/// <summary> /// Draws the soles into a grid. It also calculates the unset area. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="drawer">The drawer.</param> /// <param name="grid">The grid.</param> /// <param name="sealingSlabs">The sealing slabs.</param> /// <returns></returns> public List <SealingSlab> DrawSealingSlabs <T>(IDrawer <T> drawer, IGrid <T> grid, IEnumerable <SealingSlab> sealingSlabs) where T : struct { List <SealingSlab> intersectingSealingSlabs = new List <SealingSlab>(); sealingSlabs.ToList().ForEach(sealingSlab => { if (!grid.Intersects(sealingSlab.X, sealingSlab.Y)) { drawer.DrawSealingSlab(grid, sealingSlab.X, sealingSlab.Y, sealingSlab.Radius); } else { intersectingSealingSlabs.Add(sealingSlab); } }); // Only return the non-intersecting sealing slabs return(sealingSlabs.Except(intersectingSealingSlabs).ToList()); }