diff --git a/OpenNest.Data/MachineConfig.cs b/OpenNest.Data/MachineConfig.cs new file mode 100644 index 0000000..77abe8a --- /dev/null +++ b/OpenNest.Data/MachineConfig.cs @@ -0,0 +1,26 @@ +using OpenNest.Math; + +namespace OpenNest.Data; + +public class MachineConfig +{ + public Guid Id { get; set; } = Guid.NewGuid(); + public int SchemaVersion { get; set; } = 1; + public string Name { get; set; } = ""; + public MachineType Type { get; set; } = MachineType.Laser; + public UnitSystem Units { get; set; } = UnitSystem.Inches; + public List Materials { get; set; } = new(); + + public ThicknessConfig? GetParameters(string material, double thickness) + { + var mat = GetMaterial(material); + if (mat is null) return null; + return mat.Thicknesses.FirstOrDefault(t => t.Value.IsEqualTo(thickness)); + } + + public MaterialConfig? GetMaterial(string name) + { + return Materials.FirstOrDefault(m => + string.Equals(m.Name, name, StringComparison.OrdinalIgnoreCase)); + } +} diff --git a/OpenNest.Data/MachineSummary.cs b/OpenNest.Data/MachineSummary.cs new file mode 100644 index 0000000..f980bb0 --- /dev/null +++ b/OpenNest.Data/MachineSummary.cs @@ -0,0 +1,3 @@ +namespace OpenNest.Data; + +public record MachineSummary(Guid Id, string Name); diff --git a/OpenNest.Data/MaterialConfig.cs b/OpenNest.Data/MaterialConfig.cs new file mode 100644 index 0000000..cd0d960 --- /dev/null +++ b/OpenNest.Data/MaterialConfig.cs @@ -0,0 +1,9 @@ +namespace OpenNest.Data; + +public class MaterialConfig +{ + public string Name { get; set; } = ""; + public string Grade { get; set; } = ""; + public double Density { get; set; } + public List Thicknesses { get; set; } = new(); +} diff --git a/OpenNest.Data/OpenNest.Data.csproj b/OpenNest.Data/OpenNest.Data.csproj index 3a90a24..89538a0 100644 --- a/OpenNest.Data/OpenNest.Data.csproj +++ b/OpenNest.Data/OpenNest.Data.csproj @@ -3,6 +3,8 @@ net8.0-windows OpenNest.Data OpenNest.Data + enable + enable diff --git a/OpenNest.Tests/Data/MachineConfigTests.cs b/OpenNest.Tests/Data/MachineConfigTests.cs new file mode 100644 index 0000000..58194bd --- /dev/null +++ b/OpenNest.Tests/Data/MachineConfigTests.cs @@ -0,0 +1,131 @@ +using OpenNest.Data; + +namespace OpenNest.Tests.Data; + +public class MachineConfigTests +{ + private static MachineConfig CreateTestMachine() + { + return new MachineConfig + { + Id = Guid.NewGuid(), + Name = "Test Laser", + Type = MachineType.Laser, + Units = UnitSystem.Inches, + Materials = new List + { + new() + { + Name = "Mild Steel", + Grade = "A36", + Density = 0.2836, + Thicknesses = new List + { + new() + { + Value = 0.250, + Kerf = 0.012, + AssistGas = "O2", + LeadIn = new LeadConfig { Type = "Arc", Radius = 0.25 }, + LeadOut = new LeadConfig { Type = "Line", Length = 0.125 }, + PlateSizes = new List { "60x120", "48x96" } + }, + new() + { + Value = 0.500, + Kerf = 0.020, + AssistGas = "O2", + LeadIn = new LeadConfig { Type = "Arc", Radius = 0.375 }, + LeadOut = new LeadConfig { Type = "Line", Length = 0.25 }, + PlateSizes = new List { "60x120" } + } + } + }, + new() + { + Name = "Stainless Steel", + Grade = "304", + Density = 0.289, + Thicknesses = new List + { + new() + { + Value = 0.250, + Kerf = 0.014, + AssistGas = "N2" + } + } + } + } + }; + } + + [Fact] + public void GetParameters_ExactMatch_ReturnsThickness() + { + var machine = CreateTestMachine(); + var result = machine.GetParameters("Mild Steel", 0.250); + Assert.NotNull(result); + Assert.Equal(0.012, result.Kerf); + Assert.Equal("O2", result.AssistGas); + } + + [Fact] + public void GetParameters_WithinTolerance_ReturnsThickness() + { + var machine = CreateTestMachine(); + var result = machine.GetParameters("Mild Steel", 0.250001); + Assert.NotNull(result); + Assert.Equal(0.012, result.Kerf); + } + + [Fact] + public void GetParameters_NoMatch_ReturnsNull() + { + var machine = CreateTestMachine(); + var result = machine.GetParameters("Mild Steel", 0.375); + Assert.Null(result); + } + + [Fact] + public void GetParameters_CaseInsensitiveMaterial() + { + var machine = CreateTestMachine(); + var result = machine.GetParameters("mild steel", 0.250); + Assert.NotNull(result); + Assert.Equal(0.012, result.Kerf); + } + + [Fact] + public void GetParameters_UnknownMaterial_ReturnsNull() + { + var machine = CreateTestMachine(); + var result = machine.GetParameters("Titanium", 0.250); + Assert.Null(result); + } + + [Fact] + public void GetMaterial_ReturnsMaterialByName() + { + var machine = CreateTestMachine(); + var result = machine.GetMaterial("Stainless Steel"); + Assert.NotNull(result); + Assert.Equal("304", result.Grade); + } + + [Fact] + public void GetMaterial_CaseInsensitive() + { + var machine = CreateTestMachine(); + var result = machine.GetMaterial("stainless steel"); + Assert.NotNull(result); + } + + [Fact] + public void GetMaterial_NotFound_ReturnsNull() + { + var machine = CreateTestMachine(); + var result = machine.GetMaterial("Titanium"); + Assert.Null(result); + } +} diff --git a/OpenNest.Tests/OpenNest.Tests.csproj b/OpenNest.Tests/OpenNest.Tests.csproj index 6ffd66d..4b2f7fa 100644 --- a/OpenNest.Tests/OpenNest.Tests.csproj +++ b/OpenNest.Tests/OpenNest.Tests.csproj @@ -22,6 +22,7 @@ +