using System.IO; using ACadSharp.Entities; using ACadSharp.IO; using Rozpisky.Dxf; using Rozpisky.Rendering; using Xunit; namespace Rozpisky.Tests; /// /// Oblique úhel textu (kurzíva náklonem, DXF group 51/50) – dřív se ignoroval a text /// se kreslil vzpřímeně. „SUDOP BRNO" má v DXF group 51 = 15° a group 41 (width) = 0,7. /// public class ObliqueTesty { [Fact] public void SudopBrno_TextNeseObliqueAWidthFactor() { var rec = new RecordingRenderer(); new DxfTemplate(TestData.Logo("sudopBrno.dxf")).Replay(rec); var t = Assert.Single(rec.Texts); Assert.Equal("SUDOP BRNO", t.Text); Assert.Equal(15.0, t.Style.ObliqueDeg, 2); // DXF group 51 = 15.0 Assert.Equal(0.7, t.WidthFactor, 3); } [Fact] public void OstatniLoga_MajiObliqueNula() { // Regrese: žádné jiné logo oblique nemá – nesmí se objevit nenulový sklon. foreach (var name in TestData.VsechnaLoga.Where(n => n != "sudopBrno.dxf")) { var rec = new RecordingRenderer(); new DxfTemplate(TestData.Logo(name)).Replay(rec); Assert.All(rec.Texts, t => Assert.Equal(0, t.Style.ObliqueDeg)); } } [Fact] public void DxfExport_ZachovaObliqueNaTextu() { var dxf = new DxfProfileRenderer(); dxf.Layer("0", 0x000000, 0.25); dxf.Text(10, 20, "Zkouška", 2.5, style: new TextStyle("Arial", ObliqueDeg: 3)); string path = Path.Combine(Path.GetTempPath(), $"rozpisky-oblique-{Guid.NewGuid():N}.dxf"); try { DxfWriter.Write(path, dxf.Document, binary: false); var doc = DxfReader.Read(path); var t = Assert.Single(doc.Entities.OfType()); Assert.Equal(3.0 * Math.PI / 180.0, t.ObliqueAngle, 6); } finally { File.Delete(path); } } }