GRAFICA ÎN BORLAND PASCAL 7.

0
A. Descrierea modului grafic În mediul Borland Pascal 7.0 calculatorul poate lucra în două moduri: text (mod în care ecranul are 80 de coloane şi 50 de linii) şi grafic (în care ecranul poate avea o rezoluţie de până la 640x480). Pentru a putea trece de la lucrul în mod text la cel grafic sunt necesare câteva precizări: - o anumită placă grafică poate lucra în mai multe moduri grafice şi fiecărui mod grafic îi corespunde un driver grafic specific. - iniţializarea unui mod grafic se realizează prin apelul procedurii InitGraph şi are forma: InitGraph(driver,mod_grafic,cale) unde: driver este o variabilă a cărei valori reprezintă codul unui driver grafic (fişier cu extenisia bgi în Pascal), mod_grafic este o variabilă a cărei valori reprezintă codul unui mod grafic (număr), cale este o expresie de tip string (calea către driver). - pentru a simplifica lucrurile, sfătuim programatorii să copieze fişierele următoare în folderul care conţine programul ce utilizează modul grafic: egavga.bgi (este driverul cu modul grafic ce are reyoluţia cea mai mare şi care se găseşte in bp\bgi) şi graph.tpu (este unit-ul care conţine subprogramele grafice şi care se gaseşte în bp\units). În continuare este descris un program care iniţializează modul grafic şi tipăreşte rezoluţia la care se va lucra şi numărul maxim de culori disponibile cu driverul egavga.bgi. Exemplu:
uses graph; var gd,gm:integer; s:string; begin gd:=detect; InitGraph(gd, gm,''); str(getmaxx+1,s); outtext(s); str(getmaxy+1,s); outtext(' '+s); str(getmaxcolor+1,s); outtext(' '+s); Readln;closegraph; end.

{detectează driverul disponibil} {iniţializează modul grafic cu driverul detectat} {determină numărul maxim de coloane ale ecranului} {tipăreşte pe ecran numărul transformat în string} {determină numărul maxim de linii ale ecranului} {tipăreşte pe ecran numărul transformat în string} {determină numărul maxim de culori care pot fi utilizate} {tipăreşte pe ecran numărul transformat în string}

Coordonatele unui punct de pe ecran, numit şi pixel, reprezintă coloana şi linia pe care acesta se situează, începând cu colţul din stânga sus al ecranului care are coordonatele 0,0. Configuraţia ecranului este dată de figura următoare: (0,0). coloană, linie (x,y)

(639,479)
1

TriplexFont. (valorile sunt: 0 pentru orizontal şi 1 pentru vertical sau HorizDir. Pentru a modifica o anumită culoare obiectele sau textele care se vor afişa pe ecran. {tipareste un sir de caractere specificat pe ecran} Readln. setcolor(4). 2 . closegraph. 2. end. Culorile sunt codificate cu ajutorul numerelor de la 0 la 15 în următoarea ordine: Black Blue Green Cyan Red Magenta 0 1 2 3 4 5 Brown LightGray DarkGray LightBlue LightGreen LightCyan 6 7 8 9 10 11 LightRed LightMagenta Yellow White 12 13 14 15 Pentru a modifica o anumită culoare pentru fondul ecranului. Culori Procedura InitGraph realizează iniţializarea paletei de culori.parametrul direcţie determină direcţia de afişare: orizontală sau verticală. 3.tpu. mărime) unde: . care implicit este negru se va utiliza procedura: SetBkColor(culoare) În locul parametrului culoare se poate specifica numărul asociat culorii sau numele culorii dorite. (valorile sunt: 0. Coordonatele ecranului din colţul din dreapta jos se pot obţine apelînd funcţiile GetMaxX şi GetMaxY. VertDir ) . var gd. gm. Texte Pentru stabilirea atributelor asociate textelor se utilizează procedura: SetTextStyle(tip_caractere. combinarea lor depinzând doar de imaginaţia programatorului. InitGraph(gd. care implicit sunt albe se va utiliza procedura: SetColor(culoare) Binenţeles că aceste setări se vor face înainte de a se desena sau scrie pe ecran. 1. SmallFont. outtext('Fond albastru .parametrul mărime determină dimensiunea caracterelor care se vor afişa (valorile sunt naturale). 4 sau DefaultFont. subprograme care vor fi descrise în continuare. begin gd:=detect.text rosu'). fără parametrii.gm:integer. direcţie. SansSerifFont. 2.parametrul tipcaractere determină tipul fontului care se va utiliza. Exemplu: uses graph. GothicFont) . Revenirea la modul video iniţial (adică modul text) se realizează prin apelul procedurii CloseGraph. setbkcolor(blue). 1.Din momentul în care modul grafic a fost iniţializat se poate utiliza orice subprogram din unitul graph.'').

y atunci va fi mutat la coordonatele x+dx. Pentru a muta cursorul pe ecran se vor utiliza procedurile: MoveTo(x. Desenarea efectivă a liniilor se poate face apelând trei proceduri: 3 . Exemplu: uses graph. outtextxy(100.50.y. outtextxy(50.chr din bp\bgi.1.culoare) Unde: x.y. begin gd:=detect.şir) Execută tipărirea textului (şir) începând de la coordonatele specificate x şi z. OutTextXY(x. end. Afişarea propriu-zisă a textelor se realizează cu ajutorul procedurilor: OutText(şir).dy) mută cursorul la coordonatele relative la poziţia curentă: adică dacă acesta se află la coordonatele x. CenterLn. readln.y) mută cursorul la coordonatele x. MoveRel(dx. outtext('Text vertical mic').1. settextstyle(1.'Text orizontal la 100.0. UserBitLn (Userdefined line style) caz în care se completează parametrul model cu un număr hexazecimal) .50').4).parametrul tip_linie caracterizează tipul liniei. (valorile sunt numerice între 0 şi 4 sau SolidLn. Execută tipărirea textului (şir) începând cu poziţia curentă a cursorului. grosime) Unde: . InitGraph(gd. closegraph.1). ThickWidth sau 3.''). gm.100').100. settextstyle(4.Pentru a se putea utiliza fonturi de tipuri diferite trebuie copiate în folderul în care se lucrează fişierele cu extensia .0. 3. Puncte şi segmente Pentru a desena puncte pe ecran se va folosi procedura: PutPixel(x. întreruptă sau nu.1).'Text vertical la 50.parametrul grosime care poate fi: NormWidth sau valoarea 1.y sunt coordonatele la care se va afişa punctul de culoarea specificată. outtext('Text orizontal mic').gm:integer. settextstyle(3.z+dy. model. Ca şi în cazul textelor şi la linii se poate stabili un stil de afişare folosind procedura: SetLineStyle(tip_linie.1). DashedLn.y. var gd. settextstyle(2. DottedLn.

unghi_final. raza_y reprezinta razele elipsei.Se apelează prin SetFillPattern(model_pers.rază_x. Desenarea liniilor frînte se realizează prin apelul procedurii: DrawPoly(n. 5)Sector –pt sector de elipsă .y. Procedurile care realizează desenarea contururilor figurilor cu culoarea şi haşura aleasă sunt: 1)Bar – desenează şi haşurează un dreptunghi.culoare). In cazul in care in vector prima pereche de coordonate coincide cu ultima atunci pe ecran se va desena un poligon.unghi_final reprezinta masura unghiurilor (in grade) de start si final din cercul trigonometric raza_x. y2 reprezinta coordonata coltului din drepta jos a dreptunghiului.y.y1. unghi_iniţial. rază_y). y reprezinta coordonatele de pe ecran pentru centrul cercului. Desenarea cercurilor se realizează prin apelul procedurii: Circle(x.rază_y).adîncime. vector_puncte este un vector cu elemente de tip PointType in care se depun coordonatele punctelor de pe ecran prin care va trece linia franta (ca si in exemplul de mai jos).y2). y reprezinta coordonatele de pe ecran pentru centrul arcului de cerc.culoare). Unde: x.prin Sector(x. Unde: x1.y.4. y. b. unghi_final. c. rază_x.vector_puncte) Unde: n este numărul de puncte care vor uni linia frîntă.vîrf). y reprezinta coordonatele de pe ecran pentru centrul elipsei sau arcului de elipsa. 2)Bar3D – pt paralelipiped – prin Bar3D(x1. unghi_iniţial.unghi_iniţial. Unde: x. 3)FillPoly – pt poligon – prin FillPoly(n.rază_y). Figuri geometrice hasurate Procedurile care realizează desenul şi haşurarea sunt: 1)SetFillStyle – se apelează prin SetFillStyle(model.x2.x2.unghi_final.rază). unghi_iniţial. 4 . Unde: x.rază).y1. 4)FillEllipse – pt elipsă . Desenarea arcelor de elipsă şi a elipselor se realizează prin apelul procedurii: Ellipse(x. Figuri geometrice curbe a. 5.x2.y2.prin FillEllipse(x. Desenarea dreptunghiurilor se realizează prin apelul procedurii Rectangle(x1.capac). iar raza reprezinta raza cercului care va fi desenat.y1.Desenarea arcelor de cerc se realizează prin apelul procedurii: Arc(x. b. 2)SetFillPattern – dacă se doreşte o haşură definită de utilizator. 6.unghi_final reprezinta masura unghiurilor (in grade) de start si final din cercul trigonometric raza reprezinta raza cercului din care face arcul de cerc. y1 reprezinta coordonata coltului din stanga sus a dreptunghiului iar X2.y2).rază_x. unghi_iniţial. se apelează prin Bar(x1. Figuri geometrice drepte a.y.

B.6)PieSlice – pt sector de cerc – prin PieSlice(x. Animaţie 2.8. Meniuri grafice 3.5. Aplicaţii grafice utile 1. 7)FloodFill – prin FloodFill(x. Desenarea figurilor geometrice haşurate 5 . Desenarea segmentelor de dreaptă 2.6. arcelor de cerc şi de elipsă 2. Desenarea cercurilor. rază). unghi_final.culoare_margine).y.9. y. Utilizarea mouse-lui 2.7. Schimbarea poziţiei punctului curent 2. unghi_iniţial. Desenarea liniilor frînte şi a poligoanelor 2.

numitor). care se proiectează şi se unesc prin segmente de dreaptă.2. Coordonatele care apar în procedurile următoare procedurii SetViewPort sunt coordonate relative la fereastra deschisă. iar imaginea de pe ecran îşI modifică toate culorile conform noii palete.12. Pagina asupra căreia acţionează la un moment dat procedurile grafice se numeşte pagină curentă.16. O suprafaţă poate fi dată şi izometric. 3)ştergerea imaginii afişate la pasul 1.O astfel de curbă aproximează o linie poligonală cu n vîrfuri.15.13. Reprezentarea grafică a suprafeţelor Ecuaţia unei suprafeţe este z=f(x. 2.y). Modificarea paletei de culori Există posibilitatea modificării paletei de culori în întregime sau selectiv: 1)Procedura SetAllPalette(paletă) modifică toată paleta. 2. 2. 6 . Oy.14. Desenarea suprafeţelor exprimate parametric se realizează la fel ca şi a celor date prin ecuaţii carteziene. Curbe Bspline parabolice pentru realizarea desenelor Curbele Bspline parabolice sunt curbe exprimate parametric prin funcţii foarte simple de gradul II. Procedura SetVisualPage(pagină) stabileşte pagina vizibilă. Oz. Afişarea textelor 2. Pentru reprezentarea suprafeţei se alege o reţea de puncte. Tehnici de animaţie Orice program de animaţie trebuie să cuprindă următorii paşi: 1)afişarea corpului sau a figurii. iar coordonatele absolute se obţin adunînd coordonatele originii ferestrei.cod_culoare) modifică numai valoarea din paletă a cărei indice este specificat la apel. se redesenează corpul cu culoarea fondului. 2)Procedura SetPalette(indice. care se numesc puncte de control ale curbei şi nu aparţin curbei. Cele mai rapide tehnici de animaţie sunt ultimele două. -se utilizează procedurile de manipulare a paginilor video. -se apelează procedura SetWriteMode. Ferestre de afişare O fereastră de afişare este o zonă dreptunghiulară în care se desenează procedurile apelate dupa executarea procedurii SetViewPort.10.11. Tehnici de animaţie:-pt ştergerea figurii. deoarece unităţile de măsură sunt aceleaşi pe cele trei axe: Ox.Proiecţia este izometrică. 4)modificarea poziţiei corpului sau figurii. 2. dar aspectul grafic este mai bun. 2. Raportul aspect – exprimă raportul dintre dimensiunea pe orizontală şi aceea pe verticală a unui pixel şi se poate cacula folosind procedura GetAspectRatio(numărător. Aceasta deschide o fereastră ce rămîne activă pînă la deschiderea unei noi ferestre. -se utilizează procedurile GetImage şi PutImage. 2)o pauză care să permită percepţia imaginii afişate.

Sign up to vote on this title
UsefulNot useful