All 132 OpenNest.Engine source files now declare namespaces matching their nested directories: Jobs/, Jobs/Placement/, Jobs/Adapters/, Fill/, RectanglePacking/, CirclePacking/, and engine-root types moved from 'OpenNest' to 'OpenNest.Engine'. RootNamespace updated accordingly. Consumers (Api, Console, Mcp, Benchmark, Training, desktop app, tests) gained the explicit usings the move requires; CLAUDE.md updated.
59 lines
1.4 KiB
C#
59 lines
1.4 KiB
C#
using System.Collections.Generic;
|
|
using OpenNest.Geometry;
|
|
using OpenNest.Math;
|
|
|
|
namespace OpenNest.Engine.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);
|
|
}
|
|
}
|
|
}
|