Example #1
0
        /// <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;
        }