/// <summary> /// Uaktualnij EmptyFields /// </summary> /// <param name="insertedRectangle">Wstawiany prostok�t</param> private void UpdateEmptyFields(Rectangle insertedRectangle) { IEnumerator<Rectangle> enumerator = emptyFields.GetEnumerator(); //sprawdzamy czy sa jakies puste, ktore zostaly calkowicie pokryte przez ostatnio dodany prostokat List<Rectangle> toDelete = new List<Rectangle>(); while (enumerator.MoveNext()) { Rectangle empty = enumerator.Current; if (empty != null) if (insertedRectangle.Covers(empty)) //emptyFields.Remove(empty); toDelete.Add(empty); } foreach (Rectangle r in toDelete) emptyFields.Remove(r); toDelete.Clear(); enumerator = emptyFields.GetEnumerator(); List<Rectangle> toAdd = new List<Rectangle>(); //sprawdzamy czy sa jakies czesciowo pokryte puste while (enumerator.MoveNext()) { Rectangle empty = enumerator.Current; if (empty != null) { Rectangle intersection = insertedRectangle.IntersectionRect(empty); if (intersection != null) { //emptyFields.Remove(empty); toDelete.Add(empty); List<Rectangle> subtr = empty.Subtract(insertedRectangle); //emptyFields.AddRange(subtr); // poprawione - Pawe� //toAdd.AddRange(subtr); addToList(toAdd, subtr); } } } foreach (Rectangle r in toDelete) emptyFields.Remove(r); toDelete.Clear(); foreach (Rectangle r in toAdd) // poprawione - Pawe� //emptyFields.AddRange(toAdd); addToList(emptyFields, toAdd); toAdd.Clear(); //sprawdzamy czy trzeba dodac jakies nowe EmptyFields AddNewEmptyFields(insertedRectangle); }