Programmeerimiskeele-sõltumatu graafikakeele realiseeriminie
Eesmärk on arendada välja võimalikult lihtne väljenduskeel
vektorgraafika kirjeldamiseks ning lihtsad ja efektiivsed programmid
selle teisendamiseks piltideks (PNG). Vastavat rakendust peab saama
edukalt rakendada veebigraafika tegemises, erinevatest
programmeerimiskeeltest graafika väljastamiseks, jne. Kasulik oleks teha
programmeerimiskeelte õppimiseks sobivaid näidisülesandeid.
Rakendusi
- Genereerida graafikat veebipõhistes rakendustes
- Deklaratiivselt "joonistada" pilte.
- Programmeerimisalaste õppematerjalide koostamine
- Programmi seest genereerida piltide kirjeldusi
Kuidas lahendada antud probleem?
- Võtta aluseks GD teek mis oskab teha PNG, JPEG, jt. formaate.
- Võtta malli programmist fly mis teisendab oma sisendkeele pildiks kasutades
sisemiselt GD teeke.
- Alustada lihtsatest meetoditest, kirjeldada sobiv keel (vrdl. fly)
- Moodustada efektiivne süntaksianalüsaator (C, kasuta GD)
- Moodustada efektiivne süntaksianalüsaator (perl, GD.pm); võrrelda kiirusi
- Kirjeldada joonisel olevaid elemente nimedega objektidena
- Näiteks puud, listid, objektide ühendamine joontega jne.
- "Kilpkonna-graafika"
- Graafide lay-out algoritmid
- Uurida arenevaid vektorgraafika formaate ja standardeid, peamiselt SVG. (Teha konverter oma formaadist SVG-sse.)
- Oluline on kirjeldava faili suurus (suurte piltide jaoks vaja lühikest kirjeldust)
- Objektidele võiks saada anda lisaomadusi - näiteks millised
tegevused oleks lubatud kui kasutaja veebis klikib vastava objekti
peale (server side imagemaps). Uurida tuleks kuidas seda saaks
siduda SVG formaadiga.
Projekti väljakutsed
Kiiruse huvides tuleks programmeerida keeles C. Oluline on kirjelduskeel
hoida lakoonilisena, et pilte saaks kirjeldada lühidalt. Oluline on
mõelda milliseid objekte saab kirjeldada ning kuidas neid objekte
efektiivselt kasutada.
Vaata fly dokumentatsiooni ja käske mida hetkel toetatakse:
fly, version 2.0.0
See http://martin.gleeson.com/fly/ for documentation.
Quick Reference to Directives:
new
size x,y
name filename
line x1,y1,x2,y2,R,G,B dline x1,y1,x2,y2,R,G,B
rect x1,y1,x2,y2,R,G,B frect x1,y1,x2,y2,R,G,B
square x,y,s,R,G,B fsquare x,y,s,R,G,B
poly R,G,B,x1,y1...,xn,yn fpoly R,G,B,x1,y1...,xn,yn
fill x,y,R,G,B filltoborder x,y,R1,G1,B1,R2,B2,G2
arc x1,y1,w,h,start,finish,R,G,B
ellipse x1,y1,w,h,R,G,B
circle x,y,d,R,G,B fcircle x,y,d,R,G,B
string R,G,B,x,y,,
stringup R,G,B,x,y,,
(size = tiny, small, medium, large or giant)
copy x,y,x1,y1,x2,y2,filename
copyresized x1,y1,x2,y2,dx1,dy1,dx2,dy2,filename
setpixel x,y,R,G,B
getpixel x,y
colourchange R1,G1,B1,R2,G2,B2
transparent R,G,B
interlace
setbrush filename killbrush
settile filename killtile
setstyle R1,G1,B1,R2,G2,B2,...,Rn,Bn,Gn killstyle
sizex
sizey
rotate deg
type gif|png|jpeg
quality n (image quality when type = jpeg. Must be in the range 0-95)
end
Käesoleva projekti juures tuleks arvestada uusi võimalusi ja vajadusi:
R,G,B asemel
- värv nimeliselt (black, purple, valge, roosa, jne)
- värv optsionaalseks: setcolor color (hoida kokku hiljem failis ruumi)
- HTML stiilis värv #rrggbb
Objektid:
circle x,y,r,color,n=name1,style
circle z,w,r,color,n=name2,style
connect name1,name2 # joonista kahe ringi vahele ühendav sirgjoon
tree:
tree(root (L1(L2,R2),R(..)))...)
[nodestyle]
[linestyle]
...
graph
n1: n2,n3,n4
n2: n5,
n3: n4
...
[layout style]
colormatrix [M x N][ colors = ]
(seletame töö käigus!)