diff --git a/OpenNest.Core/CNC/CuttingStrategy/Tabs/BreakerTab.cs b/OpenNest.Core/CNC/CuttingStrategy/Tabs/BreakerTab.cs new file mode 100644 index 0000000..3921491 --- /dev/null +++ b/OpenNest.Core/CNC/CuttingStrategy/Tabs/BreakerTab.cs @@ -0,0 +1,34 @@ +using System.Collections.Generic; +using OpenNest.Geometry; + +namespace OpenNest.CNC.CuttingStrategy +{ + public class BreakerTab : Tab + { + public double BreakerDepth { get; set; } + public double BreakerLeadInLength { get; set; } + public double BreakerAngle { get; set; } + + public override List Generate( + Vector tabStartPoint, Vector tabEndPoint, double contourNormalAngle, + RotationType winding = RotationType.CW) + { + var codes = new List(); + + if (TabLeadOut != null) + codes.AddRange(TabLeadOut.Generate(tabStartPoint, contourNormalAngle, winding)); + + var scoreAngle = contourNormalAngle + System.Math.PI; + var scoreEnd = new Vector( + tabStartPoint.X + BreakerDepth * System.Math.Cos(scoreAngle), + tabStartPoint.Y + BreakerDepth * System.Math.Sin(scoreAngle)); + codes.Add(new LinearMove(scoreEnd)); + codes.Add(new RapidMove(tabEndPoint)); + + if (TabLeadIn != null) + codes.AddRange(TabLeadIn.Generate(tabEndPoint, contourNormalAngle, winding)); + + return codes; + } + } +} diff --git a/OpenNest.Core/CNC/CuttingStrategy/Tabs/MachineTab.cs b/OpenNest.Core/CNC/CuttingStrategy/Tabs/MachineTab.cs new file mode 100644 index 0000000..b6e5fbd --- /dev/null +++ b/OpenNest.Core/CNC/CuttingStrategy/Tabs/MachineTab.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; +using OpenNest.Geometry; + +namespace OpenNest.CNC.CuttingStrategy +{ + public class MachineTab : Tab + { + public int MachineTabId { get; set; } + + public override List Generate( + Vector tabStartPoint, Vector tabEndPoint, double contourNormalAngle, + RotationType winding = RotationType.CW) + { + return new List + { + new RapidMove(tabEndPoint) + }; + } + } +} diff --git a/OpenNest.Core/CNC/CuttingStrategy/Tabs/NormalTab.cs b/OpenNest.Core/CNC/CuttingStrategy/Tabs/NormalTab.cs new file mode 100644 index 0000000..de3e16c --- /dev/null +++ b/OpenNest.Core/CNC/CuttingStrategy/Tabs/NormalTab.cs @@ -0,0 +1,36 @@ +using System.Collections.Generic; +using OpenNest.Geometry; + +namespace OpenNest.CNC.CuttingStrategy +{ + public class NormalTab : Tab + { + public double CutoutMinWidth { get; set; } + public double CutoutMinHeight { get; set; } + public double CutoutMaxWidth { get; set; } + public double CutoutMaxHeight { get; set; } + + public override List Generate( + Vector tabStartPoint, Vector tabEndPoint, double contourNormalAngle, + RotationType winding = RotationType.CW) + { + var codes = new List(); + + if (TabLeadOut != null) + codes.AddRange(TabLeadOut.Generate(tabStartPoint, contourNormalAngle, winding)); + + codes.Add(new RapidMove(tabEndPoint)); + + if (TabLeadIn != null) + codes.AddRange(TabLeadIn.Generate(tabEndPoint, contourNormalAngle, winding)); + + return codes; + } + + public bool AppliesToCutout(double cutoutWidth, double cutoutHeight) + { + return cutoutWidth >= CutoutMinWidth && cutoutWidth <= CutoutMaxWidth + && cutoutHeight >= CutoutMinHeight && cutoutHeight <= CutoutMaxHeight; + } + } +} diff --git a/OpenNest.Core/CNC/CuttingStrategy/Tabs/Tab.cs b/OpenNest.Core/CNC/CuttingStrategy/Tabs/Tab.cs new file mode 100644 index 0000000..504eec5 --- /dev/null +++ b/OpenNest.Core/CNC/CuttingStrategy/Tabs/Tab.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; +using OpenNest.Geometry; + +namespace OpenNest.CNC.CuttingStrategy +{ + public abstract class Tab + { + public double Size { get; set; } = 0.03; + public LeadIn TabLeadIn { get; set; } + public LeadOut TabLeadOut { get; set; } + + public abstract List Generate( + Vector tabStartPoint, Vector tabEndPoint, double contourNormalAngle, + RotationType winding = RotationType.CW); + } +}