diff --git a/OpenNest.Core/CNC/CuttingStrategy/CuttingParameters.cs b/OpenNest.Core/CNC/CuttingStrategy/CuttingParameters.cs
index a48a7d8..0283348 100644
--- a/OpenNest.Core/CNC/CuttingStrategy/CuttingParameters.cs
+++ b/OpenNest.Core/CNC/CuttingStrategy/CuttingParameters.cs
@@ -23,6 +23,9 @@ namespace OpenNest.CNC.CuttingStrategy
public double PierceClearance { get; set; } = 0.0625;
+ public double AutoTabMinSize { get; set; }
+ public double AutoTabMaxSize { get; set; }
+
public Tab TabConfig { get; set; }
public bool TabsEnabled { get; set; }
diff --git a/OpenNest.Tests/CuttingStrategy/CuttingParametersSerializerTests.cs b/OpenNest.Tests/CuttingStrategy/CuttingParametersSerializerTests.cs
new file mode 100644
index 0000000..f6362f8
--- /dev/null
+++ b/OpenNest.Tests/CuttingStrategy/CuttingParametersSerializerTests.cs
@@ -0,0 +1,35 @@
+using OpenNest.CNC.CuttingStrategy;
+using OpenNest.Forms;
+
+namespace OpenNest.Tests.CuttingStrategy;
+
+public class CuttingParametersSerializerTests
+{
+ [Fact]
+ public void RoundTrip_PreservesAutoTabFields()
+ {
+ var original = new CuttingParameters
+ {
+ AutoTabMinSize = 0.5,
+ AutoTabMaxSize = 3.0,
+ ExternalLeadIn = new LineLeadIn { Length = 0.25, ApproachAngle = 90 }
+ };
+
+ var json = CuttingParametersSerializer.Serialize(original);
+ var restored = CuttingParametersSerializer.Deserialize(json);
+
+ Assert.Equal(0.5, restored.AutoTabMinSize);
+ Assert.Equal(3.0, restored.AutoTabMaxSize);
+ }
+
+ [Fact]
+ public void Deserialize_MissingAutoTabFields_DefaultsToZero()
+ {
+ var json = "{\"externalLeadIn\":{\"type\":\"None\"},\"externalLeadOut\":{\"type\":\"None\"},\"internalLeadIn\":{\"type\":\"None\"},\"internalLeadOut\":{\"type\":\"None\"},\"arcCircleLeadIn\":{\"type\":\"None\"},\"arcCircleLeadOut\":{\"type\":\"None\"},\"tabsEnabled\":false,\"tabWidth\":0.25,\"pierceClearance\":0.0625}";
+
+ var restored = CuttingParametersSerializer.Deserialize(json);
+
+ Assert.Equal(0.0, restored.AutoTabMinSize);
+ Assert.Equal(0.0, restored.AutoTabMaxSize);
+ }
+}
diff --git a/OpenNest.Tests/OpenNest.Tests.csproj b/OpenNest.Tests/OpenNest.Tests.csproj
index 4b2f7fa..bc484e8 100644
--- a/OpenNest.Tests/OpenNest.Tests.csproj
+++ b/OpenNest.Tests/OpenNest.Tests.csproj
@@ -27,6 +27,7 @@
+
diff --git a/OpenNest/Forms/CuttingParametersSerializer.cs b/OpenNest/Forms/CuttingParametersSerializer.cs
index 43f8ae4..04ce693 100644
--- a/OpenNest/Forms/CuttingParametersSerializer.cs
+++ b/OpenNest/Forms/CuttingParametersSerializer.cs
@@ -3,7 +3,7 @@ using System.Text.Json;
namespace OpenNest.Forms
{
- internal static class CuttingParametersSerializer
+ public static class CuttingParametersSerializer
{
private static readonly JsonSerializerOptions JsonOptions = new()
{
@@ -23,7 +23,9 @@ namespace OpenNest.Forms
ArcCircleLeadOut = ToLeadOutDto(p.ArcCircleLeadOut),
TabsEnabled = p.TabsEnabled,
TabWidth = p.TabConfig?.Size ?? 0.25,
- PierceClearance = p.PierceClearance
+ PierceClearance = p.PierceClearance,
+ AutoTabMinSize = p.AutoTabMinSize,
+ AutoTabMaxSize = p.AutoTabMaxSize
};
return JsonSerializer.Serialize(dto, JsonOptions);
}
@@ -44,7 +46,9 @@ namespace OpenNest.Forms
ArcCircleLeadOut = FromLeadOutDto(dto.ArcCircleLeadOut),
TabsEnabled = dto.TabsEnabled,
TabConfig = new NormalTab { Size = dto.TabWidth },
- PierceClearance = dto.PierceClearance
+ PierceClearance = dto.PierceClearance,
+ AutoTabMinSize = dto.AutoTabMinSize,
+ AutoTabMaxSize = dto.AutoTabMaxSize
};
}
@@ -109,6 +113,8 @@ namespace OpenNest.Forms
public bool TabsEnabled { get; set; }
public double TabWidth { get; set; }
public double PierceClearance { get; set; }
+ public double AutoTabMinSize { get; set; }
+ public double AutoTabMaxSize { get; set; }
}
private class LeadInDto