# Pokročilá 2D vektorová grafika

## Afinní transformace

- umožňuje nastavit, jak chceme transformovat kreslený objekt
- výsledná transformace se skládá z
	- posunutí (translace)
	- rotace okolo počátku souřadného systému
	- změna měřítka (scaling) na ose x či y
- záleží na pořadí jednotlivých transformací

**Instancování**
- model je definován na jednom místě
- můžeme jej použít víckrát na různých místech pomocí transformace

## Modelování objektů

- objekt nevzniká postupným vykreslováním primitiv, ale je definovaný předem
- popis objektu je uložen v paměti
- objekt modelován složením primitiv

**Cesta**
- trajektorie pera opisující obrys objektu
- může být **otevřená** nebo **uzavřená**
- zahájení cesty, přidání primitiv do cesty, ukončení cesty
- cesta může být definována po částech (primitivem může být jiná cesta)
+ složená z elementárních primitiv
+ podporovaná primitiva
	+ bod, úsečka, obdélník, oblouk, parametrické křivky, ...

**Region**
- obrysem regionu je uzavřená cesta
- region - uvažujeme vnitřek, nezajímá nás obryz
- uzavřená cesta - neuvažujeme vnitřek
+ obvyklé booleovské operace
	+ sloučení (union), průnik (intersection), rozdíl (subtraction), doplňek (XOR)
- podporovaná primitiva
	- obdélník, elipsa a kruh, polorovina, ...
+ používány pro ořezávání (clipping) a constructive area geometry (CAG)

**Ořezávání** (clipping)
- odstraní veškerou grafiku mimo ořezovou oblast (= region)
- zjednodušuje vykreslování složitějších tvarů
- může být výpočetně náročnější

## Formáty vektorové grafiky

- vektorovou grafiku lze obvykle uložit na disk nebo nahrát ze souboru

**Binární formáty**
- Windows Metafile (WMF), Enhanced Metafile (EMF), EMF+
- Portable Document Format (PDF)
- OpenDocument Graphics (ODG)
- Adobe Illustrator Artwork (AI)
- Encapsulated PostScript (EPS)
- CorelDraw (CDR)

**Textové formáty**
- Encapsulated PostScript (EPS)  
- Extensible Application Markup Language (XAML)  
- Scalable Vector Graphics (SVG)

Formáty je možné konvertovat, ale může to vést ke ztrátě informace.

**Ukládání vektorové grafiky**
- vytvoření grafického kontextu pro vektorový formát
- kreslení na grafický kontext
- uvolnění grafického kontextu a uzavření souboru
+ pro textové soubory se často používá vlastní zápis do souboru dle specifikace

**Načtení vektorové grafiky**
- různé v různých knihovnách
- u EMF vykonání grafických příkazů ze souboru
- u SVG přes speciální komponentu pro zobrazení na obrazovce (převede SVG na rastr)

**SVG formát**
- určeno na web (HTML5), postaveno na XML
- relativně hodně rozšířené
- možnost animované grafiky

**XAML formát**
- určeno pro .NET desktopové aplikace
- vytvořeno Microsoftem, postaveno nad XML
- relativně hodně rozšířené
- možnost animované grafiky
- součástí mohou být i jiné prvky než grafika
	- UI, napojení na databáze, data binding, ...

## Zobrazení na tiskárně

- papír nelze interaktivně posouvat
- musí se zobrazit celá kresba
+ je potřeba brát v potaz fyzickou velikost papíru (formát)
	- Evropa
		- **ISO 216 A, B, C**
		- Nejběžnější **A4**
			- 210 x 297 mm
	- USA
		- Nejběžnější **ANSI A** (Letter)
			- 8.5 x 11 palců
			- 216 x 297 mm
- většinou není možné kreslit na kraje papíru
	- minimálně 3 mm bílý okraj
- papír se může sešívat
+ knihovny většinou podporují
	+ dialog pro výběr tiskárny, formátu papíru, orientace, kvality, ...
		+ vrací vytvořený grafický kontext
	+ metody pro zahájení a dokončení tisku dokumentu nebo jedné strany