Files
Rozpisky/CLAUDE.md
T
marekandClaude Opus 5 10548b5698 Doku: kreslicí rozhraní po změnách, tabulka entit a známá omezení
ROZPISKY.md §3 popisuje nové rozhraní (KresliciStav, Vypln, rozšířený TextStyle)
a hlavně *proč* barva nese původ, ne jen RGB. Přibyla tabulka DXF entit, které
se čtou, a seznam známých omezení — inline kódy MTEXTu, zarovnání Aligned/Fit,
typy čar, dohledávání vzoru šrafy v CADu. Opraveno tvrzení, že tloušťka čáry je
jen Layer.LineWeight; zapisuje se i na entitu.

CLAUDE.md doplněno druhé pravidlo architektury: co má přežít cestu DXF → model
→ DXF, musí protéct rozhraním — obcházet ho zpátky na CadDocument šablony je
porušení toho prvního. Baseline testů 57 → 114 (i v subagentech).

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

85 lines
4.9 KiB
Markdown

# Rozpisky — pokyny pro Claude Code
WPF desktopová aplikace (.NET 10, `net10.0-windows`, AnyCPU) — generátor výkresových rohových
razítek („rozpisek") pro Správu železnic. Náhrada původního excelového nástroje „Rozpisky 1.0.8".
## Příkazy
```powershell
dotnet build "Rozpisky.sln" -nologo -v q -clp:ErrorsOnly
dotnet test "Rozpisky.Tests\Rozpisky.Tests.csproj" -nologo -v q
dotnet run --project "Rozpisky\Rozpisky.csproj"
```
Baseline: build bez chyb a varování, **114 testů zelených**. Před hlášením hotovo obojí spustit
(nebo použít `/overit`).
## Architektura — jediné pravidlo, které se nesmí porušit
Veškerá kresba jde přes jedno rozhraní [`IProfileRenderer`](Rozpisky/Rendering/IProfileRenderer.cs).
Tatáž kresba teče na obrazovku, do PNG, do PDF i do DXF. **Nový výstupní formát = nová implementace
`IProfileRenderer`, nikdy nový kreslicí kód.** Čtečka [`DxfTemplate`](Rozpisky/Dxf/DxfTemplate.cs)
jen čte DXF šablonu a „přehrává" ji do tohoto rozhraní.
Z toho plyne druhé pravidlo: **co má přežít cestu DXF → model → DXF, musí protéct rozhraním.**
Zdrojové soubory jsou zapsané indexovanými barvami AutoCADu, takže stav kresby
([`KresliciStav`](Rozpisky/Rendering/KresliciStav.cs)) nese barvu **i s původem** (ACI index /
true color / ByLayer / ByBlock), název textového stylu a vzor šrafy — ne jen výsledné RGB.
Nová vlastnost, kterou má export zachovat, patří do rozhraní; obcházet ho stranou (sáhnout
z rendereru zpátky na `CadDocument` šablony) je porušení prvního pravidla.
Podrobnosti (vrstvy, NuGet API, pravidla zápisu DXF, tabulka čtených entit a známá omezení) —
[`ROZPISKY.md`](docs/ROZPISKY.md). Nečíst celý, jen relevantní kapitolu.
## Konvence
- **Kód, komentáře, commity i názvy typů jsou česky** (`BoundsTesty`, `PlaceholderHladiny`,
`NajdiKoren`). Držet se toho, nepřejmenovávat do angličtiny.
- MVVM bez frameworku: znovupoužít [`RelayCommand`](Rozpisky/ViewModels/RelayCommand.cs)
a [`ObservableObject`](Rozpisky/Models/ObservableObject.cs) — nepsat vlastní ani nepřidávat
NuGet (CommunityToolkit apod.).
- XAML: barvy a rozměry **jen** z `Rozpisky/Themes/Colors.Dark.xaml` a `Metrics.xaml`
(WPF-DarkTheme-Kit). Žádné hardcoded `#RRGGBB` ani natvrdo zadané odsazení.
- `Nullable` a `ImplicitUsings` jsou zapnuté v obou projektech.
- COM (CAD, MS Excel) jde přes pozdní vazbu (`dynamic`) — nepřidávat interop assembly.
- Uživatelská data (číselníky, výběr CADu, logy) jdou přes
[`UzivatelskaData`](Rozpisky/Data/UzivatelskaData.cs) do `%APPDATA%\Rozpisky`. Do složky u `.exe`
se **nezapisuje** — může být jen pro čtení a přeinstalace ji přepíše. Číselníky navíc žijí ve dvou
vrstvách ([`CiselnikyStore`](Rozpisky/Data/CiselnikyStore.cs)) a loga ve dvou složkách
([`LogaResolver`](Rozpisky/Dxf/LogaResolver.cs)): dodávané + uživatelské navrch.
**Při konfliktu vyhrává uživatelská vrstva** — jinak by se jeho úprava tiše neprojevila.
Výjimka jsou data, která drží správnost výstupu (`mapovani.json`, `Rozpiska.dxf`) — tam vyhrává
program. Změnu slučování vždy pokrýt testem: chyba tam se projeví tichou ztrátou dat.
## Rozvržení složky — tři druhy podkladů
| Kde | Co to je |
|---|---|
| `docs/` | Podklady **jen pro tvorbu programu** — architektura, datový model, normativní manuál SŽ v `.md`. Nedodává se uživateli. |
| `Rozpisky/Podklady/` | Podklady **nutné k běhu** — kopírují se vedle `.exe` (plochá struktura + `loga\`, řídí `Link` v `.csproj`). Aplikace je **jen čte**. |
| `%APPDATA%\Rozpisky` | Podklady **vznikající za běhu** — vše, co píše uživatel. V repu nejsou a nemají tam co dělat. |
| `vzorky/` | Cizí vstupy pro ruční zkoušení (`schema.dxf`). Nedodává se. |
Nové dodávané datum = do `Rozpisky/Podklady/` **a** řádek v `.csproj` s `Link`, ať výstup
zůstane plochý. Nový zapisovaný soubor = přes `UzivatelskaData.Cesta(...)`, nikdy
`AppContext.BaseDirectory`.
## Kam nesahat
- `Rozpisky/Podklady/Rozpiska.dxf`, `vzorky/schema.dxf` — produkční DXF šablony.
- `Rozpisky/Podklady/loga/*.dxf` — dodávaná loga (9 ks, testy je renderují).
- `Rozpisky/Podklady/SEZNAM.xlsx` — mustr „Seznam příloh".
- `docs/SZ_SM011_P10_Manual_v6.md`, `Rozpisky/Podklady/SZ_SM011_P10_Manual_v6.pdf`
— normativní podklad SŽ, jen ke čtení.
## Delegování
Specializovaní subagenti v `.claude/agents/`: `render-dxf` (Rendering/, Dxf/), `wpf-ui`
(ViewModels/, Views/, Themes/), `verifikator` (read-only build + testy). Pro úkol spadající
celý do jedné z těchto domén je použít; drobnosti napříč vrstvami řešit v hlavním vlákně.
## Další dokumentace
[`ROZHRANI.md`](docs/ROZHRANI.md) — obrazovky, pole a datový model.
[`PODKLAD_CAD_Layout_Tisk.md`](docs/PODKLAD_CAD_Layout_Tisk.md) — CAD, layouty a tisk přes COM.