GRAFIKA V PASCALe Popis grafickej obrazovky Základná grafická obrazovka (VGA) je tabuľka pozostávajúca zo 640 stĺpcov a 480 riadkov. Každá bunka tejto tabuľky je tvorená plôškou obdĺžnika a nazýva sa pixel. Pixel je základnou grafickou jednotkou a môžeme ho rozsvecovať rôznymi farbami. Celý pixel môže mať iba jednu farbu. Grafický kurzor - miesto kam ukazuje grafické pero - nie je viditeľné, ale počítač si jeho polohu pamätá a môžeme ho príkazmi presúvať po obrazovke. Stĺpce sú číslované od 0 po 639 a riadky sú číslované 0 po 479, pričom pixel s adresou 0,0 je úplne vľavo hore a posledná bunka s adresou x=639 a y=479 je úplne vpravo dole. Oproti geometrickej interpretácii roviny, ako ju poznáte z matematiky, pomocou osí x a y je tu os y orientovaná opačne (zhora nadol) čo spočiatku robí trochu problémy, ale časom si na to zvyknete.
Pripnutie grafickej knižnice ku programu Aby sme mohli používať príkazy týkajúce sa práce s grafickou obrazovkou je potrebné do prvého riadku deklaračnej časti programu umiestniť príkaz uses graph; Tento príkaz pripne graph.tpu ku programu a my môžme potom používať príkazy v ňom zadefinované ako napr. initgraph, line, circle, bar a pod.
Prepnutie sa do grafického režimu Na prepnutie obrazovky do grafického režimu slúži procedura initgraph(var graphdriver, grmode :integer; PathToDriver:string); ktorá sa pokúsi prepnúť režim na grafický podľa zadaných parametrov. Syntax Prvý parameter musí byť premenná, ktorá určuje ktorý grafický driver sa má ku práci s našou grafickou kartou použiť. Každý driver má koncovku bgi a sú obyčajne v adresári \bp\bgi. Je dôležité nastaviť správny driver, v prípade nesprávnej voľby sa grafika nenastaví a pri pokuse použiť ďalší grafický príkaz program skončí s chybou. Prípustné hodnoty parametra 0 ... túto hodnotu volíme, ak nevieme, aký driver použiť. Pomocou procedury detectGraph(var graphdriver, grmode :integer); ktorú si zavolá napomoc, sa program pokúsi zistiť s akým hardware má tú česť a podľa výsledku si sám nastaví do graphdriver a grmode správne hodnoty.
Druhý parameter vyžaduje premennú v ktorej je požadované grafické rozlíšenie . tento parameter nastaviť vždy na hodnotu 2. VGAHI ... 640x480 Tretí parameter musí obsahovať textový výraz, v ktorom bude zapísaná cesta ku požadovanému súboru na ovládanie gr. karty *.bgi. Obyčajne tam býva textová konštanta '\bp\bgi'. Sémantika Po úspešnom vykonaní príkazu je obrazovka prepnutá do grafického režimu, obrazovka je zotretá aktuálnou farbou pozadia (čiernou) a kurzor je na súradniciach (0,0).
1
Práca s bodmi Pre prácu s bodmi používame nasledovné príkazy: procedure putpixel(x,y:integer;color: word) ... na rozsvietenie bodu na obrazovke, function getpixel(x,y:integer): word ... na zistenie farby bodu na obrazovke Sémantika: putpixel položí na určené miesto obrazovky bod danej farby. Ak je určené okno pomocou príkazu setViewPort je výstup je výstup do tohto okna. getpixel vráti farbu bodu. Táto operácia je dosť pomalá a jej použitie sa tým obmedzuje. Farbu na zotretie nastavíme príkazom setbgcolor(farba:0..15).
Práca s farbami function getMaxColor:byte vráti číslo maximálnej farby. Používame farby 0..GetMaxColor. Farba číslo 0 je určená na pozadie 1..max sú na ľub. kreslenie. Farba 0 teda nie je čierna, ale je tam farba pozadia. procedure setcolor(farba:byte) používame na nastavenie farby krelených objektov (čiar, plôch). (Farba atramentu) procedure setbkcolor(farba:byte) zapíše parameter do farby číslo 0 a zmení pozadie celej obrazovky na požadovanú farbu. (Farba papiera - celej obrazovky) function getcolor:byte vráti aktuálnu farbu atramentu function getbkcolor:byte vráti aktuálnu farbu papiera Presúvanie grafického kurzora na obrazovke Nech grafický kurzor je na súradniciach aktuálneho okna (x,y) function GetX:integer - funkcia, ktorá vráti x súr. gr. kurzora function GetY:integer - funkcia, ktorá vráti y súr. gr. kurzora function GetMaxX:integer - funkcia, ktorá vráti maximálnu x súr. gr. kurzora function GetMaxY:integer - funkcia, ktorá vráti maximálnu y súr. gr. kurzora procedure MoveTO(x2,y2) presunie gr. kurzor bodu (x,y) do bodu (x2,y2) nemení obrazovku bod (x2,y2) by mali byť korektné súradnice aktuálneho okna Kreslenie čiar Príkazy na kreslenie Nech grafický kurzor je na súradniciach aktuálneho okna (x,y) 2
procedure line(x1,y1,x2,y2:integer) nakreslí úsečku z bodu (x1,y1) do bodu (x2,y2) určenou farbou nemení polohu grafického kurzoru body (x1,y1), (x2,y2) môžu ležať aj mimo obrazovky procedure lineTo(x2,y2:integer) nakreslí úsečku z bodu (x,y) do bodu (x2,y2) určenou farbou mení polohu grafického kurzoru do bodu (x2,y2) bod (x2,y2) môže ležať aj mimo obrazovky procedure Rectangle(x1,y1,x2,y2:integer) nakreslí obdĺžnik (x1,y1)=ľavý horný bod,(x2,y2)=pravý dolný bod nemení polohu grafického kurzoru body (x1,y1), (x2,y2) nemôžu ležať mimo obrazovky procedure DrawPoly(Pocet:word, var zoznam) procedúra má pospájať body, ktorých integer súradnice sú zapísané v premennej zoznam. Premenná zoznam je pole dvojíc integerov x,y. nakreslí lomenú čiaru, ak prvý bod je rovnaký ako posledný vznikne uzavretá lomená čiara nemení polohu grafického kurzoru všetky body musia ležať vnútri obrazovky procedure circle(x,y:integer;polomer:word) nakreslí kružnicu so stredom v bode (x,y) a polomerom polomer nemení polohu grafického kurzoru bod (x,y) môže ležať aj mimo obrazovky procedure arc(x,y:integer;zac,kon:word;polomer:word) nakreslí časť kružnice x,y ... stred kružnice zac,kon ... orientované uhly začiatku a konca kreslenia kružnice polomer ... polomer kružnice bod (x,y) môže ležať aj mimo obrazovky procedure ellipse(x,y:integer;zac,kon:word;xr,yr:word) nakreslí časť elipsy x,y ... stred elipsy zac,kon ... orientované uhly začiatku a konca kreslenia elipsy xr,yr ... dĺžky poloos elipsy bod (x,y) môže ležať aj mimo obrazovky
Príkazy na nastavenie vlastností kreslenia procedure setcolor(farba:byte) nastaví farbu atramentu do pera prípustné farby 0..getMaxColor procedure setlineStyle(styl,model,hrubka:word) styl - určí typ čiary, tu sú povolené konštanty SolidLn ... plná čiara DottedLn ... bodkovaná čiara CenterLn ... čiarko-čiarkovaná čiara DashedLn ... čiarkovaná čiara UserBitLn ... užívateľom definovaný typ čiary
3
model - len pre styl=4, inak je ignorovaný, 16 bitová konštanta - pixel svieti ak v dvojkovej sústave je 1 hrubka - určí hrúbku čiary, tu sú povolené konštanty: 1. NormWidth ... obyčajná čiara 3. DottedLn ... hrubá čiara procedure setWriteMode(režim:integer) - môžme voliť nasledovné režimy Copyput ... prepis každého pixla farbou čiary Xorput ... farba pixla bude určená výsledkom operácie xor medzi farbou pixla a farbou čiary
Kreslenie plôch Príkazy na kreslenie PieSlice(x,y:integer; zac,kon,polomer:word) Kreslí a vypĺňa kruhový výsek. Obrysy kreslí aktuálnou čiarou. x,y ... stred kružnice zac,kon ... orientované uhly začiatku a konca kreslenia kružnice polomer ... polomer kružnice bod (x,y) môže ležať aj mimo obrazovky procedure FillEllipse(x,y:integer; xr,yr:word) nakreslí a vyplní elipsu x,y ... stred elipsy xr,yr ... dĺžky poloos elipsy bod (x,y) môže ležať aj mimo obrazovky procedure Sector(x,y:integer;zac,kon:word;xr,yr:word) nakreslí a vyplní časť elipsy x,y ... stred elipsy zac,kon ... orientované uhly začiatku a konca kreslenia elipsy xr,yr ... dĺžky poloos elipsy bod (x,y) môže ležať aj mimo obrazovky Príkazy na vypĺňanie plôch procedure FloodFill(x,y:integer; farba:word) Vyplní z bodu x,y celú plochu aktuálnou výplňou až po hranicu určenú parametrom farba Príkazy na definovanie plôch procedure SetFillStyle(Vzorka,farba:word) Umožní zvoliť si z preddefinovaných vzoriek výplne a tiež voľbu farby. Vzorka môže mať hodnoty 0 12. Ak zvolíme číslo 12 ide o užívateľom definovanú vzorku popísanú príkazom setfillpatern. Farba určuje farbu šrafovacích čiar. 0 .. vypĺňa farbou pozadia 1 .. vypĺňa nastavenou farbou 2 .. vypĺňa vodorovnými čiarami --3 .. vypĺňa šikmými čiarami /// 4 .. vypĺňa silnými šikmýmí čiarami /// 5 .. vypĺňa silnými šikmýmí čiarami \\\ 4
6 .. vypĺňa šikmýmí čiarami \\\ 7 .. vypĺňa svetlým šrafovaním 8 .. vypĺňa krížikovým šrafovaním 9 .. vypĺňa prekladaným šrafovaním 10 .. vypĺňa bodkovaním riedkym 11 .. vypĺňa bodkovaním hustým 12 .. vypĺňa užívateľom zvoleným vzorkom Pozn. Okrem vzorky 1 je pozadie vzorky - okrem šrafovacích čiar - určené farbou pozadia obrazovky. procedure SetFillPattern(Vzorka:FillPatternType;farba:word) Nastaví užívateľskú vzorku a farbu. Aktívnou sa stane až príkazom setfillstyle. Typ FillPatternType je definovaný v knižnici graph a ide o pole 8-mych bajtov Písanie textu Príkazy na písanie textu Procedure OutText(retazec:string) Príkaz od aktuálneho kurzora zapíše daný reťazec aktuálnym typom písma a aktuálnou farbou. Procedure OutTextXY(x,y:integer; retazec:string) Príkaz od miesta obrazovky x,y zapíše daný reťazec aktuálnym typom písma a aktuálnou farbou. Nastavenie vlastností textu Procedure SetTextJustify(Horiz,vertikal :word) Príkaz určí spôsob zarovnania textu ku určenému bodu. 0 .. zarovnanie vlavo 1 .. zarovnanie na stred - centrovanie 2 .. zarovnanie sprava 0 .. zarovnanie na spodný okraj 2 .. zarovnanie na vrchný okraj
5