Transformace v rovině
Popisy příkazů push, rotate, scale, translate, skew a transform jsou převzaty z dokumentace Redu.
DRAW push nutno doplnit
DRAW rotate
rotate <angle> <center> [<commands>]
rotate 'pen <angle> rotate 'fill-pen <angle>
<angle> : úhel ve stupních (integer! float!).
<center> : (optional) střed otáčení (pair!).
<commands> : (optional) příkazy dialektu Draw.
Nastaví pravotočivou rotaci ve stupních kolem daného bodu. Není-li zadán nepovinný parametr center, provede se rotace kolem počátku aktuálního souřadného systému. Negativní hodnoty lze použít pro levotočivou (counter-clockwise) rotaci. Je-li jako poslední argument zadán blok, aplikuje se rotace pouze na příkazy v bloku.
Při použití literálových slov (lit-words) 'pen nebo 'fill-pen se rotace aplikuje na aktuální pen nebo fill-pen.
Red [needs: view]
view [
base draw [
pen red
box 20x20 50x40 ; obdélník neotáčený
rotate 30 40x40 ; úhel otočení, střed otáčení
pen yellow
box 20x20 50x40 ; obdélník otáčený
] ]
DRAW scale
scale <scale-x> <scale-y> [<commands>]
scale 'pen <scale-x> <scale-y>
scale 'fill-pen <scale-x> <scale-y>
<scale-x> : měřítko pro osu X (number!).
<scale-y> : měřítko pro osu Y (number!).
<commands> : (optional) příkazy dialektu Draw.
Nastaví velikost zvětšení. Zadané hodnoty jsou násobitelé; hodnoty větší než jedna zvětšují, hodnoty menší než jedna zmenšují. Je-li jako poslední argument zadán blok, aplikuje se změna velikosti pouze na příkazy v bloku.
Při použití literálových slov (lit-words) 'pen nebo 'fill-pen se změna velikosti aplikuje na aktuální pen nebo fill-pen.
Red [needs: view]
view [
base draw [
pen red
box 20x20 50x40 ; obdélník nezvětšovaný
scale 1.3 1.3 ; zvětšení o30% v obou směrech
pen yellow
box 20x20 50x40 ; obdélník zvětšovaný
] ]
DRAW translate
translate <offset> [<commands>]
translate 'pen <offset>
translate 'fill-pen <offset>
<offset> : velikost posunu (pair!).
Nastaví počátek pro následné kreslicí příkazy. Víceré příkazy translate mají kumulativní účinek. Je-li blok zadán jako poslední argument, použijí se posuny pouze u příkazů z tohoto bloku.
Při použití literálových slov (lit-words) 'pen nebo 'fill-pen se posunutí aplikuje na aktuální pen nebo fill-pen.
Red [needs: view]
view [
base draw [
pen red
box 20x20 50x40 ; neposouvaný obdélník
translate 25x25
pen yellow
box 20x20 50x40 ; posouvaný obdélník
] ]
DRAW skew - zkosení
Zkosený souřadnicový systém je tehdy, když jeho osy nejsou ortogonální.
Příkaz skew natočí osu x nebo osu y o zadaný počet stupňů.
skew <skew-x> <skew-y> [<commands>]
skew 'fill-pen <skew-x> <skew-y>
<skew-x> : zkosení ve stupních ve směru x (integer! float!).
<skew-y> : (optional) totéž ve směru y (integer! float!)
<commands> : (optional) příkazy dialektu Draw
Nastaví zkosení souřadných os, zadané úhlem pootočení ve stupních. Není-li zadáno <skew-y>, předpokládá se, že je nulové. Je-li blok zadán jako poslední argument, použije se zkosení pouze u příkazů z tohoto bloku.
Při použití literálových slov (lit-words) 'pen nebo 'fill-pen se zkosení aplikuje na aktuální pen nebo fill-pen
Red [needs: view]
view [
base draw [
pen red
box 20x20 50x40 ; nezkosený obdélník
skew 30 ; zkosení 30° ve směru osy x
pen yellow
box 20x20 50x40 ; zkosený obdélník
]
base draw [
pen red
box 20x20 50x40 ; nezkosený obdélník
skew 30 30 ; zkosení 30° ve směru obou os
pen yellow
box 20x20 50x40 ; zkosený obdélník
] ]
DRAW transform
transform <center> <angle> <scale-x> <scale-y> <translation> [<commands>]
transform 'pen <center> <angle> <scale-x> <scale-y> <translation>
transform 'fill-pen <center> <angle> <scale-x> <scale-y> <translation>
<center> : (optional) střed rotace (pair!).
<angle> : úhel rotace ve stupních (integer! float!).
<scale-x> : měřítko pro osu X (number!).
<scale-y> : měřítko pro osu Y (number!).
<translation> : velikosti posunu (pair!).
<commands> : (optional) příkazy dialektu Draw.
Zadá transformaci jako je pootočení, změna velikosti (scaling) a posun jedním příkazem. Je-li blok zadán jako poslední argument, použije se transformace pouze u příkazů z tohoto bloku.
Při použití literálových slov (lit-words) 'pen nebo 'fill-pen se transformace aplikuje na aktuální pen nebo fill-pen.
Red [needs: view]
view [base draw [
pen red
box 20x20 50x40 ; netransformovaný obdélník
transform 25x25 45 1.2 1.2 0x20 ;střed rotace, úhel, měřítka, posuny
pen yellow
box 20x20 50x40 ; transformovaný obdélník
] ]
DRAW clip
Určuje pravoúhlý výřez definovaný dvěma body (start, end) nebo libovolně tvarovaný výřez, definovaný blokem příkazů sub-dialektu Shape. Takto určený výřez je platný pro všechny následné příkazy dialektu Draw. Je-li blok zadán jako poslední argument, použije se výřez pouze u příkazů z tohoto boku.
clip <start> <end> <mode> [<commands>]
clip [<shape>] <mode> [<commands>]
<start> : horní levý roh výřezu (pair!)
<end> : spodní pravý roh výřezu (pair!)
<mode> : (optional) způsob sloučení výřezů (word!)
<commands> : (optional) příkazy dialektu Draw
<shape> : příkazy dialektu Shape
Red [needs: view]
view [base draw [
clip 10x40 60x70
pen black
fill-pen red circle 15x40 30
fill-pen blue circle 30x40 30
fill-pen yellow circle 45x40 30
fill-pen cyan circle 60x40 30
fill-pen purple circle 75x40 30
]
Spojení nového výřezu se stávajícím může být zadán jako jeden z následujících způsobů:
- replace (default)
- intersect
- union
- xor
- exclude