/// <summary> /// Tries to fit multiple rectangle with (width, height). /// </summary> /// <param name="width">Width requested.</param> /// <param name="height">Height requested</param> /// <param name="count">The number of rectangle to fit.</param> /// <param name="inserted">A callback called for each rectangle successfully fitted.</param> /// <returns><c>true</c> if all rectangles were successfully fitted.</returns> public bool TryInsert(int width, int height, int count, InsertRectangleCallback inserted) { var bestRectangle = new Rectangle(); tempFreeRectangles.Clear(); foreach (var freeRectangle in freeRectangles) { tempFreeRectangles.Add(freeRectangle); } for (var i = 0; i < count; ++i) { if (!Insert(width, height, tempFreeRectangles, ref bestRectangle)) { tempFreeRectangles.Clear(); return(false); } inserted(i, ref bestRectangle); } // if the insertion went well, use the new configuration freeRectangles.Clear(); foreach (var tempFreeRectangle in tempFreeRectangles) { freeRectangles.Add(tempFreeRectangle); } tempFreeRectangles.Clear(); return(true); }
/// <summary> /// Tries to fit multiple rectangle with (width, height). /// </summary> /// <param name="width">Width requested.</param> /// <param name="height">Height requested</param> /// <param name="count">The number of rectangle to fit.</param> /// <param name="inserted">A callback called for each rectangle successfully fitted.</param> /// <returns><c>true</c> if all rectangles were successfully fitted.</returns> public bool TryInsert(int width, int height, int count, InsertRectangleCallback inserted) { var bestRectangle = new Rectangle(); tempFreeRectangles.Clear(); foreach (var freeRectangle in freeRectangles) { tempFreeRectangles.Add(freeRectangle); } for (var i = 0; i < count; ++i) { if (!Insert(width, height, tempFreeRectangles, ref bestRectangle)) { tempFreeRectangles.Clear(); return false; } inserted(i, ref bestRectangle); } // if the insertion went well, use the new configuration freeRectangles.Clear(); foreach (var tempFreeRectangle in tempFreeRectangles) { freeRectangles.Add(tempFreeRectangle); } tempFreeRectangles.Clear(); return true; }