transform - metoda objektu CanvasCtx
Popis:
Nahradí současnou transformační matici jinou.
Syntaxe:
Object transform(Long a, Long b, Long c, Long d, Long e, Long f)
Parametry:
| a | (Long) (přednastaveno 1) Vodorovný poměr kreslení |
| b | (Long) (přednastaveno 0) Vodorovné zkosení kreslení |
| c | (Long) (přednastaveno 0) Svislé zkosení kreslení |
| d | (Long) (přednastaveno 1) Svislý poměr kreslení |
| e | (Long) (přednastaveno 0) Vodorovný posun kreslení |
| f | (Long) (přednastaveno 0) Svislý posun kreslení |
|---|
Poznámka:
Transformace umožňují mapovat pozice z jednoho souřadnicového systému do jiného. Umožňuje kreslení stejného tvaru do různě zvětšeného/zmenšeného, otočeného, posunutého, zrcadlově otočeného 2D prostoru. Je jednodušší transformovat souřadnice 2D prostoru než přepočítavat souřadnice všech objektů pro dosažení stejného efektu. Veškeré transformace pozic jsou definovány 6 měnitelnými hodnotami
a, b, c, d, e, f (z celkem 9) transformační matice pro 2D prostor. Výchozí hodnota netransformovaného 2D prostoru je
1, 0, 0, 1, 0, 0 (tzv. jednotková matice). Transformační matice je součástí kreslící plochy. Metody
save a
restore ukládají i tuto transformační matici.
Transformační metody
transform,
translate,
scale nebo
rotate ovlivňují některou (nebo všechny) hodnotu transformační matice.
Každá z těchto metod zachová platný aktuální stav transformační matice a do něj provede svojí změnu. To znamená, že změny jsou kumulativní a sčítají se.
Transformační metoda
setTransform naproti tomu
nejprve nastaví právě platnou transformační matici na výchozí hodnotu a nad ní provede transformaci transform. Jako jediná z transformačních metod umožňuje vynulovat kumulované transformace a nastavit novou transformaci bez kumulace.
Tato metoda je funkční i ve
Web obrazech.
Graficky znázorněné transformační příklady na wikimedia.org:
https://commons.wikimedia.org/wiki/File:2D_affine_transformation_matrix.svg
Příklad1:
Proměnná
ctx reprezentuje kreslící plochu (
CanvasCtx). Ta se nastaví v kartě "
Draw" na začátku skriptu kreslící události
onDraw následovně:
var ctx =
pEvent.
GetCtx(1);
JavaScriptVyber a zkopíruj do schránky
ctx.fillStyle = "yellow";
ctx.fillRect(0, 0, 250, 100);
ctx.transform(1, 0.5, -0.5, 1, 30, 10);
ctx.fillStyle = "red";
ctx.fillRect(0, 0, 250, 100);
ctx.transform(1, 0.5, -0.5, 1, 30, 10);
ctx.fillStyle = "blue";
ctx.fillRect(0, 0, 250, 100);
neobracet:
JavaScriptVyber a zkopíruj do schránky
ctx.transform(1, 0, 0, 1, 0, 0);
vlevo:
JavaScriptVyber a zkopíruj do schránky
ctx.transform(0, -1, 1, 0, 0, dy);
dolů:
JavaScriptVyber a zkopíruj do schránky
ctx.transform(-1, 0, 0, -1, dx, dy);
vpravo:
JavaScriptVyber a zkopíruj do schránky
ctx.transform(0, 1, -1, 0, dx, 0);
převrátit:
JavaScriptVyber a zkopíruj do schránky
ctx.transform(-1, 0, 0, 1, dx, 0);
vlevo a převrátit:
JavaScriptVyber a zkopíruj do schránky
ctx.transform(0, 1, 1, 0, 0, 0);
dolů a převrátit:
JavaScriptVyber a zkopíruj do schránky
ctx.transform(1, 0, 0, -1, 0, dy);
vpravo a převrátit:
JavaScriptVyber a zkopíruj do schránky
ctx.transform(0, -1, -1, 0, dx, dy);