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.
75 lines
2.1 KiB
C#
75 lines
2.1 KiB
C#
using System;
|
|
using OpenNest.Geometry;
|
|
using OpenNest.Math;
|
|
|
|
namespace OpenNest.Engine.CirclePacking
|
|
{
|
|
internal class FillEndEven : FillEngine
|
|
{
|
|
public FillEndEven(Bin bin)
|
|
: base(bin) { }
|
|
|
|
public override void Fill(Item item)
|
|
{
|
|
var max = new Vector(
|
|
Bin.Right - item.BoundingBox.Right + Tolerance.Epsilon,
|
|
Bin.Top - item.BoundingBox.Top + Tolerance.Epsilon
|
|
);
|
|
|
|
var rows = System.Math.Floor((Bin.Length + Tolerance.Epsilon) / (item.Diameter));
|
|
|
|
var diameter = item.Diameter;
|
|
var remaining = Bin.Length - diameter * rows;
|
|
var radius = diameter * 0.5;
|
|
|
|
if (remaining < radius)
|
|
{
|
|
var yodd = Bin.Y + remaining;
|
|
var yoffset = diameter;
|
|
var xoffset = Trigonometry.Base(remaining, diameter);
|
|
int column = 0;
|
|
|
|
for (var x = Bin.X; x <= max.X; x += xoffset)
|
|
{
|
|
var y = column.IsOdd() ? yodd : Bin.Y;
|
|
|
|
for (; y <= max.Y; y += yoffset)
|
|
{
|
|
Bin.Items.Add(new Item { Center = new Vector(x, y) });
|
|
}
|
|
|
|
column++;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var yoffset = (Bin.Length - diameter) / (2 * rows - 1);
|
|
var xoffset = Trigonometry.Base(yoffset, diameter);
|
|
|
|
var yodd = Bin.Y + yoffset;
|
|
|
|
yoffset *= 2.0;
|
|
|
|
int column = 0;
|
|
|
|
for (var x = Bin.X; x <= max.X; x += xoffset)
|
|
{
|
|
var y = column.IsOdd() ? yodd : Bin.Y;
|
|
|
|
for (; y <= max.Y; y += yoffset)
|
|
{
|
|
Bin.Items.Add(new Item { Center = new Vector(x, y) });
|
|
}
|
|
|
|
column++;
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void Fill(Item item, int maxCount)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
}
|