Sunteți pe pagina 1din 20

Elemente de grafica pe calculator

Laborator nr.2

Lucrarea nr. 2

Elemente de grafic n C#
1. Scopul lucrrii:
Lucrarea de fata i propune familiarizarea cu lucrul in mod grafic in limbajul C#:
fundamentele proiectrii grafice GDI, alegerea culorilor, tratarea erorilor, realizarea figurilor
grafice de baza.
2. Noiuni teoretice:

Microsoft Visual Studio .NET limbajul C#


Introducere
C# face parte, alturi de Java, dintr-o nou generaie de limbaje bazate pe paradigma
programrii orientate obiect. El permite programatorului s dezvolte n mod elegant aplicaii
complexe cu ajutorul unui set puternic de instrumente. n mediul de dezvoltare pentru C#
programatorul i poate alege obiectele care trebuie s fac parte din interfaa grafic cu
mouse-ul i apoi le poate deplasa n fereastr, astfel nct s extind interfaa n mod vizual i
nu numai prin cod. Nucleul acestei tehnologii este programarea bazat pe componente de
dimensiuni reduse, uor de construit i de folosit. Pe lng faptul c Visual Studio .NET este
ideal pentru crearea foarte rapid a unor aplicaii Windows, el permite de asemenea folosirea
tuturor trsturilor avansate ale limbajului C++, precum i a funciilor Windows API. Ca o
extensie a Visual Studio 6, este posibil i scrierea de cod MFC.
Clasele obiectelor din GUI au anumite funcii: meniu, timer, textbox, buton. Ele sunt
introduse pur i simplu n proiect i n continuare se folosesc metodele i proprietile lor, iar
comunicarea cu sistemul de operare Windows se realizeaz transparent pentru programator.
Aspectul general
Cnd este creat un nou proiect C# de tip Windows Application, apare o fereastr cu
toate caracteristicile setate implicit n Windows. n mijlocul ecranului, apare o form
(Form) fereastra principal a programului, n care se vor aduga diverse componente de
control: butoane, textbox-uri etc.:

Elemente de grafica pe calculator

Laborator nr.2

n partea din stnga a ecranului exist un toolbar (ViewToolbox, Ctrl+Alt+X) din care se
vor alege cu mouse-ul componentele ce vor fi adugate n fereastr.
Pentru adugarea unei componente, programatorul va face click cu mouse-ul pe
imaginea corespunztoare din toolbox, apoi va face click n form, n locul unde dorete s
apar componenta respectiv. Odat introduse n fereastr, componentele pot fi mutate,
redimensionate, copiate sau terse. n dreapta este o fereastr de proprieti (ViewProperties
Window, F4). De aici, fiecrei componente folosite i se pot modifica proprietile, adic
aspectul exterior, aa cum va aprea n program. De asemenea, se pot selecta evenimentele
corespunztoare componentei care vor fi tratate n program.

Clase uzuale pentru interfa


n continuare, vor fi prezentate cteva componente de control folosite practic n orice
program Windows. Pentru fiecare component, vor fi amintite unele proprieti i metode
uzuale. Pentru o descriere mai amnunit, se recomand consultarea Help-ului.
Application
Clasa Application ncapsuleaz o aplicaie Windows.
proprieti statice pentru managementul unei aplicaii, cum ar
oprirea programului, prelucrarea mesajelor Windows i
informaiilor despre aplicaie. Se poate observa c n scheletul
mediul de dezvoltare, n Main(), este pornit programul pe
ferestrei principale:
Application.Run(new Form1());
Form

Clasa nglobeaz metode i


fi metode pentru pornirea i
proprieti corespunztoare
de program creat implicit de
baza clasei corespunztoare

Elemente de grafica pe calculator

Laborator nr.2

Clasa System.Windows.Forms.Form corespunde unei ferestre standard. O aplicaie


poate avea mai multe ferestre una principal, cteva secundare i cteva ferestre de dialog.
Cteva proprieti:
9 Icon icon-ul care apare n bara de titlu a ferestrei
9 FormBorderStyle nfiarea i comportamentul border-ului (de exemplu, dac
fereastra poate fi redimensionat)
9 Text titlul ferestrei, care apare n bara de titlu i n taskbar
9 StartPosition locul unde apare fereastra pe ecran
9 Size dimensiunea (nlimea i limea ferestrei); de obicei se stabilete prin
redimensionarea ferestrei cu mouse-ul, n procesul de proiectare
Cteva evenimente:
9 Load, Closed pentru diverse iniializri n momentul crerii ferestrei sau prelucrri n
momentul nchiderii acesteia
n general, pentru tratarea unui eveniment n C#, este selectat mai nti obiectul de tipul dorit
(la noi fereastra), apoi n fereastra de proprieti se alege tab-ul de evenimente i se
identific evenimentul cutat.

Dup un dublu-click, ca n figura de mai sus, se va crea automat o nou funcie vid
corespunztoare evenimentului, iar utilizatorul va trebui numai s scrie n corpul funciei
aciunile dorite.

Clasa System.Windows.Forms.Button corespunde unei buton.


Cteva proprieti i evenimente:
9 Text textul nscris pe buton
9 Click funcia executat cnd butonul este apsat

Clasa System.Windows.Forms.Label nscrie un text undeva n fereastr.


Una din proprieti:
9 Text textul nscris

Elemente de grafica pe calculator

Laborator nr.2

Clasa System.Windows.Forms.TextBox corespunde unei csue de editare text.


Cteva proprieti i evenimente:
9 Text textul din editbox (de tip string, explicat mai jos)
9 Multiline textul poate fi introdus pe o singur linie (false) sau pe mai multe (true)
9 ScrollBars indic prezena unor bare de derulare (orizontale, verticale) dac
proprietatea Multiline este true
9 Enabled componenta este activat sau nu (true/false)
9 ReadOnly textul din editbox poate fi modificat sau nu de utilizator (true/false)
9 CharacterCasing textul poate aprea normal (Normal), numai cu litere mici (Lower)
sau numai cu litere mari (Upper)
9 TextChanged funcie de tratare a textului n timp real, pe msur ce acesta este
introdus.

Clasa System.Windows.Forms.ComboBox corespunde unui combo-box, care combin


un textbox cu o list.
Cteva proprieti i evenimente:
9 Text textul din partea de editare
9 Items lista de obiecte din partea de selecie, care se poate introduce i prin
intermediul ferestrei de proprieti
9 SelectedIndex numrul articolului din list care este selectat (0 primul, 1al
doilea, -1 dac textul din partea de editare nu este ales din list)
9 TextChanged, SelectedIndexChanged metode de tratare a schimbrii textului prin
introducerea direct a unui nou cuvnt sau prin alegerea unui obiect din list

Clasa System.Windows.Forms.MainMenu corespunde meniului unei ferestre. Mod de


folosire:
9 se introduce o component de acest tip n fereastr
9 se editeaz meniul, direct n fereastr sau folosind proprietile
9 pentru separatori se introduce n cmpul Caption un minus ( )
9 literele care se vor subliniate vor fi precedate de &
9 pentru implementarea metodei de tratare a unei opiuni din meniu se va face dubluclick pe aceasta (sau pe evenimentul Click n fereastra de proprieti).

Clasa System.Windows.Forms.Timer ncapsuleaz funciile de temporizare din


Windows API.
Cteva proprieti i evenimente:

Elemente de grafica pe calculator

Laborator nr.2

9 Interval intervalul de timp (n milisecunde) la care va fi executat o funcie


9 Enabled indic dac timer-ul e activat sau nu (true/false)
9 Tick evenimentul care va fi tratat o dat la un interval de timp

Grafic n C#
Pentru lucrul n mod grafic, C# pune la dispoziia programatorului o clas numit
Graphics. Spaiul de nume System.Drawing furnizeaz accesul la proprietile grafice GDI+
de baz pentru programatorii de C# n Windows. GDI+ permite utilizarea elementelor
sofisticate de grafic pentru jocuri i alte medii grafice bogate. Spaiul de nume
System.Drawing furnizeaz clase administrative care ncapsuleaz funcionalitatea noii
biblioteci grafice GDI+. Aici, obiectul Graphics ofer metode pentru a desena arce, elipse,
linii, puncte i chiar stringuri.
1. Clase grafice: furnizeaz metodele pentru desenare pe monitor.
NUME CLAS
Bitmap
Brush
Brushes
ColorConverter
ColorTranslator
Cursor
CursorConverter
Cursors
Font
FontConverter
FontFamily
Graphics
Icon
IconConverter
Image
ImageAnimator
ImageConverter
ImageFormatConverter
Pen
Pens
PointConverter
RectangleConverter
Region

SCOP
ncapsuleaz un bitmap GDI+.
De la aceast clas de baz sunt derivate clasele pentru definirea
obiectelor care pot fi folosite pentru a umple formele grafice
nchise. Formele pot fi elipse, poligoane, felii de plcint,
dreptunghiuri, etc.
Furnizeaz pensule pentru toate culorile standard.
Convertete o culoare de la un tip de date la altul.
Translateaz culorile la sau de la obiectele Color GDI+.
Reprezint imaginea cursorului.
Convertete cursorul de la un tip de date la altul.
Definete cursoarele standard.
Definete proprietile fonturilor pentru text. Acestea sunt aspectul
fontului, dimensiunea i atributele de stil.
Convertete fonturile de la un tip de date la altul.
Definete un grup de fonturi cu design similar i cu variaii minore
de stil.
ncapsuleaz o suprafa de desen GDI+.
Reprezint o pictogram.
Convertete o pictogram de la un tip de date la altul.
Furnizeaz funcionalitate pentru bitmap-uri, cursoare, pictograme
i metafiiere.
Suport animaia imaginilor.
Convertete o imagine de la un tip de date la altul.
Convertete culorile de la un tip de date la altul.
Definete proprietile peniei pentru desenarea obiectelor, cum ar
fi arce de cerc, linii, dreptunghiuri i multe altele.
Furnizeaz penie n toate culorile standard.
Convertete un punct de la un tip de date la altul.
Convertete un dreptunghi de la un tip de date la altul.
Descrie interiorul unei forme grafice compuse din dreptunghiuri i
ci.

Elemente de grafica pe calculator

Laborator nr.2

SizeConverter
SolidBrush

Convertete o dimensiune de la un tip de date la altul.


Definete o pensul de o singur culoare.
ncapsuleaz informaii despre layout-ul textului, cum ar fi
StringFormat
alinierea, spaiul dintre rnduri i alte trsturi.
Definete pensule pentru sistemul extins de culori specific
SystemBrushes
Windows.
Ofer acces la culorile sistemului extins specific
SystemColors
Windows.SystemPens i SystemBrushes sunt preferate fa de
SystemColors.
Definete obiectele pictogram pentru sistemul extins de
SystemIcons
pictograme specific Windows.
Definete penie pentru culorile selectate ale sistemului extins
SystemPens
specific Windows.
ncapsuleaz o pensul care utilizeaz o imagine pentru umplerea
TextureBrush
unei forme nchise.
ToolboxBitmapAttribute Definete imaginile utilizate cu o component specificat.
2. Structuri utilizate de clasele grafice:
STRUCTUR
Color
Point
PointF
Rectangle
RectangleF
Size
SizeF

SCOP
Definete o culoare ARGB.
Definete o pereche ordonat de coordonate x i y. Aceste
coordonate definesc un punct ntr-un plan bidimensional.
Definete o pereche ordonat de coordonate x i y n virgul mobil.
Aceste coordonate definesc, de asemenea, un punct ntr-un plan
bidimensional.
Stocheaz localizarea i dimensiunile pentru o regiune
dreptunghiular.
Stocheaz localizarea i dimensiunile pentru o regiune
dreptunghiular, definit prin valori n virgul mobil.
Definete dimensiunea unei regiuni dreptunghiulare, cu o pereche
ordonat de valori pentru lime i nlime.
Definete dimensiunea unei regiuni dreptunghiulare, cu o pereche
ordonat de valori n virgul mobil pentru lime i nlime.

3. Enumerrile folosite de clasele grafice:


ENUMERAREA
BrushStyle
ContentAlignment
FontStyle
GraphicsUnit
KnownColor
PenStyle
PolyFillMode
StringAlignment

SCOP
Furnizeaz o varietate de siluri pentru pensule.
Furnizeaz alinierea coninutului pe o suprafa de desen.
Furnizeaz informaii de stil pentru text.
Furnizeaz o unitate de msur pentru date.
Furnizeaz culorile sistemului.
Definete stilurile penielor.
Identific modul de umplere a poligoanelor formate din regiunile de
suprapunere.
Furnizeaz alinierea unui string text n raport cu dreptunghiul de
layout.

Elemente de grafica pe calculator

StringDigitSubstitute
StringFomatFlags
StringTrimming
StringUnit

Laborator nr.2

Furnizeaz informaii asupra stilului aplicat la String Digit


Substitute.
Furnizeaz informaiile de afiare i layout pentru stringul text.
nltur caracterele dintr-un string cnd acesta nu ncape n layout.
Furnizeaz unitile de msur pentru un string text.

Exist i clase tot att de puternice ca i cele furnizate de spaiul de nume


System.Drawing pentru suportul GDI+ al capabilitilor grafice i care nu sunt furnizate de
acest spaiu de nume. Accesarea acestor clase este oferit de spaiul de nume
System.Drawing.Drawing2D. Acesta furnizeaz 2 funcionaliti avansate de grafic
bidimensional i vectorial pentru GDI+.
Clasa Graphics pentru C#
Aceast clas se ntrebuineaz pentru ncapsularea unei suprafee de desen GDI+. n
plus, furnizeaz o arie cuprinztoare de metode i accesorii, numite primite de desen GDI+.
Prin folosirea metodelor ca DrawLine, FillPie i multe altele, poate s fie desenat pe un
control sau un formular o imagine de aproape orice form grafic. n cele mai multe dintre
aplicaiile Windows scrise n C#, metoda OnPaint() va fi suprascris, n scopul de a permite
funcionarea diverselor clase grafice. De exemplu, urmtoarea poriune de cod ndeplinete
aceast sarcin. Poriunea de cod prezentat cu un font accentuat este direct legat de
suprascrierea metodei.
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
Brush redbrush = new SolidBrush(Color.Red);
Font ArialFont = new Font(Arial,14);
string test = Aceasta este prima aplicatie de grafica in C#;
string antet = Laborator: Elemente de grafica pe calculator!;
g.DrawString(antet, ArialFont, redbrush, 25, 5);
g.DrawString(test, ArialFont, redbrush, 25, 35);
}
n acest caz, clasa PaintEventArgs conine informaiile despre evenimentul Paint. Un
eveniment Paint este declanat ori de cte ori se schimb afiajul vizual al controlului sau
formularului. Cnd se ntmpl asta, este expediat un apel sau un mesaj pentru control sau
formular ctre metoda OnPaint.
4. Metode comune disponibile pentru desen i destinaia utilizrii n cadrul caselor
grafice:
METODA
FromHDC
FromHWND

DESTINAIA
Furnizeaz o nou instan a clasei grafice, folosind o administrare
pentru contextul dispozitivului (HDC Handle to the Device
Context).
Furnizeaz o nou instan a clasei grafice,folosind o administrare

Elemente de grafica pe calculator

FromImage
GetHalftonePalette

Laborator nr.2

pentru fereastr (HWND Handle to the Window).


Genereaz o instan a unei clase grafice, folosind o imagine
existent.
Livreaz o palet n semiton (halftone).

5. Metode cu instane publice. Tabelul conine cea mai mare parte a primitivelor de
desen utilizate pentru crearea arcurilor de cerc, a liniilor, a elipselor, a
dreptunghiurilor, .a.m.d.
METODA
AddMetafileComment
BeginContainer
Clear
Dispose
DrawArc
DrawBezier
DrawBeziers
DrawClosedCurve
DrawCurve
DrawEllipse
DrawIcon
DrawIconUnstretched
DrawImage
DrawImageUnscaled
DrawLine
DrawLines
DrawPath
DrawPie
DrawPolygon
DrawRectangle
DrawRectangles
DrawString
EndContainer
EnumerateMetafile
Equals
(motenit de la Object)
ExcludeClip
FillClosedCurve
FillEllipse
FillPath

SCOP
Copiaz comentariul dintr-un buffer ntr-un metafiier cu format
mbuntit.
Furnizeaz nceputul unui container de metafiier.
Cur aria prin umplerea suprafeei de desen cu o culoare dat.
terge grafica i elibereaz memoria alocat.
Traseaz un arc de la o specificaie de elips dat.
Traseaz o curb cubic Bezier.
Traseaz o serie de curbe cubice Beziers.
Traseaz o curb nchis. O matrice de curbe definete curba.
Traseaz o curb. Curba este definit printr-o matrice de puncte.
Traseaz o elips.
Traseaz o imagine iconic.
Traseaz o imagine iconic. Aceast metod alungete imaginea la
dimensiunile date, permind utilizatorului s furnizeze un
dreptunghi drept cadru al imaginii de desenat.
Traseaz o imagine.
Traseaz o imagine. Aceast metod alungete imaginea la
dimensiunile date, permind utilizatorului s furnizeze un
dreptunghi drept cadru al imaginii de desenat.
Traseaz o linie.
Traseaz o serie de segmente de dreapt. Segmentele se
conecteaz ntr-un tablou de puncte.
Traseaz linii i curbe definite printr-un GraphicsPath.
Traseaz conturul unei felii de plcint (pie section).
Traseaz conturul unui poligon.
Traseaz conturul unui dreptunghi.
Traseaz conturul unei serii de dreptunghi.
Traseaz un string.
Furnizeaz sfritul unui container de metafiier.
Enumereaz un fiier.
Afl dac obiectul utilizat reprezint aceeai instan ca i obiectul
curent.
Specific regiunea decupat pentru excludere.
Umple interiorul unei curbe nchise specificate printr-un tablou de
puncte.
Umple interiorul unei elipse specificate printr-un dreptunghi
mrginitor.
Umple interiorul unei ci.

Elemente de grafica pe calculator

Laborator nr.2

FillPie
FillPolygon
FillRectangle
FillRectangles
FillRegion
Flush

Umple interiorul unei felii de plcint.


Umple interiorul unui poligon specificat cu un tablou de puncte.
Umple interiorul unui dreptunghi cu o pensul.
Umple interiorul unei serii de dreptunghiuri cu o pensul.
Umple interiorul unei regiuni.
Execut toate operaiile aflate curent pe stiv.
Acioneaz ca o funcie Hash pentru un tip particular. Poate fi
GetHashCode
utilizat n hashing de algoritmi ca tabel de hash.
Obine administrarea pentru contextul dispozitivului (DC Device
GetHDC
Context) asociat cu clasa grafic.
Returneaz un obiect lifetime service n scopul de a controla
GetLifetimeService
gestionarea timpului de funcionare.
Gsete culoarea solid care se potrivete cel mai bine la o culoare
GetNearestColor
logic specificat.
GetType
Furnizeaz tipul unui obiect dat.
Permite obiectelor s furnizeze propria concesiune i, astfel,
InitializeLifetimeService
controlul asupra propriului timp de funcionare.
Intersect Clip
D specificaiile pentru intersecia regiunii decupate.
Comunic dac obiectul sau obiectele selectate sunt vizibile n
IsVisible
cadrul panoului.
Returneaz o dimensiune n virgul mobil pentru stringul
MeasureString
msurat.
MeasureStringRegion
Returneaz regiunea stringului msurat.
Multiplic matricea pentru transformarea universal cu o matrice
MultiplyTransform
dat.
ReleaseHDC
Returneaz memoria alocat pentru HDC.
ResetClip
Reiniializeaz regiunea decupat pentru obiect.
Reiniializeaz transformarea universal la transformarea
ResetTransform
identitate.
Restore
Reiniializeaz starea grafic.
RotateTransform
Rotete matricea de transformare.
Save
Salveaz starea grafic.
ScaleTransform
Scaleaz matricea de transformare.
SetClip
Seteaz regiunea decupat pentru obiect.
ToString
Returneaz un string care reprezint obiectul curent.
Specific punctele de transformare utilizate de ctre matricea de
TransformPoints
transformare.
Furnizeaz informaia de translatare pentru regiunea decupat a
TranslateClip
obiectului.
TranslateTransform
Translateaz matricea de transformare.
Tabelul 9.9 Metode cu instane publice

Sistemul de coordonate
Multe limbaje de la nceput au folosit cele mai mici elementele de pe ecran posibile
pentru a descrie coordonatele de ecran i scalele de desen. Aceste elemente, numite pixeli,

Elemente de grafica pe calculator

Laborator nr.2

sunt, de obicei, msurate de la partea superioar i din partea stng a ecranului.


Diferitele standarde grafice au mrit rezoluia sau numrul de pixeli n oricare dintre direciile
date.
De exemplu, monitoarele CGA au avut rezoluia de culoare de 320 x 200 pixeli, care
reprezint 320 de pixeli, ncepnd cu 0 n stnga i terminnd cu 319 n dreapta, respectiv 200
de pixeli, pornind cu 0 n partea superioar i terminnd cu 199 n partea inferioar (de jos) a
ecranului.
VGA a crescut rezoluia la 640 x 480, iar acum SVGA i alte standarde au fcut un
salt cantitativ. Cnd Microsoft a proiectat sistemul de operare Windows, a decis s-l fac
independent de dispozitiv. Asta nseamn c atunci cnd doreti un cerc cu o raz fixat, el
va aprea la fel pe monitoarele CGA i VGA, fr programare suplimentar, care s
suprasolicite programatorul. Implicit, sistemul de coordonate utilizat n limbajul C# pentru
grafic este sistemul de coordonate n pixeli descris mai sus.
Pentru investigarea valorilor coordonatelor n diverse locaii pe suprafaa unui
formular creat n C# se procedeaz astfel:
Se creeaz un formular n C# i pe acesta se plaseaz 2 etichete (label), ca n
figura de mai jos.
Se adaug un eveniment MouseMove, scopul fiind acela de a returna
coordonatele X i Y ale poziiilor mouse-ului ctre cele 2 controale Label.
Poriunea de cod a programului care realizeaz acest lucru este urmtoarea:

private void Form1_MouseMove(object sender,


System.Windows.Forms.MouseEventArgs e)
{
label1.Text = e.X.ToString();
label2.Text = e.Y.ToString();
}

Pe msur ce mouse-ul este micat n suprafaa client a formularului, valorile X i Y


sunt raportate la cele 2 controale Label.
//********************************************************************
Proprietile grafice
Proprietile grafice se refer la aspecte cum ar fi trasarea i culorile de umplere, stilul
liniilor, grosimile liniilor i stilul de umplere. Combinaia corect de culori i stiluri creeaz
un efect vizual plcut pentru diagrame i grafice.
Culori
Culorile pentru desen sunt specificate prin crearea penielor de desen, iar culorile de
umplere sunt specificate prin crearea pensulelor. Peniele de desen contureaz formele, n
timp ce pensulele sunt utilizate pentru a umple cu culoare interiorul unor forme nchise. De

Elemente de grafica pe calculator

Laborator nr.2

exemplu, o simpl peni albastr poate fi creat pornind de la clasa Pen cu urmtoarea
sintax:
Pen bluepen = new Pen(Color.Blue);

O peni care traseaz linii de orice grosime specificat poate fi creat astfel:
Pen redpen = new Pen(Color.Red, 25);

O pensul simpl de culoare galben solid poate fi creat pornind de la clasa Brush astfel:
Brush yellowbrush = new SolidBrush(Color.Yellow);
Pentru a elibera orice instan ale acestor clase se folosete metoda Dispose(). De exemplu

n cazul lui redpen, aceast metod se implementeaz astfel:


Redpen.Dispose();

Stiluri de trasare a liniilor


Cnd este creat o nou peni pornind de la clasa Pen, penia va trasa o linie solid,
de grosime prestabilit sau specificat. Dup crearea peniei, C# pentru Windows permite
schimbarea stilului acesteia.
Pen bluepen = new Pen(Color.Blue, 10);
//traseaz cu o liniu i dou puncte
bluepen.DashStyle = DashStyle.DashDotDot;
bluepen.StartCap = LineCap.ArrowAnchor;

DENUMIREA STILULUI
Custom
Dash
DashDot
DashDotDot
Dot
Solid

DESCRIERE
Permite un stil de liniue personalizat, definit de utilizator.
Traseaz o linie alctuit dintr-o serie de liniue.
Traseaz o linie alctuit dintr-o serie de alternane liniupunct.
Traseaz o linie alctuit dintr-o serie de alternane liniupunct-punct.
Traseaz o linie alctuit dintr-o serie de puncte.
Traseaz o linie plin.

Stiluri de umplere cu pensula


Formele ca dreptunghiuri, cercuri, elipse pot fi umplute cu o culoare i un model.
Stilul de umplere poate varia de la o pensul de culoare solid la careuri pe diagonal.
DENUMIREA STILULUI
BackwardDiagonal
Cross
DiagonalCross
ForwardDiagonal
Horizontal
Vertical

DESCRIEREA UMPLERII
Traseaz linii pe diagonal de la dreapta-sus la stnga-jos.
Traseaz linii ncruciate orizontale i verticale.
Traseaz linii ncruciate diagonale.
Traseaz linii pe diagonal de la stnga-sus la dreapta-jos.
Traseaz linii orizontale.
Traseaz linii verticale.

Ex: Crem o pensul haurat cu un stil de haurare ncruciat. Se stabilete culoarea de prim
plan la magenta i culoarea de fundal la alb.
Brush magentabrush = new HatchBrush(HatchStyle.Cross, Color.Magenta,
Color.White);
g.FillRectangle(magentabrush, 100, 550, 500,100);

Elemente de grafica pe calculator

Laborator nr.2

Primitive grafice de desen


Toate formele grafice sunt trasate pornind de la o colecie predefinit de
metode numite primitive de desen. Aceste primitive de desen sunt descrise pe scurt n
tabelul 9.9 i dintre acestea vom prezenta cteva dintre cele mai folosite.
Metoda DrawRectangle este utilizat pentru a trasa conturul unui dreptunghi.
Ex.:
protected override void OnPaint(PaintEventArgs pe)
{
Graphics g = pe.Graphics ;
Rectangle rect = new Rectangle(50, 30, 100, 100); //punctul de nceput pentru

//dreptunghi este 50, 30. Dreptunghiul se extinde 100 de pixeli pe direcia x i 100 de
//pixeli n direcia y.

g.DrawRectangle(bluepen, rect);
LinearGradientBrush lBrush = new LinearGradientBrush(rect, Color.Red,
Color.Yellow, LinearGradientMode.BackwardDiagonal);
g.FillRectangle(lBrush, rect);//metoda FillRectangle umple interiorul
//dreptunghiului cu o culoare dat.
}

Metoda DrawLine este utilizat pentru a trasa o linie care unete dou puncte date.
Metoda DrawArc este utilizat pentru a trasa un arc dintr-o elips specificat.
Metoda DrawEllipse este utilizat pentru a trasa conturul unei elipse.
Metoda FillEllipse este utilizat pentru a umple interiorul unei elipse.
Metoda DrawPie este utilizat pentru a trasa conturul unei felii de plcint. Felia
este definit printr-o elips i dou linii radiale (raze).
Metoda FillPie este utilizat pentru umple interiorul unei felii de plcint. Felia este
definit printr-o elips i dou linii radiale (raze).
Metoda DrawString este utilizat pentru a trasa un string pe un formular.
Ex:
DrawString (string s, Font font, Brush brush, int x, int y)

Primul parametru este textul care trebuie afiat.


Al doilea parametru reprezint tipul de litere cu care se va desena irul de
caractere. De exemplu:

Al treilea parametru este utilizat pentru trasarea efectiv a textului.


Ultimii doi parametri sunt coordonatele ecran.

Font font = new Font("Arial", 10);

Metoda DrawCurve o linie care unete dou sau mai multe puncte. n exemplul de
mai jos prima curba, C1, include numai dou puncte. C2 include trei puncte. C3
include 4 puncte.

Elemente de grafica pe calculator

Laborator nr.2

O curba poate fi trasat n GDI+ utiliznd metoda Graphics.DrawCurve(). Pentru a


se putea trasa curba mai nti trebuie precizate punctele Point sau PointF.
private void Form1_DoubleClick(object sender, System.EventArgs e)
{
Graphics graph = this.CreateGraphics();
Pen penCurrent = new Pen(Color.Blue);
Point[] pt
= { new Point(40, 42), new Point(188, 246),
new Point(484, 192), new Point(350, 48) };
}

graph.DrawCurve(penCurrent, pt);

private void Form1_DoubleClick(object sender, System.EventArgs e)


{
Graphics graph = this.CreateGraphics();
Pen penCurrent = new Pen(Color.Blue);
Point[] pt
= { new Point(40, 42), new Point(188, 246),
new Point(484, 192), new Point(350, 48) };
}

graph.DrawCurve(penCurrent, pt, 0.00F);

Elemente de grafica pe calculator

Laborator nr.2

private void Form1_DoubleClick(object sender, System.EventArgs e)


{
Graphics graph = this.CreateGraphics();
Pen penCurrent = new Pen(Color.Blue);
PointF[] pt
= { new PointF(20F, 322F), new PointF(124, 24),
new PointF(214, 242), new PointF(275, 28),
new PointF(380F, 322F) };
graph.DrawCurve(penCurrent, pt);
}

public void DrawCurve(Pen pen,


PointF[] points,
int offset,
int numberOfSegments);
Argumentul offset specific cte puncte

vor fi ignorate nainte de a ncepe trasarea


liniei. Dac acesta argument, spre exemplu, are valoarea 1 atunci primul punct nu va fi
considerat n trasare. Mai departe se poate specifica numrul de segmente. Acesta trebuie s
fie mai mic dect numrul maxim de segmente posibile.
private void Form1_DoubleClick(object sender, System.EventArgs e)
{
Graphics graph = this.CreateGraphics();
Pen penCurrent = new Pen(Color.Blue);
PointF[] pt
= { new PointF(20F, 322F), new PointF(124, 24),
new PointF(214, 242), new PointF(275, 28),
new PointF(380F, 322F) };
}

graph.DrawCurve(penCurrent, pt, 1, 2);

Elemente de grafica pe calculator

Laborator nr.2

Trasare curbe nchise.


private void Form1_DoubleClick(object sender, System.EventArgs e)
{
Graphics graph = this.CreateGraphics();
Pen penCurrent = new Pen(Color.Red);
Point[] pt
= { new Point(40, 42), new Point(188, 246),
new Point(484, 192), new Point(350, 48) };
}

graph.DrawClosedCurve(penCurrent, pt);

Trasare curbe Bzier


Curbele Bzier sunt curbe parametrice cubice n care se folosesc patru puncte de control, P0,
P1 , P2 , P3 , iar funciile de baz sunt funciile Bzier, care au urmtoarele expresii:
B0(u) = (1+u)3
B1(u) = 3u(1-u)2
B2(u) = 3u2(1-u)
B3(u) = 3u3
Rezult expresia polinomial a curbelor Bzier:
Q(u) = P0(1-u)3 + 3P1u(1-u)2 + 3P2u(1-u) + 3P3u3
Punctele P1 i P2 se numesc puncte de control deoarece poziia lor n spaiu
influeneaz forma curbei. Punctele de control acioneaz aidoma unor magnei, ce trag curba
spre ele. P0 i P3 sunt capetele curbei. Poligonul obinut prin unirea punctelor succesive se
numete poligon caracteristic sau poligon de control. n sensul definiiei date poligonului
acesta ar trebui nchis cu ultimul segment, de la P3 la P0, ns, n general, acest segment al
poligonului caracteristic nu se reprezint. Principalul dezavantaj al curbelor Bzier este:
controlul global al formei curbelor.
Curbe Bzier. Reprezentare grafic:

Elemente de grafica pe calculator

private void button1_Click(object sender, System.EventArgs e)


{
Graphics graph = this.CreateGraphics();
Pen penCurrent = new Pen(Color.Blue);
Point pt1 = new Point(20, 12),
pt2 = new Point(88, 246),
pt3 = new Point(364, 192),
pt4 = new Point(250, 48);
graph.DrawBezier(penCurrent, pt1, pt2, pt3, pt4);
}

Desenare floare folosind proprietile curbelor Bzier


private void pictureBox2_Paint(object sender,
System.Windows.Forms.PaintEventArgs e)
{

Laborator nr.2

Elemente de grafica pe calculator

Laborator nr.2

int cx,cy;
cx = 100; cy = pictureBox2.Height-40;
//deseneaza tulpina dinspre coltul stanga-jos spre centru
e.Graphics.DrawBezier(new Pen(Color.Green,10),
new Point(0,cy), new Point(0,3*cy/4),
new Point(cx/4,cy/4),new Point(cx/2,cy/2));
//stabileste transformarea pentru restul florii
float fScale = Math.Min (cx,cy)/1500f;//returneaza valoarea minima
dintre cx si cy impartita la 2000
e.Graphics.TranslateTransform(cx/2,cy/2);
e.Graphics.ScaleTransform(fScale,fScale);
//deseneaza petale rosii
GraphicsPath path = new GraphicsPath();//reprezentare serii de linii
si curbe conectate
path.AddBezier(new Point(0,0),new Point(125,125),
new Point(475,125),new Point(600,0));
path.AddBezier(new Point(600,0),new Point(475,-125),
new Point(125,-125),new Point(0,0));
for(int i=0;i<12;i++)
{
e.Graphics.FillPath(Brushes.Red,path);
e.Graphics.DrawPath(Pens.Black,path);
e.Graphics.RotateTransform(360/12);
}
//deseneaza cerc galben in centru
Rectangle rect = new Rectangle(-150,150,300,300);
e.Graphics.FillEllipse(Brushes.Yellow,rect)
;
e.Graphics.DrawEllipse(Pens.Black,rect);
}

Serii de curbe Bzier


protected override void OnPaint(PaintEventArgs pe)
{
Graphics g = pe.Graphics;
g.FillRectangle(new SolidBrush(Color.White), ClientRectangle);
GraphicsPath path = new GraphicsPath(new Point[] {
new Point(40, 140), new Point(275, 200),
new Point(105, 225), new Point(190, 300),
new Point(50, 350), new Point(20, 180), },
new byte[] {
(byte)PathPointType.Start,
(byte)PathPointType.Bezier,
(byte)PathPointType.Bezier,
(byte)PathPointType.Bezier,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
});
PathGradientBrush pgb = new PathGradientBrush(path);
pgb.SurroundColors = new Color[] { Color.Green,Color.Yellow,Color.Red, Color.Blue,
Color.Orange, Color.Coral, };
g.FillPath(pgb, path);
}

Elemente de grafica pe calculator

Laborator nr.2

private void button1_Click(object sender, System.EventArgs e)


{
Graphics graph = this.CreateGraphics();
Pen penCurrent = new Pen(Color.Blue);
Point[] pt = { new Point( 10, 5), new Point(340, 60),
new Point(320, 148), new Point(150, 120),
new Point(24, 220), new Point(250, 150),
new Point(304, 240) };
graph.DrawBeziers(penCurrent, pt);
}

n continuare, propunem realizarea unui program de astronomie, mai precis, de calcul


al poziiilor unor planete la un moment dat. Deoarece nu exist un moment special, la care
toate planetele s fie aliniate, vom considera ca referin o dat arbitrar, la care configuraiile
lor sunt cunoscute i vom calcula apoi poziiile n jurul Soarelui (longitudinile) la o dat
introdus de utilizator.

Elemente de grafica pe calculator

Laborator nr.2

Vom considera programul mprit n 2 module independente, care n final vor fi


reunite. Fiecare modul va fi implementat printr-o clas, cu diferite metode (funcii) i
proprieti (variabile). Ideea de baz a programrii modulare este c modulele sunt realizate
cvasi-independent, de persoane diferite, care nu au nevoie s neleag celelalte componente.
Un modul trebuie s funcioneze ca un obiect de sine stttor, care s fie uor integrabil n
proiectul general. De aceea, fiecare modul trebuie testat pentru a i se asigura corectitudinea.
Dac n unele module exist erori nedetectate, dup integrarea lor n sistem va fi foarte
dificil depistarea i corectarea acestora.
Structura general a celor dou module este urmtoarea:

Cele dou module sunt implementate n clasele Zile.cs i Planete.cs. Interfaa


aplicaiei este prezentat n figura de mai jos:

Funcia asociat butonului Calculeaza este urmtoarea:


DateTime data = new DateTime(1, 1, 1);
private void button5_Click(object sender, EventArgs e)
{
int zi, luna, an;
if (textBox3.Text == "")
{

Elemente de grafica pe calculator

Laborator nr.2

MessageBox.Show("Introduceti ziua");
textBox3.Focus();

}
else if (textBox5.Text == "")
{
MessageBox.Show("Introduceti ziua");
textBox3.Focus();
}
else if (comboBox2.SelectedIndex == -1)
{
MessageBox.Show("Introduceti luna");
comboBox2.Focus();
comboBox2.DroppedDown = true;
}
else
{
zi = Convert.ToInt32(this.textBox3.Text);
luna = Convert.ToInt32(this.comboBox2.SelectedIndex + 1);
an = Convert.ToInt32(this.textBox5.Text);
data = new DateTime(an, luna, zi);
afisare();
}

Apelul claselor Zile.cs i Planete.cs se face din funcia afiare():


void afisare()
{
zile z = new zile(data);
planete pl = new planete(z.Diferenta);
this.textBox4.Text = "";
for (int i = 0; i < pl.NumarPlanete; i++)
this.textBox4.Text += "Planeta " + pl.Nume[i] + " este la
" + pl.Longitudine[i] + ((char)(13)) + ((char)(10));
}

3. Desfurarea lucrrii:
1. Se va citi breviarul teoretic. Se atrage atenia asupra faptului c aceste informaii vor fi
folosite i la desfurarea altor lucrri de laborator.
2. Se vor studia exemplele prezentate pe parcursul acestui laborator urmrind efectul
rulrii acestora i buna lor execuie.
3. Se va ncerca gsirea altor posibiliti de soluionare a problemelor propuse.
4. Pentru aplicaia de astronomie, s se afieze data cnd dou planete alese de utilizator
sunt la distan minim/maxim.

S-ar putea să vă placă și