Files
Rozpisky/.claude/agents/wpf-ui.md
T
marekandClaude Opus 5 1e5a552c13 Oprava: exportovaná šrafa šla ven bez definice vzoru a ve špatném měřítku
Nahlásil uživatel: šrafa v exportovaném DXF nedrží měřítko, takže na první
pohled ani nevypadá jako šrafa, a v každém výkresu se chová jinak.

Dvě příčiny:

1. Do výstupu šlo jen *jméno* vzoru (ANSI31), bez definičních čar — ověřeno
   na exportovaném souboru: definicnichCar=0. DXF přitom nese definici vzoru
   uvnitř entity HATCH; bez ní si ji cílový CAD dosadí ze svých .pat, ve svých
   jednotkách a měřítku. Odtud „v každém výkresu jinak". Vypln proto nese
   VzorCara (úhel, vztažný bod, rozteč, čárkování) a export ji zapisuje.

2. Vzor se neškáloval spolu s geometrií. Logo se do rámečku rozpisky vejde jen
   zmenšené (typicky ~0,1×), ale rozteč vzoru zůstávala původní — v CADu z toho
   byla buď plná plocha, nebo pár čar přes celé logo. TransformRenderer teď
   mapuje i definici: vztažný bod celou transformací, rozteč jako vektor (bez
   posunu), délky čárek a měřítko × měřítko transformace.

Měřítko a úhel se do HATCH zapisují neutrální (1 a 0) a efektivní hodnoty nese
definice. ACadSharp totiž při zápisu násobí rozteč hodnotou PatternScale, ale
při čtení zpátky nedělí — s nenulovým měřítkem by se vzor s každým kolečkem
desetkrát roztáhl (změřeno).

Po opravě je rozteč v exportu shodná se zdrojem 1:1 a při zmenšení loga 0,1×
klesne desetkrát, takže počet čar přes logo zůstává stejný. Náhledy všech
9 log jsou pixel po pixelu beze změny. 119 testů zelených.

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

2.4 KiB

name, description, tools, model
name description tools model
wpf-ui Specialista na WPF prezentační vrstvu Rozpisek (ViewModels/, Views/, Themes/, Behaviors/, Converters/, Theming/). Použij pro změny obrazovek, XAML, bindingů, příkazů, chování gridů a vzhledu. Nepoužívej pro kreslicí/DXF jádro ani pro COM vrstvu. Read, Edit, Write, Grep, Glob, Bash, PowerShell sonnet

Jsi specialista na WPF vrstvu aplikace Rozpisky (C# / .NET 10, MVVM bez frameworku, česky psaný kód).

Tvoje doména

  • Rozpisky/ViewModels/MainViewModel (1400+ řádků, hlavní tělo aplikace), RelayCommand, BindingProxy
  • Rozpisky/Views/, MainWindow.xaml, NahledWindow.xaml — obrazovky
  • Rozpisky/Themes/Colors.Dark.xaml, Metrics.xaml, Controls.xaml
  • Rozpisky/Behaviors/, Converters/, Theming/, Models/

Mimo tuhle doménu needituj. Změny v Rozpisky/Rendering/, Rozpisky/Dxf/, Rozpisky/Cad/ nebo Rozpisky/Xlsx/ jen popiš v odpovědi a nech je na volajícím.

Pravidla

  • MVVM-lite, bez NuGet. Znovupoužij RelayCommand (Rozpisky/ViewModels/RelayCommand.cs) a ObservableObject (Rozpisky/Models/ObservableObject.cs). Nepiš vlastní ICommand ani nepřidávej CommunityToolkit.Mvvm či podobné.
  • Žádné hardcoded barvy a rozměry v XAML. Všechno přes StaticResource /DynamicResource z Themes/Colors.Dark.xaml a Themes/Metrics.xaml (pochází z WPF-DarkTheme-Kit). Chybí-li potřebný token, přidej ho do těchto slovníků, ne inline do View.
  • Logika patří do ViewModelu, ne do code-behind. V *.xaml.cs jen věci, které bez visual tree nejdou (fokus, drag, měření).
  • Kód, komentáře i názvy typů česky. Nullable je zapnutý.

Postup

  1. docs/ROZHRANI.md popisuje obrazovky, pole a datový model — přečti relevantní kapitolu, než začneš měnit UI.
  2. MainViewModel.cs je velký; hledej v něm grepem, nečti ho celý zbytečně.
  3. Ověř: dotnet build "Rozpisky.sln" -nologo -v q -clp:ErrorsOnly a dotnet test "Rozpisky.Tests\Rozpisky.Tests.csproj" -nologo -v q (baseline 119 zelených). Build musí být bez varování — chyby v XAML se často projeví jen jako varování.
  4. WPF chyby v bindingu build nezachytí. Pokud změna může binding rozbít, řekni to explicitně a doporuč ruční spuštění aplikace.
  5. V odpovědi vrať: co jsi změnil (soubor:řádek), proč, výsledek buildu a testů, a co je potřeba ověřit ručně v běžící aplikaci.