diff --git a/OpenNest.Core/CNC/CuttingStrategy/LeadIns/ArcLeadIn.cs b/OpenNest.Core/CNC/CuttingStrategy/LeadIns/ArcLeadIn.cs index 67af1b9..0779ae4 100644 --- a/OpenNest.Core/CNC/CuttingStrategy/LeadIns/ArcLeadIn.cs +++ b/OpenNest.Core/CNC/CuttingStrategy/LeadIns/ArcLeadIn.cs @@ -19,7 +19,7 @@ namespace OpenNest.CNC.CuttingStrategy return new List { new RapidMove(piercePoint), - new ArcMove(contourStartPoint, arcCenter, winding) + new ArcMove(contourStartPoint, arcCenter, winding) { Layer = LayerType.Leadin } }; } diff --git a/OpenNest.Core/CNC/CuttingStrategy/LeadIns/CleanHoleLeadIn.cs b/OpenNest.Core/CNC/CuttingStrategy/LeadIns/CleanHoleLeadIn.cs index b0750ff..884341a 100644 --- a/OpenNest.Core/CNC/CuttingStrategy/LeadIns/CleanHoleLeadIn.cs +++ b/OpenNest.Core/CNC/CuttingStrategy/LeadIns/CleanHoleLeadIn.cs @@ -27,8 +27,8 @@ namespace OpenNest.CNC.CuttingStrategy return new List { new RapidMove(piercePoint), - new LinearMove(arcStart), - new ArcMove(contourStartPoint, arcCenter, winding) + new LinearMove(arcStart) { Layer = LayerType.Leadin }, + new ArcMove(contourStartPoint, arcCenter, winding) { Layer = LayerType.Leadin } }; } diff --git a/OpenNest.Core/CNC/CuttingStrategy/LeadIns/LineArcLeadIn.cs b/OpenNest.Core/CNC/CuttingStrategy/LeadIns/LineArcLeadIn.cs index 2fac024..136dada 100644 --- a/OpenNest.Core/CNC/CuttingStrategy/LeadIns/LineArcLeadIn.cs +++ b/OpenNest.Core/CNC/CuttingStrategy/LeadIns/LineArcLeadIn.cs @@ -27,8 +27,8 @@ namespace OpenNest.CNC.CuttingStrategy return new List { new RapidMove(piercePoint), - new LinearMove(arcStart), - new ArcMove(contourStartPoint, arcCenter, winding) + new LinearMove(arcStart) { Layer = LayerType.Leadin }, + new ArcMove(contourStartPoint, arcCenter, winding) { Layer = LayerType.Leadin } }; } diff --git a/OpenNest.Core/CNC/CuttingStrategy/LeadIns/LineLeadIn.cs b/OpenNest.Core/CNC/CuttingStrategy/LeadIns/LineLeadIn.cs index c20e8d9..4516070 100644 --- a/OpenNest.Core/CNC/CuttingStrategy/LeadIns/LineLeadIn.cs +++ b/OpenNest.Core/CNC/CuttingStrategy/LeadIns/LineLeadIn.cs @@ -17,7 +17,7 @@ namespace OpenNest.CNC.CuttingStrategy return new List { new RapidMove(piercePoint), - new LinearMove(contourStartPoint) + new LinearMove(contourStartPoint) { Layer = LayerType.Leadin } }; } diff --git a/OpenNest.Core/CNC/CuttingStrategy/LeadIns/LineLineLeadIn.cs b/OpenNest.Core/CNC/CuttingStrategy/LeadIns/LineLineLeadIn.cs index d646694..e3ce6d1 100644 --- a/OpenNest.Core/CNC/CuttingStrategy/LeadIns/LineLineLeadIn.cs +++ b/OpenNest.Core/CNC/CuttingStrategy/LeadIns/LineLineLeadIn.cs @@ -24,8 +24,8 @@ namespace OpenNest.CNC.CuttingStrategy return new List { new RapidMove(piercePoint), - new LinearMove(midPoint), - new LinearMove(contourStartPoint) + new LinearMove(midPoint) { Layer = LayerType.Leadin }, + new LinearMove(contourStartPoint) { Layer = LayerType.Leadin } }; } diff --git a/OpenNest.Tests/LeadInLayerTagTests.cs b/OpenNest.Tests/LeadInLayerTagTests.cs new file mode 100644 index 0000000..51f76bc --- /dev/null +++ b/OpenNest.Tests/LeadInLayerTagTests.cs @@ -0,0 +1,90 @@ +using OpenNest.CNC; +using OpenNest.CNC.CuttingStrategy; +using OpenNest.Geometry; + +namespace OpenNest.Tests; + +public class LeadInLayerTagTests +{ + private static readonly Vector Point = new(5, 5); + private const double Normal = 0.0; + + [Fact] + public void LineLeadIn_SetsLeadinLayer() + { + var leadIn = new LineLeadIn { Length = 0.5, ApproachAngle = 90 }; + var codes = leadIn.Generate(Point, Normal); + var linear = codes.OfType().Single(); + Assert.Equal(LayerType.Leadin, linear.Layer); + } + + [Fact] + public void ArcLeadIn_SetsLeadinLayer() + { + var leadIn = new ArcLeadIn { Radius = 0.25 }; + var codes = leadIn.Generate(Point, Normal); + var arc = codes.OfType().Single(); + Assert.Equal(LayerType.Leadin, arc.Layer); + } + + [Fact] + public void LineArcLeadIn_SetsLeadinLayerOnAllMoves() + { + var leadIn = new LineArcLeadIn { LineLength = 0.5, ArcRadius = 0.25, ApproachAngle = 135 }; + var codes = leadIn.Generate(Point, Normal); + Assert.All(codes.OfType(), m => Assert.Equal(LayerType.Leadin, m.Layer)); + Assert.All(codes.OfType(), m => Assert.Equal(LayerType.Leadin, m.Layer)); + } + + [Fact] + public void CleanHoleLeadIn_SetsLeadinLayerOnAllMoves() + { + var leadIn = new CleanHoleLeadIn { LineLength = 0.5, ArcRadius = 0.25, Kerf = 0.05 }; + var codes = leadIn.Generate(Point, Normal); + Assert.All(codes.OfType(), m => Assert.Equal(LayerType.Leadin, m.Layer)); + Assert.All(codes.OfType(), m => Assert.Equal(LayerType.Leadin, m.Layer)); + } + + [Fact] + public void LineLineLeadIn_SetsLeadinLayerOnAllMoves() + { + var leadIn = new LineLineLeadIn { Length1 = 0.5, Length2 = 0.3, ApproachAngle1 = 90, ApproachAngle2 = 90 }; + var codes = leadIn.Generate(Point, Normal); + Assert.All(codes.OfType(), m => Assert.Equal(LayerType.Leadin, m.Layer)); + } + + [Fact] + public void NoLeadIn_NoLinearOrArcMoves() + { + var leadIn = new NoLeadIn(); + var codes = leadIn.Generate(Point, Normal); + Assert.Empty(codes.OfType()); + Assert.Empty(codes.OfType()); + } + + [Fact] + public void LineLeadOut_SetsLeadoutLayer() + { + var leadOut = new LineLeadOut { Length = 0.5, ApproachAngle = 90 }; + var codes = leadOut.Generate(Point, Normal); + var linear = codes.OfType().Single(); + Assert.Equal(LayerType.Leadout, linear.Layer); + } + + [Fact] + public void ArcLeadOut_SetsLeadoutLayer() + { + var leadOut = new ArcLeadOut { Radius = 0.25 }; + var codes = leadOut.Generate(Point, Normal); + var arc = codes.OfType().Single(); + Assert.Equal(LayerType.Leadout, arc.Layer); + } + + [Fact] + public void NoLeadOut_ReturnsEmptyList() + { + var leadOut = new NoLeadOut(); + var codes = leadOut.Generate(Point, Normal); + Assert.Empty(codes); + } +}