private List <int> GetMarks(Vec center, int localityRadius) { var marks = new List <int>(); var mark = new Dictionary <Vec, int>(); var nextMark = 1; var cuboid = new Cuboid(toFill.R).Intersect(new Cuboid(center, localityRadius)); foreach (var p in cuboid.AllPoints()) { if (p == center || filled[p]) { continue; } if (!mark.ContainsKey(p)) { mark[p] = nextMark; var component = MoreEnumerable.TraverseDepthFirst(p, cur => cur.GetMNeighbours().Where(next => cuboid.Contains(next) && !filled[next] && !mark.ContainsKey(next))); foreach (var componentItem in component) { mark[componentItem] = nextMark; } nextMark++; } marks.Add(mark[p]); } return(marks); }