# CAD-Viewer (Čeština)

[English](./README.md) | [简体中文](./README.zh-CN.md) | [日本語](./README.ja.md) | [한국어](./README.ko.md) | [Español](./README.es.md) | [Português](./README.pt.md) | [Русский](./README.ru.md) | [Čeština](./README.cs.md)

cad-viewer je `první webový prohlížeč a editor DXF/DWG na světě, který běží zcela v prohlížeči a nevyžaduje žádné backendové služby`.
Tím, že parsování DWG/DXF, zpracování geometrie a vykreslování probíhá přímo v prohlížeči, cad-viewer umožňuje skutečné bezserverové prohlížení a úpravy CAD — ideální pro cloudové aplikace, offline použití a pracovní postupy citlivé na soukromí.

Nabízí také něco, co u jiných CAD prohlížečů jen zřídka najdete — **export jedním kliknutím do jediného samostatného souboru HTML**. Stažený soubor `.html` obsahuje snímek výkresu a lehké běhové prostředí prohlížeče, takže příjemci mohou v jakémkoli moderním prohlížeči otevírat, posouvat, přibližovat, přepínat vrstvy a měřit vzdálenosti **bez CAD aplikace, bez serveru a bez instalace**. Většina desktopových i webových CAD prohlížečů umožňuje prohlížení pouze ve vlastním produktu; cad-viewer promění živý výkres v přenosný offline artefakt, který můžete poslat e-mailem, archivovat nebo umístit na statický souborový hosting — ideální pro sdílení s klienty, archivy pro compliance a izolovaná prostředí bez připojení k síti. Offline prohlížeč také spotřebovává výrazně méně paměti než tradiční desktopové nástroje při otevírání stejného výkresu (viz [porovnání paměti](#spotřeba-paměti-samostatného-html) níže).

- [**🌐 Živé demo**](https://mlightcad.github.io/cad-viewer/)
- **🌐 Dokumentace API**: [Read the Docs](https://cad-viewer.readthedocs.io/en/latest/) (verzovaná) · [GitHub Pages](https://mlightcad.github.io/cad-viewer/docs/) (nejnovější/dev)
- [**🌐 Wiki**](https://github.com/mlightcad/cad-viewer/wiki)
- X (Twitter): [@mlightcad](https://x.com/mlightcad)
- YouTube: [@mlightcad](https://www.youtube.com/@mlightcad)
- Medium: [@mlightcad](https://medium.com/@mlightcad)
- Juejin(稀土掘金): [@mlightcad](https://juejin.cn/column/7501992214283501579)

### Aplikace postavené na cad-viewer

Tým [Thingraph](https://cad.thingraph.site/) staví produkční prohlížeče DWG/DXF a integrace platforem na základě cad-viewer a obsluhuje desítky tisíc uživatelů po celém světě:

- [DWG Viewer Web App](https://cad.thingraph.site/dwg-viewer) — webový prohlížeč DWG/DXF využívaný inženýrskými týmy po celém světě pro rychlý, bezserverový přístup k výkresům. Instalace pro vaši platformu:
  - [Google Drive](https://workspace.google.com/marketplace/app/dwg_viewer/641533811831) — otevření DWG/DXF z Disku pomocí **Open with**
  - [VS Code](https://marketplace.visualstudio.com/items?itemName=thingraph.dwg-viewer) — vlastní editor pouze pro čtení souborů `.dwg` / `.dxf`
  - [Cursor](https://open-vsx.org/extension/thingraph/dwg-viewer) — stejné rozšíření přes Open VSX
  - [Confluence](https://marketplace.atlassian.com/apps/2890472615/dwg-viewer-for-confluence) — vložení náhledů DWG/DXF na stránky
  - [Windows Explorer](https://cad.thingraph.site/install/windows) — náhled a miniatury v Průzkumníku souborů

Komunitní aplikace a integrace:

- [flyfish-dev/cad-viewer](https://github.com/flyfish-dev/cad-viewer) — produkční webový CAD prohlížeč pro DWG, DXF, DWF, DWFx a XPS ([živé demo](https://cad-viewer-iys.pages.dev))
- [Nextcloud CAD Viewer](https://github.com/ashcoft/nextcloud-cad-viewer) — nativní aplikace Nextcloud pro prohlížení DWG/DXF v prohlížeči ([App Store](https://apps.nextcloud.com/apps/cad_viewer))

Komunitní desktopové balíčky pro Linux:

- [CAD Viewer AppImage](https://github.com/pass-wind/cad-viewer-appimage) — AppImage založená na Electronu pro Linux (~114 MB), testováno na Fedoře
- [cad-viewer (AUR)](https://aur.archlinux.org/packages/cad-viewer) — zdrojový balíček pro Arch Linux využívající systémový Electron (~5,4 MB)
- [cad-viewer-bin (AUR)](https://aur.archlinux.org/packages/cad-viewer-bin) — binární balíček pro Arch Linux se součástí fontů/šablon pro plně offline otevírání výkresů

![CAD-Viewer Quick Demo](./assets/cad-viewer.gif)

## Funkce

- **Vysoký výkon** — prohlížení rozsáhlých souborů DWG/DXF s plynulým vykreslováním 60+ FPS
- **Bez backendu** — soubory se parsují a zpracovávají zcela v prohlížeči
- **Vyšší bezpečnost dat** — soubory nikdy neopustí vaše zařízení, zajištění úplného soukromí
- **Snadná integrace** — není potřeba nastavení serveru ani backendové infrastruktury
- Modulární architektura pro bezproblémovou integraci třetích stran
- **Export do offline HTML** — export aktuálního výkresu jako jediného samostatného souboru `.html` s vloženým prohlížečem (posun/přiblížení, přizpůsobení zobrazení, vrstvy, měření vzdálenosti, UI EN/ZH). Otevírá se offline v jakémkoli prohlížeči; není vyžadována instance cad-viewer ani backend.
- Offline i online editační pracovní postupy
- 3D vykreslovací engine THREE.js s pokročilými optimalizačními technikami
- Navrženo pro rozšiřitelnost a integraci s platformami jako CMS, Notion a WeChat

## Začínáme

### Požadavky

- [Node.js](https://nodejs.org/) >= 24
- [pnpm](https://pnpm.io/) >= 10

### Instalace

```bash
git clone https://github.com/mlightcad/cad-viewer.git
cd cad-viewer
pnpm install
```

### Vývoj

```bash
# Spustit plnohodnotný prohlížeč (cad-viewer)
pnpm dev

# Nebo spustit jednoduchý prohlížeč
pnpm dev:simple
```

### Sestavení

```bash
pnpm build
```

### Náhled

```bash
# Náhled plnohodnotného prohlížeče
pnpm preview

# Náhled jednoduchého prohlížeče
pnpm preview:simple
```

## Jak používat

### Ovládání v desktopovém prohlížeči
- **Výběr**: levé tlačítko myši na entitách
- **Přiblížení/oddálení**: kolečko myši nahoru/dolů
- **Posun**: podržte prostřední tlačítko myši a táhněte
- **Smazání**: vyberte entity a stiskněte klávesu `Del`

### Ovládání v prohlížeči na tabletu/mobilu
- **Výběr**: klepněte na entity
- **Přiblížení**: stažení dvěma prsty
- **Posun**: tažení jedním prstem

## Systém pluginů

CAD-Viewer je postaven kolem modulárního **systému pluginů** v [`@mlightcad/cad-simple-viewer`](packages/cad-simple-viewer). Pluginy implementují rozhraní `AcApPlugin` a napojují se na životní cyklus prohlížeče přes `onLoad` / `onUnload` — typicky pro registraci příkazů, přidání UI nebo propojení exportních/importních pipeline.

Pluginy načítejte přes `AcApDocManager.instance.pluginManager` (`loadPlugin`, `registerLazyPlugin` nebo `plugins.fromConfig` při vytváření správce dokumentů). Exportně orientované pluginy podporují **lazy loading**: zaregistrujte malý stub předem a stáhněte těžký balíček až když uživatel spustí související příkaz (například `-chtml`, nebo při potvrzení exportu z dialogu `chtml` v `cad-viewer`).

Monorepo dodává několik oficiálních pluginů. Každý se zaměřuje na jednu oblast; kombinujte je podle potřeby. **Instalace, registrace a podrobnosti API jsou v README každého balíčku** — viz odkazy níže.

### Oficiální pluginy

| Package | Role | Příkazy / schopnosti |
|---------|------|-------------------------|
| [`@mlightcad/cad-simple-ui-plugin`](packages/cad-simple-ui-plugin) | **Panel nástrojů a správce vrstev** pro `cad-simple-viewer` (čisté DOM, bez Vue/React) | `layer`, výchozí panel nástrojů (zobrazení, měření, export, revize, motiv, jazyk) |
| [`@mlightcad/cad-agent-plugin`](packages/cad-agent-plugin) | **CAD agent v přirozeném jazyce** (AI chat panel + volání nástrojů pro výkres) | `agent` |
| [`@mlightcad/cad-html-plugin`](packages/cad-html-plugin) | Export výkresů do **samostatného offline HTML** | `chtml` (dialog v `cad-viewer`), `-chtml` (příkazová řádka) |
| [`@mlightcad/cad-pdf-plugin`](packages/cad-pdf-plugin) | **Export a import PDF** (vektorová pipeline) | `cpdf`, `ipdf` |
| [`@mlightcad/cad-svg-plugin`](packages/cad-svg-plugin) | **Export SVG** a sdílený vektorový renderer (používá se také u exportu PDF) | `csvg` |

### `@mlightcad/cad-simple-ui-plugin` — UI vrstva pro jednoduchý prohlížeč

[`cad-simple-viewer`](packages/cad-simple-viewer) záměrně **nedodává aplikační UI** — pouze plátno a CAD jádro. Pokud vkládáte jednoduchý prohlížeč do vlastní webové aplikace a chcete hotovou UI vrstvu bez plné Vue [`cad-viewer`](packages/cad-viewer) shell aplikace, **`cad-simple-ui-plugin` je určená UI vrstva**.

Poskytuje:

- **Konfigurovatelný panel nástrojů** (umístění na libovolném okraji, výchozí CAD příkazy, vnořená menu, vlastní položky)
- **Plovoucí správce vrstev** (zapnutí/vypnutí vrstvy, výběr barvy ACI, přiblížení na vrstvu dvojklikem)
- **Synchronizaci motivu** se sysvar `COLORTHEME` a CSS tokeny `--ml-ui-*` na hostitelském elementu
- **Synchronizaci jazyka** s `AcApI18n` (angličtina / čínština)

Všechny widgety jsou nezávislé na frameworku (čisté DOM). Plná Vue aplikace [`cad-viewer`](packages/cad-viewer) má vlastní Element Plus UI a tento plugin nevyžaduje; použijte `cad-simple-ui-plugin`, když stavíte přímo na `cad-simple-viewer`.

→ **Rychlý start, přizpůsobení panelu nástrojů a možnosti:** [packages/cad-simple-ui-plugin/README.md](packages/cad-simple-ui-plugin/README.md)

### `@mlightcad/cad-agent-plugin` — AI asistent pro výkresy

[`cad-agent-plugin`](packages/cad-agent-plugin) přidává **CAD agenta v přirozeném jazyce** do aplikací založených na `cad-simple-viewer`. Uživatelé popíší, co chtějí, běžnou řečí; agent volá CAD nástroje pro prohlížení výkresu a vytváření nebo úpravu geometrie.

Poskytuje:

- **Lazy-loaded** `AcApPlugin` (spouštěcí příkaz: `agent`), takže AI balíček není na kritické cestě
- **Vue chat panel** (`AgentChatPanel`) postavený na Vercel AI SDK (`Experimental_Agent` + `@ai-sdk/vue`)
- **Konfiguraci LLM v prohlížeči** — API klíče pro OpenAI, Anthropic nebo OpenAI-kompatibilní endpointy zůstávají v klientovi (šifrované v `localStorage`)
- **CAD nástroje fáze 1** — `get_drawing_context`; `draw_line`, `draw_circle`, `draw_arc`, `draw_rectangle`, `draw_polyline`, `draw_text`; `set_current_layer`, `create_layer`, `zoom_extents`
- **UI řetězce v angličtině / čínštině / turečtině / češtině** přes i18n vrstvu pluginu

Plná Vue aplikace [`cad-viewer`](packages/cad-viewer) registruje agenta automaticky, pokud je balíček nainstalován (záložka palety). [`cad-simple-viewer-example`](packages/cad-simple-viewer-example) ho propojuje do dock záložky přes `cad-simple-ui-plugin`. Hostitelské aplikace volají `registerLazyAgentPlugin` a `setAgentPaletteOpener` pro umístění panelu podle potřeby.

→ **Instalace, registrace a seznam nástrojů:** [packages/cad-agent-plugin/README.md](packages/cad-agent-plugin/README.md)

### Exportní pluginy (HTML / PDF / SVG)

Tyto pluginy přidávají exportní (a u PDF importní) příkazy do stejného správce pluginů. Jsou **lazy-loaded**, aby počáteční velikost stránky zůstala malá. Demo [`cad-simple-viewer-example`](packages/cad-simple-viewer-example) registruje všechny tři exportní pluginy, `cad-simple-ui-plugin` a `cad-agent-plugin`; plná aplikace [`cad-viewer`](packages/cad-viewer) registruje exportní pluginy a agent plugin (pokud je nainstalován) při bootstrapu.

- **HTML** — jednosouborový offline prohlížeč pro sdílení a archivaci: [packages/cad-html-plugin/README.md](packages/cad-html-plugin/README.md)  
  (Headless CLI používající stejnou pipeline: [packages/cad-html-exporter-cli/README.md](packages/cad-html-exporter-cli/README.md))
- **PDF** — vektorový export PDF a import PDF do CAD: [packages/cad-pdf-plugin/README.md](packages/cad-pdf-plugin/README.md)
- **SVG** — vektorový export SVG: [packages/cad-svg-plugin/README.md](packages/cad-svg-plugin/README.md)

#### Spotřeba paměti samostatného HTML

Při otevírání ukázkového výkresu [`canteen.dwg`](https://cdn.jsdelivr.net/gh/mlightcad/cad-data@main/data/canteen.dwg) je spotřeba paměti zhruba:

| Prohlížeč | Spotřeba paměti |
|--------|-------------|
| AutoCAD 2020 | 320 MB |
| GstarCAD Viewer (浩辰看图王) | 246 MB |
| Samostatné HTML (režim měření) | 56 MB |
| Samostatné HTML (režim prohlížení) | 33 MB |

Offline HTML prohlížeč spotřebovává přibližně o **83 % méně paměti než AutoCAD 2020** a v režimu prohlížení o **77 % méně než GstarCAD Viewer**, přičemž stále podporuje posun/přiblížení, přepínání vrstev a měření vzdálenosti (režim měření).

## Výkon

CAD-Viewer je navržen pro **výjimečný výkon** a zvládne velmi rozsáhlé soubory DXF/DWG při zachování vysoké snímkové frekvence. Využívá několik pokročilých vykreslovacích technologií pro optimalizaci výkonu:

- **Vlastní shader materiály**: GPU-akcelerované shader materiály pro efektivní vykreslování složitých typů čar a vzorů výplně šrafování
- **Dávkování geometrie**: slučování bodů, čar a ploch se stejným materiálem pro výrazné snížení počtu draw callů
- **Instancované vykreslování**: optimalizace vykreslování opakující se geometrie pomocí instancing technik
- **Optimalizace buffer geometrie**: efektivní správa paměti a slučování geometrie pro snížení GPU režie
- **Cache materiálů**: opakované použití materiálů u podobných entit pro minimalizaci změn stavu
- **WebGL optimalizace**: využití moderních WebGL funkcí pro hardwarově akcelerované vykreslování

Tyto optimalizace umožňují CAD-Viewer plynule vykreslovat složité CAD výkresy s tisíci entitami při zachování responzivní interakce s uživatelem.

## Známé problémy

Výchozí open-source cesta pro DWG je založena na [LibreDWG](https://github.com/LibreDWG/libredwg). Funguje dobře pro mnoho výkresů, ale pokrytí entit je stále omezené, WASM balíček je mnohem větší, spuštění je pomalejší, spotřeba paměti je vysoká a velmi rozsáhlé soubory DWG mohou skončit chybou nedostatku paměti. Také zavádí licenční aspekty GPL pro komerční produkty s uzavřeným zdrojovým kódem.

Pokud potřebujete lepší kompatibilitu, nižší spotřebu paměti, podporu velkých souborů nebo čistší komerční licenční model, podívejte se na náš [**vlastní parser DWG**](./PROPRIETARY-PARSER.md).

| Položka | Parser založený na LibreDWG | Vlastní parser DWG |
|------|------------------------|------------------------|
| Podporované entity | Omezené pokrytí | Širší pokrytí |
| Velikost balíčku | ~13 MB | ~437 KB |
| Rychlost načítání | Pomalejší spuštění | Výrazně rychlejší spuštění |
| Spotřeba paměti | Vyšší | Nižší |
| Velké soubory DWG | U velkých souborů může dojít k OOM | Žádný takový problém |
| Licence | Riziko šíření GPL | Bez rizika šíření GPL |

## Plán vývoje

Cílem tohoto projektu je vytvořit plnohodnotný **2D systém podobný AutoCADu v prohlížeči** (prohlížeč + editor) s modulární architekturou a integrací nezávislou na frameworku.

Legenda:
- [x] Dokončeno
- [ ] Plánováno
- [ ] ⏳ Probíhá

### Jádro souborů a datové vrstvy

#### Podpora souborů

* [x] Načítání DXF
* [x] Načítání DWG
* [x] Export do samostatného offline HTML (vložený prohlížeč)
* [x] Streamování / přírůstkové načítání velkých souborů
* [ ] ⏳ Kompatibilita verzí souborů (R12–Latest)

#### Datový model

* [x] Jednotný datový model entit
* [x] Podpora tabulky vrstev
* [x] Struktura bloků / vložení
* [ ] ⏳ Správa handle a object ID: v současnosti je objectId stejný jako handle a reprezentován jako jeden řetězec místo bigint (int64).
* [ ] ⏳ Podpora XData / rozšiřujícího slovníku
* [ ] Zpracování proxy entit

### Vykreslování a výkon

#### Vykreslovací engine

* [x] Vykreslování založené na WebGL (Three.js)
* [x] Pipeline optimalizovaná pouze pro 2D
* [x] Organizace scény podle vrstev
* [x] Vykreslování layoutu / papírového prostoru
* [ ] Podpora entit viewportu

#### Optimalizace výkonu

* [x] Slučování a dávkování geometrie
* [x] Prostorové indexování (základní)
* [x] Pokročilý prostorový index (R-tree / BVH)
* [ ] Vykreslování s úrovní detailu (LOD)
* [ ] Více pláten / dlaždicové vykreslování pro velmi rozsáhlé výkresy

### Prohlížení a navigace

#### Ovládání zobrazení

* [x] Posun
* [x] Přiblížení (kolečko / rámečkové přiblížení)
* [x] Přizpůsobení zobrazení / rozsah
* [ ] Pojmenovaná zobrazení
* [ ] Historie zobrazení (zpět / vpřed u změn zobrazení)

#### Ovládání zobrazení obsahu

* [x] Viditelnost vrstev zap/vyp
* [x] Zmrazení / uzamčení vrstev
* [x] Zobrazení tloušťky čar
* [ ] Měřítko typů čar
* [x] Přepínání pozadí / motivu

### Výběr a interakce

#### Výběr

* [x] Výběr jedné entity
* [x] Zvýraznění vybraných entit
* [x] Výběr oknem
* [x] Křížový výběr
* [x] Filtry výběru (podle typu / vrstvy)
* [x] Cyklický výběr

#### Přichycení (OSNAP)

* [x] Koncový bod
* [x] Střed
* [x] Střed kružnice
* [ ] Průsečík
* [ ] Kolmice / tečna
* [x] Nejbližší
* [ ] Sledování přichycení


### Úpravy a modifikace

#### Základní úpravy

* [x] Rámec pro úpravu entit
* [x] Posun
* [x] Kopírování
* [x] Otočení
* [ ] Měřítko
* [x] Smazání
* [x] Zpět / vpřed

#### Úpravy geometrie

* [x] Úchopové body
* [ ] Protažení
* [ ] Oříznutí
* [ ] Prodloužení
* [x] Odsazení
* [ ] Rozložení
* [ ] Spojení / zaoblení / zkosení (2D)

### Kreslení a nástroje pro tvorbu

#### Základní entity

* [x] Čára
* [x] Polyline
* [x] Spline
* [x] Kružnice
* [x] Oblouk
* [x] Elipsa
* [x] Obdélník / polygon

#### Pokročilé entity

* [x] Šrafování
* [ ] Text (jednořádkový / víceřádkový)
* [ ] Kóty (lineární, zarovnané, úhlové)
* [ ] Vytváření a vkládání bloků

### Měření

* [x] Vzdálenost
* [x] Délka oblouku
* [x] Plocha
* [x] Úhel
* [ ] Souřadnice
* [ ] Statistiky entit (délka, plocha, počet)

### Kóty

* [x] Lineární kóta
* [ ] Úhlová kóta
* [ ] Souřadnice

### Vlastnosti a UI panely

#### Paleta vlastností

* [x] Vlastnosti vybrané entity
* [ ] Úprava vrstvy, barvy, typu čáry
* [x] Živá aktualizace při změně

#### Panely a UI

* [x] Správce vrstev
* [ ] Správce bloků
* [x] Historie příkazů / konzole
* [x] Stavový řádek (přichycení, orto, mřížka)

#### Systém příkazů

* [x] Registr příkazů
* [x] Aliasy příkazů
* [x] Výzvy příkazů (ve stylu AutoCADu)

### Integrace a rozšiřitelnost

#### Integrace frameworků

* [x] Jádro nezávislé na frameworku
* [ ] Příklad integrace React
* [x] Příklad integrace Vue
* [ ] Integrace OpenLayers / Map
* [ ] Vkládání do CMS / Notion

#### Systém pluginů

* [x] Plugin API
* [ ] Podpora vlastních entit
* [x] Vlastní příkaz

### Offline a online úpravy

#### Offline editor

* [x] Lokální úpravy v prohlížeči
* [x] Uložení do DXF
* [ ] Uložení sady změn / diff
* [ ] Perzistence IndexedDB

#### Online editor

* [ ] Návrh backend API
* [ ] Autentizace uživatelů
* [ ] Verzování souborů
* [ ] Řízení přístupu pro více uživatelů
* [ ] Real-time spolupráce (budoucnost)

### Cílové platformy

* [ ] ⏳ Integrace Google Drive
* [ ] Prohlížeč pro WeChat Mini Program
* [ ] Podpora mobilního prohlížeče (pouze pro čtení)

### Dokumentace a komunita

* [x] Dokumentace architektury
* [x] Referenční dokumentace API
* [ ] Průvodce pro přispěvatele
* [x] Ukázkové projekty
* [x] Údržba plánu vývoje a changelogu

Tento plán vývoje je záměrně podrobný, aby přispěvatelé jasně viděli, **co existuje**, **co chybí** a **kde je potřeba pomoc**.

## Přispívání

Příspěvky jsou vítány! Otevírejte issue nebo pull requesty pro opravy chyb, nové funkce nebo návrhy. U hlášení chyb pomůže poskytnutí odkazu na problematický výkres při reprodukci a opravě problému.

## Licence

Monorepo cad-viewer je primárně licencováno pod [MIT](LICENSE).

Načítání DXF používá vestavěný MIT parser v `@mlightcad/data-model`. **Výchozí cesta pro načítání DWG** v `@mlightcad/cad-simple-viewer` závisí na balíčcích GPL-3.0 (`libredwg-web` / `@mlightcad/libredwg-converter`). Pokud dodáváte produkt s uzavřeným zdrojovým kódem a nemůžete zákazníkům distribuovat GPL kód, použijte místo toho [**vlastní parser DWG**](./PROPRIETARY-PARSER.md) — nahradí tento konvertor a zbytek stacku zůstane pouze pod MIT.

→ **Komerční parser:** [PROPRIETARY-PARSER.md](./PROPRIETARY-PARSER.md) (rozsah, licencování, ceny, integrace, soulad s GPL, podpora)
