Draw
Obšírnější informaci o DSL Draw lze nalézt v dokumentaci Redu, odkud jsou popisy příkazů převzaty. Součástí DSL Draw je sub-dialekt Shape.
Funkce draw se používá ke kreslení rovinných útvarů. Tyto útvary jsou vyjádřeny jako seznamy (block!) direktiv pro funkci draw.
Celkem 30 příkazů dialektu draw lze rozdělit do čtyř skupin:
- Kreslící instrukce: line, triangle, box, polygon, circle, ellipse, arc, curve, spline, image, text, font
- Vlastnosti čáry: line-width, line-join, line-cap, anti-alias, pen, fill-pen,
- Manipulace s objekty: push, rotate, scale, translate, skew, transform, clip
- Matice: matrix, matrix-order, reset-matrix, invert-matrix - viz
Souřadnicový systém
Kreslící instrukce
DRAW line
Nakreslí úsečku mezi dvěma body. Je-li zadáno více bodů, kreslí se další úsečky, napojované na předchozí.
Red [needs: view]
view [
base draw [line 60x10 10x60]
]
Red [needs: view]
view [
base draw [line 60x10 10x60 60x60 60x40]
]
DRAW triangle
Red [needs: view]
view [
base draw [triangle 10x10 50x50 50x10]
]
DRAW box
Red [needs: view]
view [
base draw [box 10x10 50x50]
; top-left bottom-right
]
se zaobleným rohem:
Red [needs: view]
view [
base draw [box 10x10 50x50 10]
; top-left bottom-right corner-radius
]
DRAW polygon
Red [needs: view]
view [
base draw [polygon 10x10 30x10 40x20 30x30 10x50]
; polygon se uzavře automaticky
]
DRAW circle
Red [needs: view]
view [
base draw [circle 40x40 30]
; center radius
]
elipsa příkazem circle:
Red [needs: view]
view [
base draw [circle 40x40 30 15 ]
; center radius-x radius-y
]
DRAW ellipse
Elipsa se kreslí do pomyslného obdélníku. Zadávají se jeho body top-left a bottom-right.
Red [needs: view]
view [
base draw [ellipse 10x10 20x50]
]
DRAW arc
Kreslí kruhový oblouk ze zadaného středu (pair!) a se zadanými poloměry (rovněž pair!). Oblouk je vymezen dvěma úhly ve stupních. První úhel se měří od nuly, druhý úhel od prvního. Lze použít klíčové slovo closed pro oblouk, uzavřený spojnicemi konců oblouků s jeho středem.
Red [needs: view]
view [
base draw [arc 40x40 20x20 45 180]
; center radius-x/radius-y start angle finish angle
base draw [arc 40x40 30x30 0 290]
base draw [arc 40x40 20x40 0 270]
base draw [arc 40x40 20x20 45 180 closed]
]
DRAW curve
Kreslí Bezierovu křivku ze 3 nebo 4 bodů:
- 3 body: 2 koncové, 1 kontrolní - kvadratická Bezierova křivka
- 4 body: 2 koncové, 2 kontrolní - kubická Bezierova. křivka
Red [needs: view]
view [
;nejprve si ukážeme samotné 4 body:
base draw [circle 10x60 1 circle 25x15 1 circle 40x15 1 circle 70x60 1]
;poté křivku ze 4 bodů: počáteční 1. kontrolní 2. kontrolní koncový:
base draw [curve 10x60 25x15 40x15 70x60]
;poté křivku ze 3 bodů: počáteční kontrolní koncový:
base draw [curve 10x60 25x15 70x60]
]
DRAW spline
Red [needs: view]
view [
;first we just show 4 points:
base draw [circle 10x60 1 circle 25x15 1 circle 40x15 1 circle 70x60 1]
;then the splines:
base draw [spline 10x60 25x15 40x15 70x60]
base draw [spline 10x60 25x15 40x15 70x60 closed]
]
DRAW image
Red [needs: view]
; image command expects a image! not a file!
; so you must first load the file
picture: load %smallballoon.jpeg
view [
base draw [image picture]
base draw [image picture 30x30]
base draw [image picture 30x30 70x70]
base draw [image picture crop 30x30 60x60]
base draw [image picture 5x5 crop 30x30 60x60]
]
There is also a color command (key color to be made transparent) and a border command, but I couldn't make those work yet.
;base draw [image picture 30x30 70x30 30x70 70x70]
;base draw [image picture 30x30 70x70 red]
;base draw [image picture 30x30 70x70 blue border]
DRAW text
Red [needs: view]
view [
base draw [text 40x40 "hello"]
]
DRAW font
Vyběr fontu pro zobrazení textu
native! Funkce compose
Draw neprovádí vyhodnocení výrazů. Následující skript evokuje chybové hlášení:
Red [needs: view]
view [
base draw [line 60x10 (2 * 10x30)]
]
Vyhodnotit výraz nám pomůže funkce compose, nejlépe s upřesněním /deep.
Red [needs: view]
view compose/deep [
base draw [line 60x10 (2 * 10x30)]
]