feat: add Motion.Suppressed property to mark tab-gap codes

Adds Suppressed bool to the Motion base class so LinearMove, ArcMove,
and RapidMove can be flagged for skip during rendering and post-processing
when they fall within a tab gap. Clone() updated on all three subclasses
to preserve the flag. Covered by new MotionSuppressedTests.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-30 13:13:00 -04:00
parent 3d4204db7b
commit f903cbe18a
5 changed files with 55 additions and 3 deletions

View File

@@ -65,7 +65,8 @@ namespace OpenNest.CNC
{ {
return new ArcMove(EndPoint, CenterPoint, Rotation) return new ArcMove(EndPoint, CenterPoint, Rotation)
{ {
Layer = Layer Layer = Layer,
Suppressed = Suppressed
}; };
} }

View File

@@ -31,7 +31,8 @@ namespace OpenNest.CNC
{ {
return new LinearMove(EndPoint) return new LinearMove(EndPoint)
{ {
Layer = Layer Layer = Layer,
Suppressed = Suppressed
}; };
} }

View File

@@ -12,6 +12,8 @@ namespace OpenNest.CNC
public int Feedrate { get; set; } public int Feedrate { get; set; }
public bool Suppressed { get; set; }
protected Motion() protected Motion()
{ {
Feedrate = CNC.Feedrate.UseDefault; Feedrate = CNC.Feedrate.UseDefault;

View File

@@ -26,7 +26,10 @@ namespace OpenNest.CNC
public override ICode Clone() public override ICode Clone()
{ {
return new RapidMove(EndPoint); return new RapidMove(EndPoint)
{
Suppressed = Suppressed
};
} }
public override string ToString() public override string ToString()

View File

@@ -0,0 +1,45 @@
using OpenNest.CNC;
using OpenNest.Geometry;
namespace OpenNest.Tests;
public class MotionSuppressedTests
{
[Fact]
public void LinearMove_Suppressed_DefaultsFalse()
{
var move = new LinearMove(new Vector(1, 2));
Assert.False(move.Suppressed);
}
[Fact]
public void ArcMove_Suppressed_DefaultsFalse()
{
var move = new ArcMove(new Vector(1, 2), new Vector(0, 0));
Assert.False(move.Suppressed);
}
[Fact]
public void RapidMove_Suppressed_DefaultsFalse()
{
var move = new RapidMove(new Vector(1, 2));
Assert.False(move.Suppressed);
}
[Fact]
public void Suppressed_CanBeSet()
{
var move = new LinearMove(new Vector(1, 2));
move.Suppressed = true;
Assert.True(move.Suppressed);
}
[Fact]
public void Clone_PreservesSuppressed()
{
var move = new LinearMove(new Vector(1, 2));
move.Suppressed = true;
var clone = (LinearMove)move.Clone();
Assert.True(clone.Suppressed);
}
}