Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Počítače a programování 2 Přednáška 6 17.3.2014 Jiří Šebesta.

Podobné prezentace


Prezentace na téma: "Počítače a programování 2 Přednáška 6 17.3.2014 Jiří Šebesta."— Transkript prezentace:

1 Počítače a programování 2 Přednáška 6 17.3.2014 Jiří Šebesta

2 TÉMA – grafika ve Visual C++ 1.GDI, OpenGL, DirectX 2.Událost Paint 3.GDI - příklady

3 GDI, DirectX, OpenGL (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

4 GDI, DirectX, OpenGL (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.

5 GDI - událost Paint (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.

6 GDI - událost Paint (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šťka bod se jménem point_A souřadnice x souřadnice y vykreslení čáry z point_A do point_B perem MyPen alternativní vykreslení čáry s přímou definicí pero X A Y A X B Y B

7 GDI - událost Paint (3/3) Událost Paint se volá při vykreslování okna A=[100, 100] B=[300, 300] Projekt: Ex108

8 GDI - příklady (1/11) Kreslení do objektu PictureBox ve smyčce Událost Paint v PictureBoxu se jménem PictureBox

9 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

10 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: Ex109

11 GDI - příklady (4/11) Volání obnovení (překreslení) Refresh() + dialog 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, na- stavená barva se vloží do pro- měnné MyBrush, která definuje barvu koláče a následně se zavolá refresh (překreslení) koláče.

12 GDI - příklady (5/11) #pragma once int angle=20; // global variable – angle of pie namespace 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 endregion private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { //MyBrush inicialization during Form1 loading - blue MyBrush = gcnew SolidBrush(Color::Blue); }

13 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áče překre- slení koláče obdélník koláče poč. úhel úhlová délka koláče

14 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: Ex110

15 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()

16 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ěnnou počáteční poloha textu string přímo jako parametr

17 GDI - příklady (10/11) array ^ 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);

18 GDI - příklady (11/11) e->Graphics->FillPolygon(MyBrush, PolyPoints); Výběr kreslených objektů: Fillxxx() Příklad: FillPolygon() Projekt: Ex111

19 DĚKUJI ZA POZORNOST TÉMA NÁSLEDUJÍCÍ PŘEDNÁŠKY Úvod do Matlabu


Stáhnout ppt "Počítače a programování 2 Přednáška 6 17.3.2014 Jiří Šebesta."

Podobné prezentace


Reklamy Google