Files
marekandClaude Opus 5 a6377ab583 Baseline: současný stav projektu Rozpisky
První commit — WPF aplikace pro generování výkresových rohových razítek
(.NET 10, SkiaSharp, ACadSharp, ClosedXML) včetně xUnit testů, DXF šablony,
log a dokumentace. Build výstupy (bin/, obj/, .vs/) jsou ignorovány.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-07 09:45:49 +02:00

56 lines
2.3 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Rozpisky.Dxf;
using Rozpisky.Rendering;
using Xunit;
namespace Rozpisky.Tests;
/// <summary>
/// Bbox pro fit fragmentu (loga do placeholderu): dřív se text počítal jen jako vkládací bod,
/// takže textová loga mohla přetéct rámeček. Teď se bbox počítá replayem do BoundsRenderer.
/// </summary>
public class BoundsTesty
{
[Fact]
public void VsechnaLoga_MajiNeprazdneBounds()
{
foreach (var name in TestData.VsechnaLoga)
{
var tpl = new DxfTemplate(TestData.Logo(name));
Assert.True(tpl.Bounds is { W: > 0, H: > 0 }, $"{name}: Bounds = {tpl.Bounds}");
}
}
[Fact]
public void Bounds_ZahrnujiTextIVyplne()
{
// sprava_zeleznic: 2 texty + 2 SOLID šrafy. Bbox musí obsáhnout všechny smyčky výplní
// a být širší než samotné výplně (texty SPRÁVA/ŽELEZNIC vedle značky).
var tpl = new DxfTemplate(TestData.Logo("sprava_zeleznic.dxf"));
var rec = new RecordingRenderer();
tpl.Replay(rec);
var body = rec.Fills.SelectMany(f => f).SelectMany(l => l).ToList();
Assert.NotEmpty(body);
var b = tpl.Bounds!.Value;
Assert.True(body.All(p => p.X >= b.X - 1e-6 && p.X <= b.X + b.W + 1e-6
&& p.Y >= b.Y - 1e-6 && p.Y <= b.Y + b.H + 1e-6));
double vyplneW = body.Max(p => p.X) - body.Min(p => p.X);
Assert.True(b.W > vyplneW, $"bbox W={b.W:F2} nezahrnuje texty (výplně W={vyplneW:F2})");
}
[Fact]
public void BoundsRenderer_RespektujeZarovnaniTextu()
{
// Center/Right roste od kotvy doleva; Top dolů dřív box rostl vždy jen doprava nahoru.
var stred = new BoundsRenderer();
stred.Text(0, 0, "ABCD", 10, HAlign.Center, VAlign.Middle);
Assert.True(stred.MinX < 0 && stred.MaxX > 0, $"Center: {stred.MinX}..{stred.MaxX}");
Assert.True(stred.MinY < 0 && stred.MaxY > 0, $"Middle: {stred.MinY}..{stred.MaxY}");
var vpravo = new BoundsRenderer();
vpravo.Text(0, 0, "ABCD", 10, HAlign.Right, VAlign.Top);
Assert.True(vpravo.MinX < 0 && vpravo.MaxX <= 1e-9, $"Right: {vpravo.MinX}..{vpravo.MaxX}");
Assert.True(vpravo.MinY < 0 && vpravo.MaxY <= 1e-9, $"Top: {vpravo.MinY}..{vpravo.MaxY}");
}
}