/// <summary> /// Given an array of rects, the method returns an array of rects arranged within outPackedWidth and outPackedHeight /// </summary> /// <param name="rects">Rects to pack</param> /// <param name="padding">Padding between each rect</param> /// <param name="outPackedRects">Rects arranged within outPackedWidth and outPackedHeight</param> /// <param name="outPackedWidth">Width of the packed rects</param> /// <param name="outPackedHeight">Height of the packed rects</param> public static void Pack(RectInt[] rects, int padding, out RectInt[] outPackedRects, out int outPackedWidth, out int outPackedHeight) { var packNode = InternalPack(rects, padding); outPackedWidth = packNode.rect.width; outPackedHeight = packNode.rect.height; var visitor = new CollectPackNodePositionVisitor(); packNode.AcceptVisitor(visitor); outPackedRects = new RectInt[rects.Length]; for (int i = 0; i < rects.Length; ++i) { outPackedRects[i] = new RectInt(visitor.positions[i].x + padding, visitor.positions[i].y + padding, rects[i].width, rects[i].height); } #if PACKING_DEBUG var emptyNodeCollector = new CollectEmptyNodePositionVisitor(); packNode.AcceptVisitor(emptyNodeCollector); Array.Resize(ref outPackedRects, rects.Length + emptyNodeCollector.emptyAreas.Count); for (int i = rects.Length; i < outPackedRects.Length; ++i) { outPackedRects[i] = emptyNodeCollector.emptyAreas[i - rects.Length]; } #endif }
/// <summary> /// Given an array of rects, the method returns an array of rects arranged within outPackedWidth and outPackedHeight /// </summary> /// <param name="rects">Rects to pack</param> /// <param name="padding">Padding between each rect</param> /// <param name="outPackedRects">Rects arranged within outPackedWidth and outPackedHeight</param> /// <param name="outPackedWidth">Width of the packed rects</param> /// <param name="outPackedHeight">Height of the packed rects</param> public static void Pack(RectInt[] rects, int padding, out RectInt[] outPackedRects, out int outPackedWidth, out int outPackedHeight) { var packNode = InternalPack(rects, padding); outPackedWidth = packNode.rect.width; outPackedHeight = packNode.rect.height; var visitor = new CollectPackNodePositionVisitor(); packNode.AcceptVisitor(visitor); outPackedRects = new RectInt[rects.Length]; for (int i = 0; i < rects.Length; ++i) { outPackedRects[i] = new RectInt(visitor.positions[i].x + padding, visitor.positions[i].y, rects[i].width, rects[i].height); } }