18
OSNOVA: a) Úvod - GDI, OpenGL, DirectX b) Událost Paint() c) GDI - příklady Jiří Šebesta Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E PŘEDNÁŠKA 6

Přednáška 6 17.3.2014 Jiří Šebesta

Embed Size (px)

DESCRIPTION

Počítače a programování 2. Přednáška 6 17.3.2014 Jiří Šebesta. TÉMA – grafika ve Visual C++. GDI, OpenGL, DirectX Událost Paint GDI - příklady. GDI, DirectX, OpenGL (1/2). GDI (Graphics Device Interface): 2D grafický ovladač - PowerPoint PPT Presentation

Citation preview

Page 1: Přednáška  6 17.3.2014 Jiří Šebesta

OSNOVA:

a) Úvod - GDI, OpenGL, DirectXb) Událost Paint() c) GDI - příklady

Jiří ŠebestaJiří ŠebestaÚstav radioelektroniky, FEKT VUT v BrněÚstav radioelektroniky, FEKT VUT v Brně

Počítače a programování 2 pro obor ESTBPC2E

PŘEDNÁŠKA 6

Page 2: Přednáška  6 17.3.2014 Jiří Šebesta

Úvod – GDI, DirectX, OpenGL Úvod – GDI, DirectX, OpenGL (1/2)(1/2)• GDI (Graphics Device Interface):

– 2D grafický ovladač– standardní součást Widows sloužící k reprezentaci grafických objektů a jejich transformací do výstupních zařízení (obrazovka, tiskárna)– zajišťuje kreslení čar, křivek a dalších grafických objektů, renderování fontů, správu barevných palet atd. – nezajišťuje přímo vykreslování vlastních Windows objektů (okna, dialogy, menu, atd.), GDI je k těmto úkolům využívána uživatelským subsystémem (v knihovně user32.dll)– všechny dále uvedené příklady jsou řešené pomocí GDI

Page 3: Přednáška  6 17.3.2014 Jiří Šebesta

Úvod – GDI, DirectX, OpenGL Úvod – GDI, DirectX, OpenGL (2/2)(2/2)

• DirectX (Graphics Device Interface):

- sada knihoven od Microsoftu pro funkce aplikačních rozhraní API pro Windows, mezi které jsou zařazeny i knihovny pro grafické výstupy DirectDraw (vykreslování 2D grafiky do okna, není jednoduché jako u GDI, avšak rychlejší) a Direct3D (výkonný 3D engine).

• OpenGL (Open Graphics Library):

- otevřený API standard pro tvorbu aplikací počítačové grafiky ve 3D, zdarma použivatelný. Hlavní výhodou je velký počet tutoriálů a návodů pro grafické výstupy.

Page 4: Přednáška  6 17.3.2014 Jiří Šebesta

GDI - uGDI - uddálostálost Paint()Paint() (1/3) (1/3)

private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {

Graphics ^ g = e->Graphics;}

vložení události Paint() do

formuláře aplikace

aktivace grafického objektu se jménem

e

hlavička události Paint()

• Většina ovládacích prvků (objektů) včetně vlastního formuláře nabízí aplikaci události Paint() , která umožňuje grafický výstup v rámci plochy daného objektu.

Page 5: Přednáška  6 17.3.2014 Jiří Šebesta

GDI - uGDI - uddálost álost Paint()Paint() (2/3) (2/3)

private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { Graphics ^ g = e->Graphics; Pen^ MyPen = gcnew Pen(Color::Blue,3.0f); Point point_A = Point(100,100); Point point_B = Point(300,300); e->Graphics->DrawLine(MyPen, point_A, point_B); e->Graphics->DrawLine(gcnew Pen(Color::Red,3.0f), 100, 300, 300, 100);

}

nový objekt pera se jménem

MyPen

• Modrá a červená čára ve formulářovém okně

barva

tloušťkabod se jménem

point_A

souřadnice x

souřadnice y

vykreslení čáry z point_A do point_B

perem MyPenalternativní

vykreslení čáry s přímou definicí

pero XA YA XB YB

Page 6: Přednáška  6 17.3.2014 Jiří Šebesta

GDI - uGDI - uddálost álost Paint()Paint() (3/3) (3/3)

• Událost Paint() se volá při vykreslování okna

A=[100, 100] B=[300, 300]

Projekt: BPC2E_Ex115

Page 7: Přednáška  6 17.3.2014 Jiří Šebesta

GDI - příklady (1/11)GDI - příklady (1/11)

Příklad: Vykreslete do objektu PictureBox v cyklech následující obrazec:

• Vykreslení obdélníků a čar v metodě pro událost Paint() v objektu typu PictureBox se jménem PictureBox

Page 8: Přednáška  6 17.3.2014 Jiří Šebesta

GDI - příklady (2/11)GDI - příklady (2/11)

private: System::Void PictureBox_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { Graphics ^ g = e->Graphics; Pen^ BluePen = gcnew Pen(Color::Blue,2.0f); Pen^ RedPen = gcnew Pen(Color::Red,2.0f); Pen^ MyPen; Point point_A = Point(200,200); Point point_B; int angle=0; // starting angle for radial lines int anstep=5;// step of angle int anstop=360; // ending angle for rad. lines int width=200; // initial width of rectangle int wstep=10; // step of rectangle width int wstop=400; // ending width of rectangle

MyPen=RedPen; // initial pen is red

Page 9: Přednáška  6 17.3.2014 Jiří Šebesta

GDI - příklady (3/11)GDI - příklady (3/11)

while (angle<=anstop) //radial lines{ point_B =Point((int)(200+100*cos(angle*PI/180.0)),

(int)(200+100*sin(angle*PI/180.0))); e->Graphics->DrawLine(BluePen, point_A, point_B); angle+=anstep;}while (width<=wstop) //rectangles{ e->Graphics->DrawRectangle(MyPen, 200-width/2,

200-width/2, width, width); width+=wstep; if (MyPen==RedPen) //color change

MyPen=BluePen; else

MyPen=RedPen;}}

Projekt: BPC2E_Ex116

Page 10: Přednáška  6 17.3.2014 Jiří Šebesta

GDI - příklady (4/11)GDI - příklady (4/11)

Příklad: Sestavte formulářovou aplikaci, která bude zobrazovat plný „koláč“ podle nastavené úhlové hodnoty ve stupních s výběrem barvy

Volání obnovení:

Refresh()

+ ColorDialog

• Při změně hodnoty v NUD se změní globální proměnná a udávající úhel koláče ve stup-ních a volá se refresh (překre-slení) PictureBoxu, ve kte-rém je koláč vykreslován.

• Při stisku tlačítka Btn_Color je vyvolán ColorDialog, nastave-ná barva se vloží do proměnné MyBrush, která definuje barvu koláče a následně se zavolá refresh (překreslení) koláče.

Page 11: Přednáška  6 17.3.2014 Jiří Šebesta

GDI - příklady (5/11)GDI - příklady (5/11)

#pragma onceint angle=20; // global variable – angle of pienamespace Ex110{

public ref class Form1 : public System::Windows::Forms::Form { ……… private: System::Windows::Forms::Button^

Btn_Color; private: SolidBrush^ MyBrush; // private

variable of Form1 – MyBrush ………

#pragma endregionprivate: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { //MyBrush inicialization during Form1 loading - blue

MyBrush = gcnew SolidBrush(Color::Blue);}

Page 12: Přednáška  6 17.3.2014 Jiří Šebesta

GDI - příklady (6/11)GDI - příklady (6/11)

private: System::Void PB_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { Graphics ^ g = e->Graphics; e->Graphics->Clear(System::Drawing::Color::White); e->Graphics->FillPie(MyBrush,100,100,200,200,0,-a);}private: System::Void NUD_ValueChanged(System::Object^ sender, System::EventArgs^ e) { a = System::Convert::ToInt32(this->NUD->Value); this->PB->Refresh();}

mazání grafiky v objektu, plátno

bílé

vykresleníkoláčepřekre-

slení koláče

obdélníkkoláče

poč. úhel

úhlovádélka koláče

Page 13: Přednáška  6 17.3.2014 Jiří Šebesta

GDI - příklady (7/11)GDI - příklady (7/11)

private: System::Void Btn_Color_Click(System::Object^ sender, System::EventArgs^ e) { this->CDialog->ShowDialog(); MyBrush->Color = this->CDialog->Color; this->PB->Refresh();}

otevření dialogu barvy

přiřazení barvy štětci pro

kreslení koláče

překreslení

koláče

Projekt: BPC2E_Ex117

Page 14: Přednáška  6 17.3.2014 Jiří Šebesta

GDI - příklady (8/11)GDI - příklady (8/11)

e->Graphics->DrawArc(MyPen,180,10,100,100,-135,180);

• Výběr kreslených objektů: Drawxxx()

• Příklad: DrawArc()

Page 15: Přednáška  6 17.3.2014 Jiří Šebesta

GDI - příklady (9/11)GDI - příklady (9/11)

System::Drawing::Font^ MyTextFont = gcnew System::Drawing::Font("Arial",16);

SolidBrush^ MyTextBrush = gcnew SolidBrush(Color::Black);String^ DrawRect_string = "DrawRectangle";

e->Graphics->DrawString(DrawRect_string, MyTextFont, MyTextBrush, 10, 130);

e->Graphics->DrawString("DrawArc", MyTextFont, MyTextBrush, 190, 130);

• Text jako grafický objekt: DrawString()

nový font nový štětec pro

text

string přes proměnnoupočáteční

poloha textu

string přímo jako

parametr

Page 16: Přednáška  6 17.3.2014 Jiří Šebesta

GDI - příklady (10/11)GDI - příklady (10/11)

array<Point>^ PolyPoints = {Point(670,10), Point(690,50), Point(750,50), Point(670,100), Point(590,50), Point(640,50)};

• Pole bodů pro DrawPolygon(), DrawCurve()atd.

e->Graphics->DrawPolygon(MyPen, PolyPoints);

Page 17: Přednáška  6 17.3.2014 Jiří Šebesta

GDI - příklady (11/11)GDI - příklady (11/11)

e->Graphics->FillPolygon(MyBrush, PolyPoints);

• Výběr kreslených objektů: Fillxxx()

• Příklad: FillPolygon()

Projekt: BPC2E_Ex117

Page 18: Přednáška  6 17.3.2014 Jiří Šebesta

Téma následující přednášky

– Úvod do Matlabu

DĚKUJI ZA POZORNOST