feat(io): add border detection with angular tolerance and zone markers (phase 2)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -66,5 +66,87 @@ namespace OpenNest.Tests.IO
|
||||
|
||||
Assert.Contains(line.Id, result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DetectBorder_FlagsLinesOnBoundingBoxEdges()
|
||||
{
|
||||
var entities = new List<Entity>
|
||||
{
|
||||
new Line(0, 0, 86, 0) { Layer = new Layer("0") },
|
||||
new Line(86, 0, 86, 134) { Layer = new Layer("0") },
|
||||
new Line(86, 134, 0, 134) { Layer = new Layer("0") },
|
||||
new Line(0, 134, 0, 0) { Layer = new Layer("0") },
|
||||
new Line(30, 40, 50, 90) { Layer = new Layer("0") },
|
||||
new Line(50, 90, 70, 40) { Layer = new Layer("0") },
|
||||
new Line(70, 40, 30, 40) { Layer = new Layer("0") },
|
||||
};
|
||||
|
||||
var result = TitleBlockDetector.Detect(entities, null);
|
||||
|
||||
Assert.Contains(entities[0].Id, result);
|
||||
Assert.Contains(entities[1].Id, result);
|
||||
Assert.Contains(entities[2].Id, result);
|
||||
Assert.Contains(entities[3].Id, result);
|
||||
Assert.DoesNotContain(entities[4].Id, result);
|
||||
Assert.DoesNotContain(entities[5].Id, result);
|
||||
Assert.DoesNotContain(entities[6].Id, result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DetectBorder_FlagsZoneMarkerTicks()
|
||||
{
|
||||
var entities = new List<Entity>
|
||||
{
|
||||
new Line(0, 0, 100, 0) { Layer = new Layer("0") },
|
||||
new Line(100, 0, 100, 80) { Layer = new Layer("0") },
|
||||
new Line(100, 80, 0, 80) { Layer = new Layer("0") },
|
||||
new Line(0, 80, 0, 0) { Layer = new Layer("0") },
|
||||
new Line(25, 80, 25, 77) { Layer = new Layer("0") },
|
||||
new Line(50, 80, 50, 77) { Layer = new Layer("0") },
|
||||
new Line(75, 80, 75, 77) { Layer = new Layer("0") },
|
||||
new Line(40, 30, 60, 30) { Layer = new Layer("0") },
|
||||
};
|
||||
|
||||
var result = TitleBlockDetector.Detect(entities, null);
|
||||
|
||||
Assert.Contains(entities[4].Id, result);
|
||||
Assert.Contains(entities[5].Id, result);
|
||||
Assert.Contains(entities[6].Id, result);
|
||||
Assert.DoesNotContain(entities[7].Id, result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DetectBorder_IgnoresWhenNoBorderPresent()
|
||||
{
|
||||
var entities = new List<Entity>
|
||||
{
|
||||
new Line(30, 40, 50, 90) { Layer = new Layer("0") },
|
||||
new Line(50, 90, 70, 40) { Layer = new Layer("0") },
|
||||
new Line(70, 40, 30, 40) { Layer = new Layer("0") },
|
||||
};
|
||||
|
||||
var result = TitleBlockDetector.Detect(entities, null);
|
||||
|
||||
Assert.Empty(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DetectBorder_ToleratesSlightRotation()
|
||||
{
|
||||
var angleRad = OpenNest.Math.Angle.ToRadians(0.5);
|
||||
var endY = 86 * System.Math.Sin(angleRad);
|
||||
var entities = new List<Entity>
|
||||
{
|
||||
new Line(0, 0, 86, endY) { Layer = new Layer("0") },
|
||||
new Line(86, endY, 86, 134) { Layer = new Layer("0") },
|
||||
new Line(86, 134, 0, 134) { Layer = new Layer("0") },
|
||||
new Line(0, 134, 0, 0) { Layer = new Layer("0") },
|
||||
new Line(30, 40, 50, 90) { Layer = new Layer("0") },
|
||||
};
|
||||
|
||||
var result = TitleBlockDetector.Detect(entities, null);
|
||||
|
||||
Assert.Contains(entities[0].Id, result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user