ACadSharp Arc.StartAngle/EndAngle store values in degrees (DXF spec groups 50/51). The previous code passed Math.Atan2 results (radians) directly, causing silent geometry corruption. Also hardened the arc export test to assert angles are in degree range (0..360). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
68 lines
2.6 KiB
C#
68 lines
2.6 KiB
C#
using PepLib.Codes;
|
|
using PepLib.Enums;
|
|
using PepLib.Geometry;
|
|
using PepLib.IO;
|
|
using PepLib.Models;
|
|
using Xunit;
|
|
|
|
namespace PepLib.Core.Tests.IO;
|
|
|
|
public class DrawingDxfExporterTests
|
|
{
|
|
[Fact]
|
|
public void Export_RectangularLoop_ProducesFourLines()
|
|
{
|
|
// Arrange: a square 10x10 in incremental mode
|
|
var drawing = new Drawing();
|
|
drawing.Info = new DrawingInfo { Name = "TEST" };
|
|
var loop = new Loop { Name = "TEST.loop-000" };
|
|
// Mode defaults to Incremental in Loop constructor
|
|
loop.Add(new RapidMove(new Vector(0, 0))); // position at (0,0)
|
|
loop.Add(new LinearMove(new Vector(10, 0))); // → (10,0)
|
|
loop.Add(new LinearMove(new Vector(0, 10))); // → (10,10)
|
|
loop.Add(new LinearMove(new Vector(-10, 0))); // → (0,10)
|
|
loop.Add(new LinearMove(new Vector(0, -10))); // → (0,0)
|
|
drawing.Loops.Add(loop);
|
|
|
|
// Act
|
|
using var stream = DrawingDxfExporter.Export(drawing);
|
|
|
|
// Assert: stream is non-empty and contains 4 line entities
|
|
Assert.True(stream.Length > 0);
|
|
|
|
stream.Position = 0;
|
|
using var reader = new ACadSharp.IO.DxfReader(stream);
|
|
var doc = reader.Read();
|
|
var lines = doc.Entities.OfType<ACadSharp.Entities.Line>().ToList();
|
|
var arcs = doc.Entities.OfType<ACadSharp.Entities.Arc>().ToList();
|
|
Assert.Equal(4, lines.Count);
|
|
Assert.Empty(arcs);
|
|
}
|
|
|
|
[Fact]
|
|
public void Export_LoopWithArc_ProducesLineAndArc()
|
|
{
|
|
var drawing = new Drawing();
|
|
drawing.Info = new DrawingInfo { Name = "TEST" };
|
|
var loop = new Loop { Name = "TEST.loop-000" };
|
|
loop.Add(new RapidMove(new Vector(5, 0))); // start at (5,0)
|
|
loop.Add(new LinearMove(new Vector(5, 0))); // → (10,0)
|
|
loop.Add(new CircularMove(new Vector(-5, 5), new Vector(-5, 0), RotationType.CCW)); // arc: end=(5,5), center=(5,0)
|
|
drawing.Loops.Add(loop);
|
|
|
|
using var stream = DrawingDxfExporter.Export(drawing);
|
|
|
|
stream.Position = 0;
|
|
using var reader = new ACadSharp.IO.DxfReader(stream);
|
|
var doc = reader.Read();
|
|
var lines = doc.Entities.OfType<ACadSharp.Entities.Line>().ToList();
|
|
var arcs = doc.Entities.OfType<ACadSharp.Entities.Arc>().ToList();
|
|
Assert.Single(lines);
|
|
Assert.Single(arcs);
|
|
var arc = doc.Entities.OfType<ACadSharp.Entities.Arc>().Single();
|
|
// Angles must be in degrees (0..360), not radians (0..6.28)
|
|
Assert.InRange(arc.StartAngle, 0, 360);
|
|
Assert.InRange(arc.EndAngle, 0, 360);
|
|
}
|
|
}
|