Repo-wide sweep with the pinned CSharpier 1.3.0 tool. Whitespace and line-wrapping only; OpenNest.Engine.Tests (109) and OpenNest.IO.Tests pass after reformat, full solution builds 0 errors. Added .csharpierignore so csproj/config XML keeps its existing layout (CSharpier's XML wrapping churns attributes with zero benefit). Formatting is now enforceable: dotnet csharpier check . passes.
59 lines
1.4 KiB
C#
59 lines
1.4 KiB
C#
using System.Collections.Generic;
|
|
using OpenNest.Geometry;
|
|
using OpenNest.Math;
|
|
|
|
namespace OpenNest.RectanglePacking
|
|
{
|
|
internal class Item : Box
|
|
{
|
|
public int Id { get; set; }
|
|
|
|
public bool IsRotated { get; private set; }
|
|
|
|
public void Rotate()
|
|
{
|
|
Generic.Swap(ref Size.Width, ref Size.Length);
|
|
IsRotated = !IsRotated;
|
|
}
|
|
|
|
public object Clone()
|
|
{
|
|
return new Item
|
|
{
|
|
IsRotated = this.IsRotated,
|
|
Location = this.Location,
|
|
Size = this.Size,
|
|
Id = this.Id,
|
|
};
|
|
}
|
|
}
|
|
|
|
internal static class ItemListExtensions
|
|
{
|
|
public static Box GetBoundingBox(this IList<Item> items)
|
|
{
|
|
if (items.Count == 0)
|
|
return Box.Empty;
|
|
|
|
double minX = items[0].X;
|
|
double minY = items[0].Y;
|
|
double maxX = items[0].Right;
|
|
double maxY = items[0].Top;
|
|
|
|
foreach (var box in items)
|
|
{
|
|
if (box.Left < minX)
|
|
minX = box.Left;
|
|
if (box.Right > maxX)
|
|
maxX = box.Right;
|
|
if (box.Bottom < minY)
|
|
minY = box.Bottom;
|
|
if (box.Top > maxY)
|
|
maxY = box.Top;
|
|
}
|
|
|
|
return new Box(minX, minY, maxX - minX, maxY - minY);
|
|
}
|
|
}
|
|
}
|