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.
119 lines
3.9 KiB
C#
119 lines
3.9 KiB
C#
using OpenNest.CNC;
|
|
using OpenNest.Geometry;
|
|
using OpenNest.Shapes;
|
|
|
|
namespace OpenNest.Tests;
|
|
|
|
public class PlateSnapToStandardSizeTests
|
|
{
|
|
private static Part MakeRectPart(double x, double y, double length, double width)
|
|
{
|
|
var pgm = new Program();
|
|
pgm.Codes.Add(new RapidMove(new Vector(0, 0)));
|
|
pgm.Codes.Add(new LinearMove(new Vector(length, 0)));
|
|
pgm.Codes.Add(new LinearMove(new Vector(length, width)));
|
|
pgm.Codes.Add(new LinearMove(new Vector(0, width)));
|
|
pgm.Codes.Add(new LinearMove(new Vector(0, 0)));
|
|
var drawing = new Drawing("test", pgm);
|
|
var part = new Part(drawing);
|
|
part.Offset(x, y);
|
|
return part;
|
|
}
|
|
|
|
[Fact]
|
|
public void SnapToStandardSize_SmallParts_SnapsToIncrement()
|
|
{
|
|
var plate = new Plate(200, 200); // oversized starting size
|
|
plate.Parts.Add(MakeRectPart(0, 0, 10, 20));
|
|
|
|
var result = plate.SnapToStandardSize();
|
|
|
|
// 10x20 is well below 48x48 MinSheet -> snap to integer increment.
|
|
Assert.Null(result.MatchedLabel);
|
|
Assert.Equal(10, plate.Size.Length); // X axis
|
|
Assert.Equal(20, plate.Size.Width); // Y axis
|
|
}
|
|
|
|
[Fact]
|
|
public void SnapToStandardSize_SmallPartsWithFractionalIncrement_UsesIncrement()
|
|
{
|
|
var plate = new Plate(200, 200);
|
|
plate.Parts.Add(MakeRectPart(0, 0, 10.3, 20.7));
|
|
|
|
var result = plate.SnapToStandardSize(new PlateSizeOptions { SnapIncrement = 0.25 });
|
|
|
|
Assert.Null(result.MatchedLabel);
|
|
Assert.Equal(10.5, plate.Size.Length, 4);
|
|
Assert.Equal(20.75, plate.Size.Width, 4);
|
|
}
|
|
|
|
[Fact]
|
|
public void SnapToStandardSize_40x90Part_SnapsToStandard48x96_XLong()
|
|
{
|
|
// Part is 90 long (X) x 40 wide (Y) -> X is the long axis.
|
|
var plate = new Plate(200, 200);
|
|
plate.Parts.Add(MakeRectPart(0, 0, 90, 40));
|
|
|
|
var result = plate.SnapToStandardSize();
|
|
|
|
Assert.Equal("48x96", result.MatchedLabel);
|
|
Assert.Equal(96, plate.Size.Length); // X axis = long
|
|
Assert.Equal(48, plate.Size.Width); // Y axis = short
|
|
}
|
|
|
|
[Fact]
|
|
public void SnapToStandardSize_90TallPart_SnapsToStandard48x96_YLong()
|
|
{
|
|
// Part is 40 long (X) x 90 wide (Y) -> Y is the long axis.
|
|
var plate = new Plate(200, 200);
|
|
plate.Parts.Add(MakeRectPart(0, 0, 40, 90));
|
|
|
|
var result = plate.SnapToStandardSize();
|
|
|
|
Assert.Equal("48x96", result.MatchedLabel);
|
|
Assert.Equal(48, plate.Size.Length); // X axis = short
|
|
Assert.Equal(96, plate.Size.Width); // Y axis = long
|
|
}
|
|
|
|
[Fact]
|
|
public void SnapToStandardSize_JustOver48_PicksNextStandardSize()
|
|
{
|
|
var plate = new Plate(200, 200);
|
|
plate.Parts.Add(MakeRectPart(0, 0, 100, 50));
|
|
|
|
var result = plate.SnapToStandardSize();
|
|
|
|
Assert.Equal("60x120", result.MatchedLabel);
|
|
Assert.Equal(120, plate.Size.Length); // X long
|
|
Assert.Equal(60, plate.Size.Width);
|
|
}
|
|
|
|
[Fact]
|
|
public void SnapToStandardSize_EmptyPlate_DoesNotModifySize()
|
|
{
|
|
var plate = new Plate(60, 120);
|
|
|
|
var result = plate.SnapToStandardSize();
|
|
|
|
Assert.Null(result.MatchedLabel);
|
|
Assert.Equal(60, plate.Size.Width);
|
|
Assert.Equal(120, plate.Size.Length);
|
|
}
|
|
|
|
[Fact]
|
|
public void SnapToStandardSize_MultipleParts_UsesCombinedEnvelope()
|
|
{
|
|
var plate = new Plate(200, 200);
|
|
plate.Parts.Add(MakeRectPart(0, 0, 30, 40));
|
|
plate.Parts.Add(MakeRectPart(30, 0, 30, 40)); // combined X-extent = 60
|
|
plate.Parts.Add(MakeRectPart(0, 40, 60, 60)); // combined extent = 60 x 100
|
|
|
|
var result = plate.SnapToStandardSize();
|
|
|
|
// 60 x 100 fits 60x120 standard sheet, Y is the long axis.
|
|
Assert.Equal("60x120", result.MatchedLabel);
|
|
Assert.Equal(60, plate.Size.Length); // X
|
|
Assert.Equal(120, plate.Size.Width); // Y long
|
|
}
|
|
}
|