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 'pen <skew-x> <skew-y>
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