feat: add SplitLine and SplitParameters models
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
17
OpenNest.Core/Splitting/SplitLine.cs
Normal file
17
OpenNest.Core/Splitting/SplitLine.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
namespace OpenNest;
|
||||
|
||||
/// <summary>
|
||||
/// Defines a split line at a position along an axis.
|
||||
/// For Vertical, Position is the X coordinate. For Horizontal, Position is the Y coordinate.
|
||||
/// </summary>
|
||||
public class SplitLine
|
||||
{
|
||||
public double Position { get; }
|
||||
public CutOffAxis Axis { get; }
|
||||
|
||||
public SplitLine(double position, CutOffAxis axis)
|
||||
{
|
||||
Position = position;
|
||||
Axis = axis;
|
||||
}
|
||||
}
|
||||
33
OpenNest.Core/Splitting/SplitParameters.cs
Normal file
33
OpenNest.Core/Splitting/SplitParameters.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
namespace OpenNest;
|
||||
|
||||
public enum SplitType
|
||||
{
|
||||
Straight,
|
||||
WeldGapTabs,
|
||||
SpikeGroove
|
||||
}
|
||||
|
||||
public class SplitParameters
|
||||
{
|
||||
public SplitType Type { get; set; } = SplitType.Straight;
|
||||
|
||||
// Tab parameters
|
||||
public double TabWidth { get; set; } = 1.0;
|
||||
public double TabHeight { get; set; } = 0.125;
|
||||
public int TabCount { get; set; } = 3;
|
||||
|
||||
// Spike/Groove parameters
|
||||
public double SpikeDepth { get; set; } = 0.5;
|
||||
public double SpikeAngle { get; set; } = 60.0; // degrees
|
||||
public int SpikePairCount { get; set; } = 2;
|
||||
|
||||
/// <summary>
|
||||
/// Max protrusion from the split edge (for auto-fit plate size calculation).
|
||||
/// </summary>
|
||||
public double FeatureOverhang => Type switch
|
||||
{
|
||||
SplitType.WeldGapTabs => TabHeight,
|
||||
SplitType.SpikeGroove => SpikeDepth,
|
||||
_ => 0
|
||||
};
|
||||
}
|
||||
31
OpenNest.Tests/Splitting/SplitLineTests.cs
Normal file
31
OpenNest.Tests/Splitting/SplitLineTests.cs
Normal file
@@ -0,0 +1,31 @@
|
||||
namespace OpenNest.Tests.Splitting;
|
||||
|
||||
public class SplitLineTests
|
||||
{
|
||||
[Fact]
|
||||
public void SplitLine_Vertical_StoresPositionAsX()
|
||||
{
|
||||
var line = new SplitLine(50.0, CutOffAxis.Vertical);
|
||||
Assert.Equal(50.0, line.Position);
|
||||
Assert.Equal(CutOffAxis.Vertical, line.Axis);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SplitLine_Horizontal_StoresPositionAsY()
|
||||
{
|
||||
var line = new SplitLine(30.0, CutOffAxis.Horizontal);
|
||||
Assert.Equal(30.0, line.Position);
|
||||
Assert.Equal(CutOffAxis.Horizontal, line.Axis);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SplitParameters_Defaults()
|
||||
{
|
||||
var p = new SplitParameters();
|
||||
Assert.Equal(SplitType.Straight, p.Type);
|
||||
Assert.Equal(3, p.TabCount);
|
||||
Assert.Equal(1.0, p.TabWidth);
|
||||
Assert.Equal(0.125, p.TabHeight);
|
||||
Assert.Equal(2, p.SpikePairCount);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user