mirror of
https://github.com/ajisaacs/OpenNest.git
synced 2026-10-17 22:01:38 -04:00
fix(expand): distinguish part blockers from plate edges
This commit is contained in:
1 parent
dc4b07ddf5
commit
fdc6f074ee
3 files changed
+77
-28
No files matched your search
@@ -536,6 +536,49 @@ public class ExpanderTests
|
||||
Assert.Equal(0, host.Location.X);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Separate_ReportsPartBlockerRatherThanPlateEdge()
|
||||
{
|
||||
var plate = MakePlate(20, 20, edge: 0);
|
||||
var pinned = AddSquare(plate, 8, 8);
|
||||
AddSquare(plate, 3.8, 8);
|
||||
AddSquare(plate, 12.2, 8);
|
||||
AddSquare(plate, 8, 3.8);
|
||||
AddSquare(plate, 8, 12.2);
|
||||
|
||||
var (_, poses, violations) = Expander.Separate(new List<Part> { pinned }, plate, 1);
|
||||
Assert.NotEmpty(violations);
|
||||
Assert.All(violations, v => Assert.False(v.BlockedByEdge,
|
||||
$"{v.B.BaseDrawing.Name}: blocker before the work-area edge, pose={poses[0]}"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Separate_ReportsActualPlateEdgeWhenItLimitsMovement()
|
||||
{
|
||||
var plate = MakePlate(12, 12, edge: 0);
|
||||
var anchor = AddSquare(plate, 1, 4, 2);
|
||||
var moving = AddSquare(plate, 7, 4, 2);
|
||||
|
||||
var (_, poses, violations) = Expander.Separate(new List<Part> { anchor, moving }, plate, 9);
|
||||
var pair = Assert.Single(violations.Where(v => ReferenceEquals(v.A, anchor) && ReferenceEquals(v.B, moving)));
|
||||
Assert.True(pair.BlockedByEdge);
|
||||
Assert.True(poses[1].X + 2 <= 12 + 1e-6);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Separate_ReportsPartBeforeFartherEdge_OnNarrowPlate()
|
||||
{
|
||||
var plate = MakePlate(9, 2, edge: 0);
|
||||
var anchor = AddSquare(plate, 0, 0, 2);
|
||||
var moving = AddSquare(plate, 3, 0, 2);
|
||||
var wall = AddRectangle(plate, 5.5, 0, 0.2, 2);
|
||||
|
||||
var (_, poses, violations) = Expander.Separate(new List<Part> { anchor, moving }, plate, 4);
|
||||
var pair = Assert.Single(violations.Where(v => ReferenceEquals(v.A, anchor) && ReferenceEquals(v.B, moving)));
|
||||
Assert.False(pair.BlockedByEdge);
|
||||
Assert.True(poses[1].X + 2 <= wall.Location.X + 1e-6);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Expand_WallsAndUnselectedPairs_StayExactlyAtClearance()
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user