diff --git a/OpenNest.Core/CNC/SubProgramCall.cs b/OpenNest.Core/CNC/SubProgramCall.cs index 0c9223a..647ac44 100644 --- a/OpenNest.Core/CNC/SubProgramCall.cs +++ b/OpenNest.Core/CNC/SubProgramCall.cs @@ -1,4 +1,5 @@ -using OpenNest.Geometry; +using System.Text; +using OpenNest.Geometry; using OpenNest.Math; namespace OpenNest.CNC @@ -90,9 +91,13 @@ namespace OpenNest.CNC public override string ToString() { + var sb = new StringBuilder(); + sb.Append($"G65 P{Id}"); if (Offset.X != 0 || Offset.Y != 0) - return string.Format("G65 P{0} X{1} Y{2}", Id, Offset.X, Offset.Y); - return string.Format("G65 P{0} R{1}", Id, Rotation); + sb.Append($" X{Offset.X} Y{Offset.Y}"); + if (Rotation != 0) + sb.Append($" R{Rotation}"); + return sb.ToString(); } } } diff --git a/OpenNest.Tests/CuttingStrategy/HoleSubProgramTests.cs b/OpenNest.Tests/CuttingStrategy/HoleSubProgramTests.cs index 6ade4cd..abeefb7 100644 --- a/OpenNest.Tests/CuttingStrategy/HoleSubProgramTests.cs +++ b/OpenNest.Tests/CuttingStrategy/HoleSubProgramTests.cs @@ -44,6 +44,25 @@ public class HoleSubProgramTests Assert.Contains("Y2.5", str); } + [Fact] + public void SubProgramCall_ToString_IncludesOffsetAndRotation() + { + var call = new SubProgramCall { Id = 1000, Offset = new Vector(1.5, 2.5), Rotation = 30 }; + var str = call.ToString(); + Assert.Contains("P1000", str); + Assert.Contains("X1.5", str); + Assert.Contains("Y2.5", str); + Assert.Contains("R30", str); + } + + [Fact] + public void SubProgramCall_ToString_OmitsZeroFields() + { + var call = new SubProgramCall { Id = 1000 }; + var str = call.ToString(); + Assert.Equal("G65 P1000", str); + } + [Fact] public void Program_SubPrograms_EmptyByDefault() {