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.
65 lines
1.7 KiB
C#
65 lines
1.7 KiB
C#
using OpenNest.Math;
|
|
|
|
namespace OpenNest.RectanglePacking
|
|
{
|
|
internal class FillSameRotation : FillEngine
|
|
{
|
|
public FillSameRotation(Bin bin)
|
|
: base(bin) { }
|
|
|
|
public override void Fill(Item item)
|
|
{
|
|
var bin1 = Bin.Clone() as Bin;
|
|
var bin2 = Bin.Clone() as Bin;
|
|
|
|
var engine = new FillNoRotation(bin1);
|
|
engine.Fill(item);
|
|
|
|
item.Rotate();
|
|
|
|
engine.Bin = bin2;
|
|
engine.Fill(item);
|
|
|
|
var density1 = bin1.Density();
|
|
var density2 = bin2.Density();
|
|
|
|
if (density1.IsEqualTo(density2))
|
|
{
|
|
var bounds1 = bin1.Items.GetBoundingBox();
|
|
var bounds2 = bin2.Items.GetBoundingBox();
|
|
|
|
if (bounds2.Right < bounds1.Right)
|
|
Bin.Items.AddRange(bin2.Items);
|
|
else
|
|
Bin.Items.AddRange(bin1.Items);
|
|
}
|
|
else if (density1 > density2)
|
|
Bin.Items.AddRange(bin1.Items);
|
|
else
|
|
Bin.Items.AddRange(bin2.Items);
|
|
}
|
|
|
|
public override void Fill(Item item, int maxCount)
|
|
{
|
|
var bin1 = Bin.Clone() as Bin;
|
|
var bin2 = Bin.Clone() as Bin;
|
|
|
|
var engine = new FillNoRotation(bin1);
|
|
engine.Fill(item, maxCount);
|
|
|
|
item.Rotate();
|
|
|
|
engine.Bin = bin2;
|
|
engine.Fill(item, maxCount);
|
|
|
|
var bounds1 = bin1.Items.GetBoundingBox();
|
|
var bounds2 = bin2.Items.GetBoundingBox();
|
|
|
|
if (bounds2.Right < bounds1.Right)
|
|
Bin.Items.AddRange(bin2.Items);
|
|
else
|
|
Bin.Items.AddRange(bin1.Items);
|
|
}
|
|
}
|
|
}
|