fix: convert arc angles from radians to degrees in DrawingDxfExporter
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>
This commit is contained in:
@@ -59,5 +59,9 @@ public class DrawingDxfExporterTests
|
|||||||
var arcs = doc.Entities.OfType<ACadSharp.Entities.Arc>().ToList();
|
var arcs = doc.Entities.OfType<ACadSharp.Entities.Arc>().ToList();
|
||||||
Assert.Single(lines);
|
Assert.Single(lines);
|
||||||
Assert.Single(arcs);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using ACadSharp;
|
using ACadSharp;
|
||||||
using ACadSharp.IO;
|
using ACadSharp.IO;
|
||||||
using ACadSharp.Tables;
|
using ACadSharp.Tables;
|
||||||
using CSMath;
|
using CSMath;
|
||||||
@@ -77,8 +77,8 @@ public static class DrawingDxfExporter
|
|||||||
{
|
{
|
||||||
Center = ToXYZ(arcCenter),
|
Center = ToXYZ(arcCenter),
|
||||||
Radius = radius,
|
Radius = radius,
|
||||||
StartAngle = startAngle,
|
StartAngle = startAngle * (180.0 / Math.PI),
|
||||||
EndAngle = endAngle,
|
EndAngle = endAngle * (180.0 / Math.PI),
|
||||||
Layer = layer
|
Layer = layer
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -104,3 +104,4 @@ public static class DrawingDxfExporter
|
|||||||
|
|
||||||
private static XYZ ToXYZ(Vector v) => new XYZ(v.X, v.Y, 0);
|
private static XYZ ToXYZ(Vector v) => new XYZ(v.X, v.Y, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user